Changeset 56aaae in git


Ignore:
Timestamp:
Oct 28, 2013, 3:39:36 PM (9 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'ad2543eab51733612ba7d118afc77edca719600e')
Children:
d302d07c56cde53a3680353cb3985baaa2572f53
Parents:
215353e5dbc6e1393f0f2107ee3615f129b47538
Message:
fix: handle undefined rings in ssi (from master)
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • Singular/links/ssiLink.cc

    r215353e r56aaae  
    154154    {
    155155      #if SIZEOF_LONG == 4
    156       fprintf(d->f_write,"4 %ld ",((LONG)SR_TO_INT(n)));
     156      fprintf(d->f_write,"4 %ld ",SR_TO_INT(n));
    157157      #else
    158158      long nn=SR_TO_INT(n);
     
    200200  if (d->r!=NULL) rKill(d->r);
    201201  d->r=r;
    202   d->r->ref++;
    203   fprintf(d->f_write,"%d %d ",n_GetChar(r->cf),r->N);
    204 
    205   int i;
    206   for(i=0;i<r->N;i++)
    207   {
    208     fprintf(d->f_write,"%d %s ",(int)strlen(r->names[i]),r->names[i]);
    209   }
    210   /* number of orderings:*/
    211   i=0;
    212   while (r->order[i]!=0) i++;
    213   fprintf(d->f_write,"%d ",i);
    214   /* each ordering block: */
    215   i=0;
    216   while(r->order[i]!=0)
    217   {
    218     fprintf(d->f_write,"%d %d %d ",r->order[i],r->block0[i], r->block1[i]);
    219     switch(r->order[i])
    220     {
    221       case ringorder_a:
    222       case ringorder_wp:
    223       case ringorder_Wp:
    224       case ringorder_ws:
    225       case ringorder_Ws:
    226       case ringorder_aa:
    227       {
    228         int ii;
    229         for(ii=r->block0[i];ii<=r->block1[i];ii++)
    230           fprintf(d->f_write,"%d ",r->wvhdl[i][ii-r->block0[i]]);
    231       }
    232       break;
    233 
    234       case ringorder_a64:
    235       case ringorder_M:
    236       case ringorder_L:
    237       case ringorder_IS:
    238         Werror("ring oder not implemented for ssi:%d",r->order[i]);
     202  if (r!=NULL)
     203  {
     204    /*d->*/r->ref++;
     205    fprintf(d->f_write,"%d %d ",n_GetChar(r->cf),r->N);
     206
     207    int i;
     208    for(i=0;i<r->N;i++)
     209    {
     210      fprintf(d->f_write,"%d %s ",(int)strlen(r->names[i]),r->names[i]);
     211    }
     212    /* number of orderings:*/
     213    i=0;
     214    // remember dummy ring: everything 0:
     215    if (r->order!=NULL) while (r->order[i]!=0) i++;
     216    fprintf(d->f_write,"%d ",i);
     217    /* each ordering block: */
     218    i=0;
     219    if (r->order!=NULL) while(r->order[i]!=0)
     220    {
     221      fprintf(d->f_write,"%d %d %d ",r->order[i],r->block0[i], r->block1[i]);
     222      switch(r->order[i])
     223      {
     224        case ringorder_a:
     225        case ringorder_wp:
     226        case ringorder_Wp:
     227        case ringorder_ws:
     228        case ringorder_Ws:
     229        case ringorder_aa:
     230        {
     231          int ii;
     232          for(ii=r->block0[i];ii<=r->block1[i];ii++)
     233            fprintf(d->f_write,"%d ",r->wvhdl[i][ii-r->block0[i]]);
     234        }
    239235        break;
    240236
    241       default: break;
    242     }
    243     i++;
     237        case ringorder_a64:
     238        case ringorder_M:
     239        case ringorder_L:
     240        case ringorder_IS:
     241          Werror("ring oder not implemented for ssi:%d",r->order[i]);
     242          break;
     243
     244        default: break;
     245      }
     246      i++;
     247    }
     248  }
     249  else /* dummy ring r==NULL*/
     250  {
     251    fprintf(d->f_write,"0 0 0 "/*,r->ch,r->N, blocks*/);
    244252  }
    245253}
     
    478486  ch=s_readint(d->f_read);
    479487  N=s_readint(d->f_read);
    480   names=(char**)omAlloc(N*sizeof(char*));
     488  names=(char**)omalloc(N*sizeof(char*));
    481489  for(i=0;i<N;i++)
    482490  {
     
    521529    }
    522530  }
     531  if (N==0)
     532  {
     533    omFree(ord);
     534    omFree(block0);
     535    omFree(block1);
     536    omFree(wvhdl);
     537    return NULL;
     538  }
     539  else return rDefault(ch,N,names,num_ord,ord,block0,block1,wvhdl);
     540
    523541  return rDefault(ch,N,names,num_ord,ord,block0,block1,wvhdl);
    524542}
     
    11801198    case 5:{
    11811199             d->r=ssiReadRing(d);
    1182              d->r->ref++;
    11831200             res->rtyp=RING_CMD;
    11841201             res->data=(char*)d->r;
    11851202             // we are in the top-level, so set the basering to d->r:
    1186              ssiSetCurrRing(d->r);
     1203             if (d->r!=NULL)
     1204             {
     1205               d->r->ref++;
     1206               ssiSetCurrRing(d->r);
     1207             }
    11871208             if (t==15) return ssiRead1(l);
    11881209           }
  • Singular/newstruct.cc

    r215353e r56aaae  
    354354          if (nm==NULL)
    355355          {
    356             Werror("member %s nor found", a2->name);
     356            Werror("member %s not found", a2->name);
    357357            return TRUE;
    358358          }
     
    516516  {
    517517    l->m[nm->pos].rtyp=nm->typ;
     518    if (RingDependend(nm->typ))
     519      l->m[nm->pos-1].rtyp=RING_CMD;
    518520    l->m[nm->pos].data=idrecDataInit(nm->typ);
    519521    nm=nm->next;
     
    754756  while (elem!=NULL)
    755757  {
    756     Print(">>%s<< at pos %d, type %d\n",elem->name,elem->pos,elem->typ);
     758    Print(">>%s<< at pos %d, type %d (%s)\n",elem->name,elem->pos,elem->typ,Tok2Cmdname(elem->typ));
     759    if (RingDependend(elem->typ))
     760      Print(">>r_%s<< at pos %d, shadow ring\n",elem->name,elem->pos-1);
    757761    elem=elem->next;
    758762  }
  • Singular/subexpr.cc

    r215353e r56aaae  
    426426      {
    427427        ring r=(ring)d;
    428         r->ref++;
     428        if (r!=NULL) r->ref++;
    429429        //Print("+  ring %d, ref %d\n",r,r->ref);
    430430        return d;
  • libpolys/polys/monomials/ring.cc

    r215353e r56aaae  
    729729char * rString(ring r)
    730730{
    731   char *ch=rCharStr(r);
    732   char *var=rVarStr(r);
    733   char *ord=rOrdStr(r);
    734   char *res=(char *)omAlloc(strlen(ch)+strlen(var)+strlen(ord)+9);
    735   sprintf(res,"(%s),(%s),(%s)",ch,var,ord);
    736   omFree((ADDRESS)ch);
    737   omFree((ADDRESS)var);
    738   omFree((ADDRESS)ord);
    739   return res;
     731  if (r!=NULL)
     732  {
     733    char *ch=rCharStr(r);
     734    char *var=rVarStr(r);
     735    char *ord=rOrdStr(r);
     736    char *res=(char *)omAlloc(strlen(ch)+strlen(var)+strlen(ord)+9);
     737    sprintf(res,"(%s),(%s),(%s)",ch,var,ord);
     738    omFree((ADDRESS)ch);
     739    omFree((ADDRESS)var);
     740    omFree((ADDRESS)ord);
     741    return res;
     742  }
     743  else
     744    return omStrDup("NULL");
    740745}
    741746
Note: See TracChangeset for help on using the changeset viewer.