Changeset 3e7db4 in git for Singular/newstruct.cc


Ignore:
Timestamp:
Dec 11, 2012, 7:33:39 PM (11 years ago)
Author:
Oleksandr Motsak <motsak@…>
Branches:
(u'spielwiese', '17f1d200f27c5bd38f5dfc6e8a0879242279d1d8')
Children:
14e634edb64741be0fbc04c9c89e8523cb0c1cc521dbb4186f3a2c56539d8f92abe1ee9e0fa0ae2c
Parents:
dcf88ff0bb046d73a7bde65e033fc58cbb5f4a97c9050082385152a64066f7540914cae34d990a43
Message:
Merge pull request #207 from kovzol/spielwiese

Adding new command line option --no-shell to prevent running escape shel...

NOTE: according to Hans we have to fix some more things in order to make this right
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/newstruct.cc

    rc90500 r3e7db4  
    5757    if (p!=NULL)
    5858    {
    59       leftv sl;
     59      BOOLEAN sl;
    6060      sleftv tmp;
    6161      memset(&tmp,0,sizeof(tmp));
     
    7070      sl=iiMake_proc(&hh,NULL,&tmp);
    7171
    72       if (sl->Typ() == STRING_CMD)
    73       {
    74         char *res = omStrDup((char*)sl->Data());
    75         sl->CleanUp();
     72      if ((!sl)&& (iiRETURNEXPR.Typ() == STRING_CMD))
     73      {
     74        char *res = omStrDup((char*)iiRETURNEXPR.CopyD());
     75        iiRETURNEXPR.CleanUp();
    7676        iiRETURNEXPR.Init();
    7777        return res;
    7878      }
    79       sl->CleanUp();
     79      iiRETURNEXPR.CleanUp();
    8080      iiRETURNEXPR.Init();
    8181    }
     
    177177  if (p!=NULL)
    178178  {
     179    BOOLEAN sl;
    179180    idrec hh;
    180181    memset(&hh,0,sizeof(hh));
     
    185186    memset(&tmp,0,sizeof(sleftv));
    186187    tmp.Copy(r);
    187     leftv sl = iiMake_proc(&hh, NULL, &tmp);
    188     if (sl != NULL)
    189     {
    190       if (sl->Typ() == op)
    191       {
    192         l->Copy(sl);
     188    sl = iiMake_proc(&hh, NULL, &tmp);
     189    if (!sl)
     190    {
     191      if (iiRETURNEXPR.Typ() == op)
     192      {
     193        l->Copy(&iiRETURNEXPR);
    193194        iiRETURNEXPR.Init();
    194195        return FALSE;
    195196      }
    196       sl->CleanUp();
     197      iiRETURNEXPR.CleanUp();
    197198      iiRETURNEXPR.Init();
    198199    }
    199200  }
    200201  return TRUE;
     202}
     203
     204void lClean_newstruct(lists l)
     205{
     206  if (l->nr>=0)
     207  {
     208    int i;
     209    ring r=NULL;
     210    for(i=l->nr;i>=0;i--)
     211    {
     212      if ((i>0) && (l->m[i-1].rtyp==RING_CMD))
     213        r=(ring)(l->m[i-1].data);
     214      else
     215        r=NULL;
     216      l->m[i].CleanUp(r);
     217    }
     218    omFreeSize((ADDRESS)l->m, (l->nr+1)*sizeof(sleftv));
     219    l->nr=-1;
     220  }
     221  omFreeBin((ADDRESS)l,slists_bin);
    201222}
    202223
     
    242263      {
    243264        lists n1=(lists)l->Data();
    244         n1->Clean(); n1=NULL;
     265        lClean_newstruct(n1);
    245266      }
    246267      lists n2=(lists)r->Data();
     
    258279  }
    259280
    260   else if(l->Typ() > MAX_TOK)
     281  else
    261282  {
    262283    assume(l->Typ() > MAX_TOK);
     
    280301  if (p!=NULL)
    281302  {
    282     leftv sl;
     303    BOOLEAN sl;
    283304    sleftv tmp;
    284305    memset(&tmp,0,sizeof(sleftv));
     
    290311    hh.data.pinf=p->p;
    291312    sl=iiMake_proc(&hh,NULL,&tmp);
    292     if (sl==NULL) return TRUE;
     313    if (sl) return TRUE;
    293314    else
    294315    {
    295       res->Copy(sl);
     316      res->Copy(&iiRETURNEXPR);
    296317      iiRETURNEXPR.Init();
    297318      return FALSE;
     
    409430  if (p!=NULL)
    410431  {
    411     leftv sl;
     432    BOOLEAN sl;
    412433    sleftv tmp;
    413434    memset(&tmp,0,sizeof(sleftv));
     
    421442    hh.data.pinf=p->p;
    422443    sl=iiMake_proc(&hh,NULL,&tmp);
    423     if (sl==NULL) return TRUE;
     444    if (sl) return TRUE;
    424445    else
    425446    {
    426       res->Copy(sl);
     447      res->Copy(&iiRETURNEXPR);
    427448      iiRETURNEXPR.Init();
    428449      return FALSE;
     
    455476  if (p!=NULL)
    456477  {
    457     leftv sl;
     478    BOOLEAN sl;
    458479    sleftv tmp;
    459480    memset(&tmp,0,sizeof(sleftv));
     
    465486    hh.data.pinf=p->p;
    466487    sl=iiMake_proc(&hh,NULL,&tmp);
    467     if (sl==NULL) return TRUE;
     488    if (sl) return TRUE;
    468489    else
    469490    {
    470       res->Copy(sl);
     491      res->Copy(&iiRETURNEXPR);
    471492      iiRETURNEXPR.Init();
    472493      return FALSE;
     
    474495  }
    475496  return blackbox_default_OpM(op,res,args);
    476 }
    477 
    478 void lClean_newstruct(lists l)
    479 {
    480   if (l->nr>=0)
    481   {
    482     int i;
    483     ring r=NULL;
    484     for(i=l->nr;i>=0;i--)
    485     {
    486       if ((i>0) && (l->m[i-1].rtyp==RING_CMD))
    487         r=(ring)(l->m[i-1].data);
    488       else
    489         r=NULL;
    490       l->m[i].CleanUp(r);
    491     }
    492     omFreeSize((ADDRESS)l->m, (l->nr+1)*sizeof(sleftv));
    493     l->nr=-1;
    494   }
    495   omFreeBin((ADDRESS)l,slists_bin);
    496497}
    497498
     
    593594  if (p!=NULL)
    594595  {
    595     leftv sl;
     596    BOOLEAN sl;
    596597    sleftv tmp;
    597598    memset(&tmp,0,sizeof(tmp));
     
    604605    hh.data.pinf=p->p;
    605606    sl=iiMake_proc(&hh,NULL,&tmp);
    606     if (sl!=NULL) sl->CleanUp();
     607    if (!sl) iiRETURNEXPR.CleanUp();
    607608    iiRETURNEXPR.Init();
    608609  }
     
    745746  return scanNewstructFromString(s,res);
    746747}
    747 
    748748void newstructShow(newstruct_desc d)
    749749{
Note: See TracChangeset for help on using the changeset viewer.