Changeset f92a39 in git


Ignore:
Timestamp:
Oct 15, 2012, 7:44:58 PM (11 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', '00e2e9c41af3fde1273eb3633f4c0c7c3db2579d')
Children:
d6b9d791f6efb67f432972147de4dfd0f4081862
Parents:
17874ed75ee295b8f839c9c6087da10a82e6ff2e
Message:
fix: implementation of return(..) improved
Location:
Singular
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • Singular/grammar.cc

    r17874e rf92a39  
    40384038#line 1605 "grammar.y"
    40394039    {
    4040             if(iiRETURNEXPR==NULL) YYERROR;
    4041             iiRETURNEXPR[myynest].Copy(&(yyvsp[(3) - (4)].lv));
     4040            iiRETURNEXPR.Copy(&(yyvsp[(3) - (4)].lv));
    40424041            (yyvsp[(3) - (4)].lv).CleanUp();
    40434042            if (exitBuffer(BT_proc)) YYERROR;
     
    40524051            if ((yyvsp[(1) - (3)].i)==RETURN)
    40534052            {
    4054               if(iiRETURNEXPR==NULL) YYERROR;
    4055               iiRETURNEXPR[myynest].Init();
    4056               iiRETURNEXPR[myynest].rtyp=NONE;
     4053              iiRETURNEXPR.Init();
     4054              iiRETURNEXPR.rtyp=NONE;
    40574055              if (exitBuffer(BT_proc)) YYERROR;
    40584056            }
  • Singular/grammar.y

    r17874e rf92a39  
    16051605        RETURN '(' exprlist ')'
    16061606          {
    1607             if(iiRETURNEXPR==NULL) YYERROR;
    1608             iiRETURNEXPR[myynest].Copy(&$3);
     1607            iiRETURNEXPR.Copy(&$3);
    16091608            $3.CleanUp();
    16101609            if (exitBuffer(BT_proc)) YYERROR;
     
    16141613            if ($1==RETURN)
    16151614            {
    1616               if(iiRETURNEXPR==NULL) YYERROR;
    1617               iiRETURNEXPR[myynest].Init();
    1618               iiRETURNEXPR[myynest].rtyp=NONE;
     1615              iiRETURNEXPR.Init();
     1616              iiRETURNEXPR.rtyp=NONE;
    16191617              if (exitBuffer(BT_proc)) YYERROR;
    16201618            }
  • Singular/iparith.cc

    r17874e rf92a39  
    15881588    memcpy(res,sl,sizeof(sleftv));
    15891589  }
     1590  iiRETURNEXPR.Init();
    15901591  return FALSE;
    15911592}
  • 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));
  • Singular/ipshell.cc

    r17874e rf92a39  
    393393  if (iiRETURNEXPR_len > myynest)
    394394  {
    395     int t=iiRETURNEXPR[myynest].Typ();
    396     if ((/*iiRETURNEXPR[myynest].Typ()*/ t==RING_CMD)
    397     || (/*iiRETURNEXPR[myynest].Typ()*/ t==QRING_CMD))
    398     {
    399       leftv h=&iiRETURNEXPR[myynest];
     395    int t=iiRETURNEXPR.Typ();
     396    if ((/*iiRETURNEXPR.Typ()*/ t==RING_CMD)
     397    || (/*iiRETURNEXPR.Typ()*/ t==QRING_CMD))
     398    {
     399      leftv h=&iiRETURNEXPR;
    400400      if (((ring)h->data)->idroot!=NULL)
    401401        killlocals0(v,&(((ring)h->data)->idroot),(ring)h->data);
    402402    }
    403     else if (/*iiRETURNEXPR[myynest].Typ()*/ t==LIST_CMD)
    404     {
    405       leftv h=&iiRETURNEXPR[myynest];
     403    else if (/*iiRETURNEXPR.Typ()*/ t==LIST_CMD)
     404    {
     405      leftv h=&iiRETURNEXPR;
    406406      changed |=killlocals_list(v,(lists)h->data);
    407407    }
     
    21472147  // 5: D
    21482148
    2149   ring R = (ring) omAlloc0Bin(sip_sring_bin); // why
    2150 
    2151 
    2152   //assume( R->cf == NULL );
     2149  ring R = (ring) omAlloc0Bin(sip_sring_bin);
     2150
    21532151
    21542152  // ------------------------------------------------------------------
     
    24862484
    24872485#ifdef HAVE_RINGS
    2488   // This was a BUG IN SINGULAR: There is no HABE_RINGS!!!
    2489 
    24902486// currently, coefficients which are ring elements require a global ordering:
    24912487  if (rField_is_Ring(R) && (R->OrdSgn==-1))
     
    55845580        sLastPrinted.CleanUp();
    55855581      }
    5586       if ((myynest>0) && (iiRETURNEXPR[myynest].RingDependend()))
     5582      if ((myynest>0) && (iiRETURNEXPR.RingDependend()))
    55875583      {
    55885584        WerrorS("return value depends on local ring variable (export missing ?)");
    5589         iiRETURNEXPR[myynest].CleanUp();
     5585        iiRETURNEXPR.CleanUp();
    55905586      }
    55915587      currRing=NULL;
  • Singular/ipshell.h

    r17874e rf92a39  
    2727extern const char *  currid;
    2828extern int     iiRETURNEXPR_len;
    29 extern sleftv *iiRETURNEXPR;
     29extern sleftv  iiRETURNEXPR;
    3030#ifdef USE_IILOCALRING
    3131extern ring   *iiLocalRing;
  • Singular/newstruct.cc

    r17874e rf92a39  
    7474        char *res = omStrDup((char*)sl->Data());
    7575        sl->CleanUp();
     76        iiRETURNEXPR.Init();
    7677        return res;
    7778      }
    78       else
    79         sl->CleanUp();     
     79      sl->CleanUp();
     80      iiRETURNEXPR.Init();
    8081    }
    8182
     
    171172  newstruct_desc nt=(newstruct_desc)ll->data;
    172173  newstruct_proc p=nt->procs;
    173  
     174
    174175  while( (p!=NULL) && ((p->t!='=')||(p->args!=1)) ) p=p->next;
    175176
     
    187188    if (sl != NULL)
    188189    {
    189       if (sl->Typ() == op) { l->Copy(sl); return FALSE;}
    190       else sl->CleanUp();
     190      if (sl->Typ() == op)
     191      {
     192        l->Copy(sl);
     193        iiRETURNEXPR.Init();
     194        return FALSE;
     195      }
     196      sl->CleanUp();
     197      iiRETURNEXPR.Init();
    191198    }
    192199  }
     
    287294    {
    288295      res->Copy(sl);
     296      iiRETURNEXPR.Init();
    289297      return FALSE;
    290298    }
     
    417425    {
    418426      res->Copy(sl);
     427      iiRETURNEXPR.Init();
    419428      return FALSE;
    420429    }
     
    460469    {
    461470      res->Copy(sl);
     471      iiRETURNEXPR.Init();
    462472      return FALSE;
    463473    }
     
    594604    hh.data.pinf=p->p;
    595605    sl=iiMake_proc(&hh,NULL,&tmp);
     606    if (sl!=NULL) sl->CleanUp();
     607    iiRETURNEXPR.Init();
    596608  }
    597609  else
Note: See TracChangeset for help on using the changeset viewer.