[BACK]Return to compobj.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / builtin

Diff for /OpenXM_contrib2/asir2000/builtin/compobj.c between version 1.8 and 1.9

version 1.8, 2004/03/16 06:20:03 version 1.9, 2018/03/29 01:32:50
Line 45 
Line 45 
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  *   *
  * $OpenXM: OpenXM_contrib2/asir2000/builtin/compobj.c,v 1.7 2004/02/09 08:23:29 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/compobj.c,v 1.8 2004/03/16 06:20:03 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 60  void Pget_element_names();
Line 60  void Pget_element_names();
 void Pget_struct_name();  void Pget_struct_name();
   
 struct ftab comp_tab[] = {  struct ftab comp_tab[] = {
         {"arfreg",Parfreg,8},    {"arfreg",Parfreg,8},
         {"struct_type",Pstruct_type,1},    {"struct_type",Pstruct_type,1},
         {"get_element_at",Pget_element_at,2},    {"get_element_at",Pget_element_at,2},
         {"put_element_at",Pput_element_at,3},    {"put_element_at",Pput_element_at,3},
         {"get_element_names",Pget_element_names,1},    {"get_element_names",Pget_element_names,1},
         {"get_struct_name",Pget_struct_name,1},    {"get_struct_name",Pget_struct_name,1},
         {"range",Prange,2},    {"range",Prange,2},
         {0,0,0},    {0,0,0},
 };  };
   
 void Pget_element_at(NODE arg,Obj *rp)  void Pget_element_at(NODE arg,Obj *rp)
 {  {
         COMP obj;    COMP obj;
         char *name;    char *name;
         int i;    int i;
         SDEF sdef;    SDEF sdef;
   
         asir_assert(ARG0(arg),O_COMP,"get_element_at");    asir_assert(ARG0(arg),O_COMP,"get_element_at");
         asir_assert(ARG1(arg),O_STR,"get_element_at");    asir_assert(ARG1(arg),O_STR,"get_element_at");
         name = BDY((STRING)ARG1(arg));    name = BDY((STRING)ARG1(arg));
         obj = (COMP)ARG0(arg);    obj = (COMP)ARG0(arg);
         sdef = LSS->sa+obj->type;    sdef = LSS->sa+obj->type;
         for ( i = 0; i < sdef->n; i++ )    for ( i = 0; i < sdef->n; i++ )
                 if ( !strcmp(name,sdef->member[i]) ) break;      if ( !strcmp(name,sdef->member[i]) ) break;
         if ( i < sdef->n ) {    if ( i < sdef->n ) {
                 *rp = obj->member[i];      *rp = obj->member[i];
         } else    } else
                 error("get_element_at : no such member");      error("get_element_at : no such member");
 }  }
   
 void Pput_element_at(NODE arg,Obj *rp)  void Pput_element_at(NODE arg,Obj *rp)
 {  {
         COMP obj;    COMP obj;
         char *name;    char *name;
         int i;    int i;
         SDEF sdef;    SDEF sdef;
   
         asir_assert(ARG0(arg),O_COMP,"put_element_at");    asir_assert(ARG0(arg),O_COMP,"put_element_at");
         asir_assert(ARG1(arg),O_STR,"put_element_at");    asir_assert(ARG1(arg),O_STR,"put_element_at");
         name = BDY((STRING)ARG1(arg));    name = BDY((STRING)ARG1(arg));
         obj = (COMP)ARG0(arg);    obj = (COMP)ARG0(arg);
         sdef = LSS->sa+obj->type;    sdef = LSS->sa+obj->type;
         for ( i = 0; i < sdef->n; i++ )    for ( i = 0; i < sdef->n; i++ )
                 if ( !strcmp(name,sdef->member[i]) ) break;      if ( !strcmp(name,sdef->member[i]) ) break;
         if ( i < sdef->n ) {    if ( i < sdef->n ) {
                 obj->member[i] = (Obj)ARG2(arg);      obj->member[i] = (Obj)ARG2(arg);
                 *rp = obj->member[i];      *rp = obj->member[i];
         } else    } else
                 error("put_element_at : no such member");      error("put_element_at : no such member");
 }  }
   
 void Pget_element_names(NODE arg,LIST *rp)  void Pget_element_names(NODE arg,LIST *rp)
 {  {
         COMP obj;    COMP obj;
         int i;    int i;
         SDEF sdef;    SDEF sdef;
         NODE t,t1;    NODE t,t1;
         STRING name;    STRING name;
   
         asir_assert(ARG0(arg),O_COMP,"get_element_names");    asir_assert(ARG0(arg),O_COMP,"get_element_names");
         obj = (COMP)ARG0(arg);    obj = (COMP)ARG0(arg);
         sdef = LSS->sa+obj->type;    sdef = LSS->sa+obj->type;
         t = 0;    t = 0;
         for ( i = sdef->n-1; i >= 0; i-- ) {    for ( i = sdef->n-1; i >= 0; i-- ) {
                 MKSTR(name,sdef->member[i]);      MKSTR(name,sdef->member[i]);
                 MKNODE(t1,(pointer)name,t);      MKNODE(t1,(pointer)name,t);
                 t = t1;      t = t1;
         }    }
         MKLIST(*rp,t);    MKLIST(*rp,t);
 }  }
   
 void Pget_struct_name(NODE arg,STRING *rp)  void Pget_struct_name(NODE arg,STRING *rp)
 {  {
         COMP obj;    COMP obj;
         SDEF sdef;    SDEF sdef;
   
         asir_assert(ARG0(arg),O_COMP,"get_struct_name");    asir_assert(ARG0(arg),O_COMP,"get_struct_name");
         obj = (COMP)ARG0(arg);    obj = (COMP)ARG0(arg);
         sdef = LSS->sa+obj->type;    sdef = LSS->sa+obj->type;
         MKSTR(*rp,sdef->name);    MKSTR(*rp,sdef->name);
 }  }
   
 void Pstruct_type(NODE arg,Q *rp)  void Pstruct_type(NODE arg,Q *rp)
 {  {
         Obj obj;    Obj obj;
         char *name;    char *name;
         int ind;    int ind;
   
 /*      asir_assert(ARG0(arg),O_STR,"struct_type"); */  /*  asir_assert(ARG0(arg),O_STR,"struct_type"); */
         obj = (Obj)ARG0(arg);    obj = (Obj)ARG0(arg);
         if ( !obj )    if ( !obj )
                 error("struct_type : invalid argument");      error("struct_type : invalid argument");
         switch ( OID(obj) ) {    switch ( OID(obj) ) {
                 case O_STR:      case O_STR:
                         name = ((STRING)obj)->body;        name = ((STRING)obj)->body;
                         ind = structtoindex(name);        ind = structtoindex(name);
                         break;        break;
                 case O_COMP:      case O_COMP:
                         ind = ((COMP)obj)->type;        ind = ((COMP)obj)->type;
                         break;        break;
                 default:      default:
                         error("struct_type : invalid argument");        error("struct_type : invalid argument");
                         break;        break;
         }    }
         STOQ(ind,*rp);    STOQ(ind,*rp);
 }  }
   
 void Parfreg(NODE arg,Q *rp)  void Parfreg(NODE arg,Q *rp)
 {  {
         char *name;    char *name;
         P t;    P t;
         SDEF s;    SDEF s;
         int i;    int i;
         FUNC func;    FUNC func;
   
         asir_assert(ARG0(arg),O_STR,"arfreg");    asir_assert(ARG0(arg),O_STR,"arfreg");
         name = ((STRING)ARG0(arg))->body;    name = ((STRING)ARG0(arg))->body;
         for ( s = LSS->sa, i = 0; i < LSS->n; i++ )    for ( s = LSS->sa, i = 0; i < LSS->n; i++ )
                 if ( !strcmp(s[i].name,name) )      if ( !strcmp(s[i].name,name) )
                         break;        break;
         if ( i == LSS->n )    if ( i == LSS->n )
                 error("arfreg : no such structure");      error("arfreg : no such structure");
   
         t = (P)ARG1(arg); s[i].arf.add = !t ? 0 : (gen_searchf(NAME(VR(t)),&func), func);    t = (P)ARG1(arg); s[i].arf.add = !t ? 0 : (gen_searchf(NAME(VR(t)),&func), func);
         t = (P)ARG2(arg); s[i].arf.sub = !t ? 0 : (gen_searchf(NAME(VR(t)),&func), func);    t = (P)ARG2(arg); s[i].arf.sub = !t ? 0 : (gen_searchf(NAME(VR(t)),&func), func);
         t = (P)ARG3(arg); s[i].arf.mul = !t ? 0 : (gen_searchf(NAME(VR(t)),&func), func);    t = (P)ARG3(arg); s[i].arf.mul = !t ? 0 : (gen_searchf(NAME(VR(t)),&func), func);
         t = (P)ARG4(arg); s[i].arf.div = !t ? 0 : (gen_searchf(NAME(VR(t)),&func), func);    t = (P)ARG4(arg); s[i].arf.div = !t ? 0 : (gen_searchf(NAME(VR(t)),&func), func);
         t = (P)ARG5(arg); s[i].arf.pwr = !t ? 0 : (gen_searchf(NAME(VR(t)),&func), func);    t = (P)ARG5(arg); s[i].arf.pwr = !t ? 0 : (gen_searchf(NAME(VR(t)),&func), func);
         t = (P)ARG6(arg); s[i].arf.chsgn = !t ? 0 : (gen_searchf(NAME(VR(t)),&func), func);    t = (P)ARG6(arg); s[i].arf.chsgn = !t ? 0 : (gen_searchf(NAME(VR(t)),&func), func);
         t = (P)ARG7(arg); s[i].arf.comp = !t ? 0 : (gen_searchf(NAME(VR(t)),&func), func);    t = (P)ARG7(arg); s[i].arf.comp = !t ? 0 : (gen_searchf(NAME(VR(t)),&func), func);
         *rp = ONE;    *rp = ONE;
 }  }
   
 void Prange(NODE arg,RANGE *rp)  void Prange(NODE arg,RANGE *rp)
 {  {
         RANGE range;    RANGE range;
   
         NEWRANGE(range);    NEWRANGE(range);
         range->start = (Obj)ARG0(arg);    range->start = (Obj)ARG0(arg);
         range->end = (Obj)ARG1(arg);    range->end = (Obj)ARG1(arg);
         *rp = range;    *rp = range;
 }  }

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.9

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>