Changeset 0a3ddd in git for Singular/ipshell.cc


Ignore:
Timestamp:
Oct 21, 1998, 12:25:54 PM (26 years ago)
Author:
Kai Krüger <krueger@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
c67136b6996540333f40f75592110b036a513219
Parents:
474fb0f7cb536c4ad3eda28eea8a1d8a1cfd6ecb
Message:
 Modified Files:
 	extra.cc grammar.y iparith.cc ipassign.cc ipconv.cc ipid.cc
 	ipid.h iplib.cc ipprint.cc ipshell.cc ipshell.h libparse.h
 	libparse.l lists.h lists.cc misc.cc tok.h tesths.cc subexpr.h
 	subexpr.cc silink.cc ring.cc mpsr_Tok.cc mpsr_Put.h
 	mpsr_Put.cc
	Added major changes for Namespaces. All test, except MP are
	running.


git-svn-id: file:///usr/local/Singular/svn/trunk@2582 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/ipshell.cc

    r474fb0f r0a3ddd  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: ipshell.cc,v 1.25 1998-10-15 14:08:35 krueger Exp $ */
     4/* $Id: ipshell.cc,v 1.26 1998-10-21 10:25:35 krueger Exp $ */
    55/*
    66* ABSTRACT:
     
    229229void killlocals(int v)
    230230{
     231#ifndef HAVE_NAMESPACES
    231232  killlocals0(v,&IDROOT);
    232233
     
    245246    h = IDNEXT(h);
    246247  }
     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 */
    247285  if (changed)
    248286  {
     
    251289    rSetHdl(sh,TRUE);
    252290  }
     291
    253292  if (myynest<=1) iiNoKeepRing=TRUE;
    254293}
     
    269308    else
    270309    {
     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 */
    271316      h = ggetid(what);
     317#endif /* HAVE_NAMESPACES */
    272318      if (h!=NULL)
    273319      {
     
    281327        {
    282328          //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;
    284331        }
    285332        else
     
    486533
    487534#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);
    489538#else
    490539  r=idroot->get(theMap->preimage,myynest);
     
    709758}
    710759
    711 int iiDeclCommand(leftv sy, leftv name, int lev,int t, idhdl* root,BOOLEAN init_b)
     760int iiDeclCommand(leftv sy, leftv name, int lev,int t, idhdl* root,BOOLEAN isring, BOOLEAN init_b)
    712761{
    713762  BOOLEAN res=FALSE;
     763  char *id = name->name;
     764 
    714765  memset(sy,0,sizeof(sleftv));
    715766  if ((name->name==NULL)||(isdigit(name->name[0])))
     
    724775    //  Warn("`%s` is already in use",name->name);
    725776    //}
    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    }
    727797    if (sy->data!=NULL)
    728798    {
     
    734804      {
    735805        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);
    737807      }
    738808    }
     
    767837}
    768838
    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       {
     839static 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
    786862#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;
    790864#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));
    802865#ifdef USE_IILOCALRING
    803866            if (iiLocalRing[0]==IDRING(h)) iiLocalRing[0]=NULL;
     
    806869              namespaceroot->root->currRing=NULL;
    807870#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
     886BOOLEAN 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;
    815917        }
    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
     949BOOLEAN 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;
    819965      }
    820966    }
     
    826972
    827973/*assume root!=idroot*/
    828 BOOLEAN iiExport (leftv v, int toLev, idhdl &root)
     974#ifdef HAVE_NAMESPACES
     975BOOLEAN iiExport (leftv v, int toLev, idhdl root)
    829976{
    830977  BOOLEAN nok=FALSE;
     
    8541001        }
    8551002      }
    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      }
    8741007    }
    8751008    v=v->next;
     
    8781011  return nok;
    8791012}
     1013#endif /* HAVE_NAMESPACES */
    8801014
    8811015BOOLEAN iiCheckRing(int i)
Note: See TracChangeset for help on using the changeset viewer.