Changeset 0a3ddd in git for Singular/ipshell.cc
- Timestamp:
- Oct 21, 1998, 12:25:54 PM (26 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- c67136b6996540333f40f75592110b036a513219
- Parents:
- 474fb0f7cb536c4ad3eda28eea8a1d8a1cfd6ecb
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/ipshell.cc
r474fb0f r0a3ddd 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: ipshell.cc,v 1.2 5 1998-10-15 14:08:35 krueger Exp $ */4 /* $Id: ipshell.cc,v 1.26 1998-10-21 10:25:35 krueger Exp $ */ 5 5 /* 6 6 * ABSTRACT: … … 229 229 void killlocals(int v) 230 230 { 231 #ifndef HAVE_NAMESPACES 231 232 killlocals0(v,&IDROOT); 232 233 … … 245 246 h = IDNEXT(h); 246 247 } 248 #else 249 killlocals0(v,&IDROOT); 250 251 idhdl h = NSROOT(namespaceroot->root); 252 idhdl sh=currRingHdl; 253 BOOLEAN changed=FALSE; 254 255 while (h!=NULL) 256 { 257 if (((IDTYP(h)==QRING_CMD) || (IDTYP(h) == RING_CMD)) 258 && (IDRING(h)->idroot!=NULL)) 259 { 260 //Print("=====> Toplevel: ring %s, lev: %d:\n",IDID(h),IDLEV(h)); 261 if (h!=currRingHdl) {changed=TRUE;rSetHdl(h,FALSE);} 262 killlocals0(v,&(IDRING(h)->idroot)); 263 } 264 if (IDTYP(h)==PACKAGE_CMD && (IDPACKAGE(h)->idroot!=NULL)) 265 { 266 idhdl h0 = (IDPACKAGE(h))->idroot; 267 268 //Print("=====> package: %s, lev: %d:\n",IDID(h),IDLEV(h)); 269 while (h0!=NULL) 270 { 271 if (((IDTYP(h0)==QRING_CMD) || (IDTYP(h0) == RING_CMD)) 272 && (IDRING(h0)->idroot!=NULL)) 273 { 274 //Print("=====> '%s': ring %s, lev: %d:\n",IDID(h),IDID(h0),IDLEV(h0)); 275 if (h0!=currRingHdl) {changed=TRUE;rSetHdl(h0,FALSE);} 276 killlocals0(v,&(IDRING(h0)->idroot)); 277 } 278 h0 = IDNEXT(h0); 279 } 280 killlocals0(v,&((IDPACKAGE(h))->idroot)); 281 } 282 h = IDNEXT(h); 283 } 284 #endif /* HAVE_NAMESPACES */ 247 285 if (changed) 248 286 { … … 251 289 rSetHdl(sh,TRUE); 252 290 } 291 253 292 if (myynest<=1) iiNoKeepRing=TRUE; 254 293 } … … 269 308 else 270 309 { 310 #ifdef HAVE_NAMESPACES 311 idhdl pack; 312 if(index(what, ':')!= NULL) 313 iiname2hdl(what, &pack, &h); 314 else h = ggetid(what); 315 #else /* HAVE_NAMESPACES */ 271 316 h = ggetid(what); 317 #endif /* HAVE_NAMESPACES */ 272 318 if (h!=NULL) 273 319 { … … 281 327 { 282 328 //Print("list_cmd:package or pointer\n"); 283 h=IDPACKAGE(h)->idroot; 329 if(strcmp(IDID(h), "Top")!=0) h=IDPACKAGE(h)->idroot; 330 else return; 284 331 } 285 332 else … … 486 533 487 534 #ifdef HAVE_NAMESPACES 488 r=namespaceroot->get(theMap->preimage,myynest); 535 idhdl pack; 536 //r=namespaceroot->get(theMap->preimage,myynest); 537 iiname2hdl(theMap->preimage,&pack,&r); 489 538 #else 490 539 r=idroot->get(theMap->preimage,myynest); … … 709 758 } 710 759 711 int iiDeclCommand(leftv sy, leftv name, int lev,int t, idhdl* root,BOOLEAN i nit_b)760 int iiDeclCommand(leftv sy, leftv name, int lev,int t, idhdl* root,BOOLEAN isring, BOOLEAN init_b) 712 761 { 713 762 BOOLEAN res=FALSE; 763 char *id = name->name; 764 714 765 memset(sy,0,sizeof(sleftv)); 715 766 if ((name->name==NULL)||(isdigit(name->name[0]))) … … 724 775 // Warn("`%s` is already in use",name->name); 725 776 //} 726 sy->data = (char *)enterid(name->name,lev,t,root,init_b); 777 #ifdef HAVE_NAMESPACES 778 if(name->req_packhdl != NULL && name->packhdl != NULL && 779 name->req_packhdl != name->packhdl) 780 id = mstrdup(name->name); 781 782 //if(name->req_packhdl != NULL /*&& !isring*/) { 783 if(name->req_packhdl != NULL && !isring && 784 IDPACKAGE(name->req_packhdl) != root) { 785 //Print("iiDeclCommand: PUSH(%s)\n",IDID(name->req_packhdl)); 786 namespaceroot->push( IDPACKAGE(name->req_packhdl) , 787 IDID(name->req_packhdl)); 788 sy->data = (char *)enterid(id,lev,t, 789 &IDPACKAGE(name->req_packhdl)->idroot,init_b); 790 namespaceroot->pop(); 791 } 792 else 793 #endif /* HAVE_NAMESPACES */ 794 { 795 sy->data = (char *)enterid(id,lev,t,root,init_b); 796 } 727 797 if (sy->data!=NULL) 728 798 { … … 734 804 { 735 805 sy->next=(leftv)Alloc(sizeof(sleftv)); 736 res=iiDeclCommand(sy->next,name->next,lev,t,root );806 res=iiDeclCommand(sy->next,name->next,lev,t,root, isring); 737 807 } 738 808 } … … 767 837 } 768 838 769 BOOLEAN iiExport (leftv v, int toLev) 770 { 771 BOOLEAN nok=FALSE; 772 leftv r=v; 773 while (v!=NULL) 774 { 775 if ((v->name==NULL)||(v->rtyp==0)||(v->e!=NULL)) 776 { 777 WerrorS("cannot export"); 778 nok=TRUE; 779 } 780 else 781 { 782 idhdl h=(idhdl)v->data; 783 if (IDLEV(h)==0) Warn("`%s` is already global",IDID(h)); 784 else 785 { 839 static BOOLEAN iiInternalExport (leftv v, int toLev) 840 { 841 idhdl h=(idhdl)v->data; 842 //Print("iiInternalExport('%s',%d)%s\n", v->name, toLev,""); 843 if (IDLEV(h)==0) Warn("`%s` is already global",IDID(h)); 844 else 845 { 846 h=IDROOT->get(v->name,toLev); 847 idhdl *root=&IDROOT; 848 if ((h==NULL)&&(currRing!=NULL)) 849 { 850 h=currRing->idroot->get(v->name,toLev); 851 root=&currRing->idroot; 852 } 853 if ((h!=NULL)&&(IDLEV(h)==toLev)) 854 { 855 if (IDTYP(h)==v->Typ()) 856 { 857 #ifdef KAI 858 Warn("!!! redefining %s",IDID(h)); 859 #else 860 Warn(" redefining %s",IDID(h)); 861 #endif 786 862 #ifdef HAVE_NAMESPACES 787 h=namespaceroot->get(v->name,toLev); 788 #else /* HAVE_NAMESPACES */ 789 h=idroot->get(v->name,toLev); 863 //if (namespaceroot->currRing==IDRING(h)) namespaceroot->currRing=NULL; 790 864 #endif /* HAVE_NAMESPACES */ 791 idhdl *root=&IDROOT;792 if ((h==NULL)&&(currRing!=NULL))793 {794 h=currRing->idroot->get(v->name,toLev);795 root=&currRing->idroot;796 }797 if ((h!=NULL)&&(IDLEV(h)==toLev))798 {799 if (IDTYP(h)==v->Typ())800 {801 Warn("redefining %s",IDID(h));802 865 #ifdef USE_IILOCALRING 803 866 if (iiLocalRing[0]==IDRING(h)) iiLocalRing[0]=NULL; … … 806 869 namespaceroot->root->currRing=NULL; 807 870 #endif 808 killhdl(h,root); 809 } 810 else 811 { 812 r->CleanUp(); 813 return TRUE; 814 } 871 killhdl(h,root); 872 } 873 else 874 { 875 return TRUE; 876 } 877 } 878 h=(idhdl)v->data; 879 IDLEV(h)=toLev; 880 iiNoKeepRing=FALSE; 881 } 882 return FALSE; 883 } 884 885 #ifdef HAVE_NAMESPACES 886 BOOLEAN iiInternalExport (leftv v, int toLev, idhdl roothdl) 887 { 888 idhdl h=(idhdl)v->data; 889 if(h==NULL) { 890 Warn("'%s': no such identifier\n", v->name); 891 return FALSE; 892 } 893 package rootpack = IDPACKAGE(roothdl); 894 //Print("iiInternalExport('%s',%d,%s) %s\n", v->name, toLev, IDID(roothdl),""); 895 // if (IDLEV(h)==0) Warn("`%s` is already global",IDID(h)); 896 // else 897 { 898 /* is not ring or ring-element */ 899 if( (IDTYP(h) == RING_CMD) || (IDTYP(h) == QRING_CMD)) { 900 sleftv tmp_expr; 901 //Print("// ==> Ring set nesting to 0\n"); 902 //Print("// ++> make a copy of ring\n"); 903 if(iiInternalExport(v, toLev)) return TRUE; 904 if(IDPACKAGE(roothdl) != NSPACK(namespaceroot)) { 905 namespaceroot->push(rootpack, IDID(roothdl)); 906 //namespaceroot->push(NSPACK(namespaceroot->root), "Top"); 907 idhdl rl=enterid(mstrdup(v->name), toLev, IDTYP(h), 908 &(rootpack->idroot), FALSE); 909 namespaceroot->pop(); 910 911 if( rl == NULL) return TRUE; 912 ring r=(ring)v->Data(); 913 if(r != NULL) { 914 if (&IDRING(rl)!=NULL) rKill(rl); 915 r->ref++; 916 IDRING(rl)=r; 815 917 } 816 h=(idhdl)v->data; 817 IDLEV(h)=toLev; 818 iiNoKeepRing=FALSE; 918 else Print("! ! ! ! ! r is empty!!!!!!!!!!!!\n"); 919 } 920 } 921 else if ((BEGIN_RING<IDTYP(h)) && (IDTYP(h)<END_RING) 922 || ((IDTYP(h)==LIST_CMD) && (lRingDependend(IDLIST(h))))) { 923 //Print("// ==> Ringdependent set nesting to 0\n"); 924 if(iiInternalExport(v, toLev)) return TRUE; 925 } else { 926 if (h==IDROOT) 927 { 928 IDROOT=h->next; 929 } 930 else 931 { 932 idhdl hh=IDROOT; 933 while ((hh->next!=h)&&(hh->next!=NULL)) 934 hh=hh->next; 935 if (hh->next==h) 936 hh->next=h->next; 937 else 938 return TRUE; 939 } 940 h->next=rootpack->idroot; 941 rootpack->idroot=h; 942 } 943 IDLEV(h)=toLev; 944 } 945 return FALSE; 946 } 947 #endif /* HAVE_NAMESAPCES */ 948 949 BOOLEAN iiExport (leftv v, int toLev) 950 { 951 BOOLEAN nok=FALSE; 952 leftv r=v; 953 while (v!=NULL) 954 { 955 if ((v->name==NULL)||(v->rtyp==0)||(v->e!=NULL)) 956 { 957 WerrorS("cannot export"); 958 nok=TRUE; 959 } 960 else 961 { 962 if(iiInternalExport(v, toLev)) { 963 r->CleanUp(); 964 return TRUE; 819 965 } 820 966 } … … 826 972 827 973 /*assume root!=idroot*/ 828 BOOLEAN iiExport (leftv v, int toLev, idhdl &root) 974 #ifdef HAVE_NAMESPACES 975 BOOLEAN iiExport (leftv v, int toLev, idhdl root) 829 976 { 830 977 BOOLEAN nok=FALSE; … … 854 1001 } 855 1002 } 856 idhdl h=(idhdl)v->data; 857 if (h==IDROOT) 858 { 859 IDROOT=h->next; 860 } 861 else 862 { 863 idhdl hh=IDROOT; 864 while ((hh->next!=h)&&(hh->next!=NULL)) 865 hh=hh->next; 866 if (hh->next==h) 867 hh->next=h->next; 868 else 869 break; 870 } 871 h->next=root; 872 root=h; 873 IDLEV(h)=toLev; 1003 if(iiInternalExport(v, toLev, root)) { 1004 rv->CleanUp(); 1005 return TRUE; 1006 } 874 1007 } 875 1008 v=v->next; … … 878 1011 return nok; 879 1012 } 1013 #endif /* HAVE_NAMESPACES */ 880 1014 881 1015 BOOLEAN iiCheckRing(int i)
Note: See TracChangeset
for help on using the changeset viewer.