Changeset f92a39 in git for Singular/iplib.cc


Ignore:
Timestamp:
Oct 15, 2012, 7:44:58 PM (11 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
Children:
d6b9d791f6efb67f432972147de4dfd0f4081862
Parents:
17874ed75ee295b8f839c9c6087da10a82e6ff2e
Message:
fix: implementation of return(..) improved
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/iplib.cc

    r17874e rf92a39  
    380380ring    *iiLocalRing;
    381381#endif
    382 sleftv  *iiRETURNEXPR;
     382sleftv  iiRETURNEXPR;
    383383int     iiRETURNEXPR_len=0;
    384384
     
    417417  if (myynest >= iiRETURNEXPR_len-1)
    418418  {
    419     iiRETURNEXPR=(sleftv *)omreallocSize(iiRETURNEXPR,
    420                                    iiRETURNEXPR_len*sizeof(sleftv),
    421                                    (iiRETURNEXPR_len+16)*sizeof(sleftv));
    422     omMarkAsStaticAddr(iiRETURNEXPR);
    423     memset(&(iiRETURNEXPR[iiRETURNEXPR_len]),0,16*sizeof(sleftv));
    424419#ifdef USE_IILOCALRING
    425420    iiLocalRing=(ring *)omreallocSize(iiLocalRing,
     
    446441  //Print("currRing(%d):%s(%x) in %s\n",myynest,IDID(currRingHdl),currRing,IDID(pn));
    447442#endif
    448   iiRETURNEXPR[myynest+1].Init();
     443  iiRETURNEXPR.Init();
    449444  procstack->push(pi->procname);
    450445  if ((traceit&TRACE_SHOW_PROC)
     
    485480                 leftv res = (leftv)omAlloc0Bin(sleftv_bin);
    486481                 err = (pi->data.o.function)(res, sl);
    487                  iiRETURNEXPR[myynest+1].Copy(res);
     482                 iiRETURNEXPR.Copy(res);
    488483                 omFreeBin((ADDRESS)res,  sleftv_bin);
    489484                 break;
     
    503498  if (err)
    504499  {
    505     iiRETURNEXPR[myynest+1].CleanUp();
    506     //iiRETURNEXPR[myynest+1].Init(); //done by CleanUp
     500    iiRETURNEXPR.CleanUp();
     501    //iiRETURNEXPR.Init(); //done by CleanUp
    507502  }
    508503#ifdef USE_IILOCALRING
     
    514509    if (currRing!=NULL)
    515510    {
    516       if (((iiRETURNEXPR[myynest+1].Typ()>BEGIN_RING)
    517         && (iiRETURNEXPR[myynest+1].Typ()<END_RING))
    518       || ((iiRETURNEXPR[myynest+1].Typ()==LIST_CMD)
    519         && (lRingDependend((lists)iiRETURNEXPR[myynest+1].Data()))))
     511      if (((iiRETURNEXPR.Typ()>BEGIN_RING)
     512        && (iiRETURNEXPR.Typ()<END_RING))
     513      || ((iiRETURNEXPR.Typ()==LIST_CMD)
     514        && (lRingDependend((lists)iiRETURNEXPR.Data()))))
    520515      {
    521516        //idhdl hn;
     
    532527        else                   n="none";
    533528        Werror("ring change during procedure call: %s -> %s (level %d)",o,n,myynest);
    534         iiRETURNEXPR[myynest+1].CleanUp();
     529        iiRETURNEXPR.CleanUp();
    535530        err=TRUE;
    536531      }
     
    557552    //Print(" curr:%s\n",IDID(currRingHdl));
    558553    //Print("pr:%x, curr: %x\n",procstack->cRing,currRing);
    559     if (((iiRETURNEXPR[myynest+1].Typ()>BEGIN_RING)
    560       && (iiRETURNEXPR[myynest+1].Typ()<END_RING))
    561     || ((iiRETURNEXPR[myynest+1].Typ()==LIST_CMD)
    562       && (lRingDependend((lists)iiRETURNEXPR[myynest+1].Data()))))
     554    if (((iiRETURNEXPR.Typ()>BEGIN_RING)
     555      && (iiRETURNEXPR.Typ()<END_RING))
     556    || ((iiRETURNEXPR.Typ()==LIST_CMD)
     557      && (lRingDependend((lists)iiRETURNEXPR.Data()))))
    563558    {
    564559      //idhdl hn;
     
    585580      {
    586581        Werror("ring change during procedure call: %s -> %s",o,n);
    587         iiRETURNEXPR[myynest+1].CleanUp();
     582        iiRETURNEXPR.CleanUp();
    588583        err=TRUE;
    589584      }
     
    607602  if (err)
    608603    return NULL;
    609   return &iiRETURNEXPR[myynest+1];
     604  return &iiRETURNEXPR;
    610605}
    611606
     
    630625  }
    631626  myynest++;
    632   iiRETURNEXPR[myynest].Init();
    633627
    634628  err=iiAllStart(pi,example,BT_example,(pi != NULL ? pi->data.s.example_lineno: 0));
Note: See TracChangeset for help on using the changeset viewer.