Changeset daeb6d in git for Singular/ipid.cc
- Timestamp:
- Oct 22, 1998, 2:26:17 PM (26 years ago)
- Branches:
- (u'spielwiese', '2a584933abf2a2d3082034c7586d38bb6de1a30a')
- Children:
- c6217051c24f5239a0f05fbcbf54346d4765c2e5
- Parents:
- f78e2660572d74fc77f51e15288a9f225a21bd10
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/ipid.cc
rf78e26 rdaeb6d 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: ipid.cc,v 1.2 0 1998-10-21 15:56:05 Singular Exp $ */4 /* $Id: ipid.cc,v 1.21 1998-10-22 12:26:14 krueger Exp $ */ 5 5 6 6 /* … … 37 37 char* iiNoName="_"; 38 38 39 void paCleanUp(package pack); 40 BOOLEAN paKill(package pack, BOOLEAN force_top=FALSE); 41 39 42 /*0 implementation*/ 40 43 … … 173 176 IDPROC(h)->language=LANG_NONE; 174 177 } 178 else if (t == PACKAGE_CMD) 179 { 180 IDPACKAGE(h)->language=LANG_NONE; 181 } 182 175 183 } 176 184 // -------------------------------------------------------- … … 208 216 #endif 209 217 #ifdef HAVE_NAMESPACES 210 if( strcmp(s,"Top")==0) {211 Warn("identifier `%s` in use",s);212 return(h);213 }218 if(t==PACKAGE_CMD && strcmp(s,"Top")==0) { 219 Warn("identifier `%s` in use",s); 220 return(h); 221 } 214 222 #endif /* HAVE_NAMESPACES */ 215 223 if (s==IDID(h)) … … 350 358 } 351 359 // ring / qring -------------------------------------------------------- 352 // package -------------------------------------------------------------353 360 if ((IDTYP(h) == RING_CMD) || (IDTYP(h) == QRING_CMD)) 354 361 { … … 394 401 // package ------------------------------------------------------------- 395 402 else if (IDTYP(h) == PACKAGE_CMD) { 396 package pack = IDPACKAGE(h); 397 if(!checkPackage(pack)) return; 398 idhdl hdh = pack->idroot; 399 //idhdl hdh = IDNEXT(*hd); 400 idhdl temp; 401 //Print(">>>>>>Free package\n"); 402 while (hdh!=NULL) 403 { 404 temp = IDNEXT(hdh); 405 //Print("killing %s\n", IDID(hdh)); 406 killhdl(hdh,&(IDPACKAGE(h)->idroot)); 407 hdh = temp; 408 } 409 //Print("killing last %s\n", IDID(*hd)); 410 //killhdl(*hd,hd); 411 //Print(">>>>>>Free package... done\n"); 403 if(IDPACKAGE(h)->language!=LANG_TOP) { 404 if(!paKill(IDPACKAGE(h))) return; 405 } else { 406 if(strcmp(IDID(h), "Top")!=0) { 407 if(!paKill(IDPACKAGE(h))) return; 408 } 409 else { 410 if(!paKill(IDPACKAGE(h), TRUE)) return; 411 } 412 } 412 413 } 413 414 // pointer ------------------------------------------------------------- … … 690 691 if (pi->ref <= 0) 691 692 Free((ADDRESS)pi, sizeof(procinfo)); 693 } 694 695 void paCleanUp(package pack) 696 { 697 (pack->ref)--; 698 if (pack->ref < 0) 699 { 700 if( pack->language == LANG_C) 701 { 702 Print("//dclose(%s)\n",pack->libname); 703 704 } 705 FreeL((ADDRESS)pack->libname); 706 memset((void *) pack, 0, sizeof(package)); 707 pack->language=LANG_NONE; 708 } 709 } 710 711 BOOLEAN paKill(package pack, BOOLEAN force_top) 712 { 713 if (pack->ref <= 0 || force_top) { 714 idhdl hdh = pack->idroot; 715 idhdl temp; 716 while (hdh!=NULL) 717 { 718 temp = IDNEXT(hdh); 719 if((IDTYP(hdh)!=PACKAGE_CMD) || 720 (IDTYP(hdh)==PACKAGE_CMD && IDPACKAGE(hdh)->language!=LANG_TOP) || 721 (IDTYP(hdh)==PACKAGE_CMD && IDPACKAGE(hdh)->language==LANG_TOP && 722 IDPACKAGE(hdh)->ref>0 )) 723 killhdl(hdh,&(pack->idroot)); 724 hdh = temp; 725 } 726 if(checkPackage(pack)) { 727 paCleanUp(pack); 728 Free((ADDRESS)pack, sizeof(package)); 729 } else return FALSE; 730 } else paCleanUp(pack); 731 return TRUE; 692 732 } 693 733 … … 857 897 } 858 898 if (nshdl->pack==pack) { 899 //Print("NSstack: %s:%d, nesting=%d\n", nshdl->name, nshdl->lev, nshdl->myynest); 859 900 Warn("package '%s' still in use on level %d",nshdl->name, nshdl->lev); 860 901 return FALSE;
Note: See TracChangeset
for help on using the changeset viewer.