=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/struct.c,v retrieving revision 1.4 retrieving revision 1.7 diff -u -p -r1.4 -r1.7 --- OpenXM_contrib2/asir2000/parse/struct.c 2000/09/21 09:19:27 1.4 +++ OpenXM_contrib2/asir2000/parse/struct.c 2004/03/17 08:16:24 1.7 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/parse/struct.c,v 1.3 2000/08/22 05:04:28 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/struct.c,v 1.6 2003/05/14 06:20:13 noro Exp $ */ #include "ca.h" #include "parse.h" @@ -54,14 +54,12 @@ struct oSS oLSS; SS LSS = &oLSS; -int structdef(name,member) -char *name; -NODE member; +int structdef(char *name,NODE member) { - int i,j,k,type; + int i,j; SDEF sdef,s; - NODE n,ms; - char *mname,*sname; + NODE n; + char *mname; /* search the predefined structure */ for ( s = LSS->sa, i = 0; i < LSS->n; i++ ) @@ -90,15 +88,13 @@ NODE member; return i; } -void newstruct(type,rp) -int type; -COMP *rp; +void newstruct(int type,COMP *rp) { + if ( type < 0 || type >= LSS->n ) error(""); NEWCOMP(*rp,LSS->sa[type].n); (*rp)->type = type; } -int structtoindex(name) -char *name; +int structtoindex(char *name) { SDEF s; int i; @@ -112,9 +108,7 @@ char *name; return i; } -int membertoindex(type,name) -int type; -char *name; +int membertoindex(int type,char *name) { SDEF s; char **member; @@ -130,97 +124,13 @@ char *name; return i; } -int getcompsize(type) -int type; +int getcompsize(int type) { return LSS->sa[type].n; } -#if 0 -void getmember(expr,memp) -FNODE expr; -Obj *memp; +Obj memberofstruct(COMP a,char *name) { - int i; - FNODE root; - COMP t; - PV v0; - NODE2 mchain; - - root = (FNODE)FA1(expr); mchain = (NODE2)FA2(expr); - if ( ID(root) == I_PVAR ) { - i = (int)FA0(root); - v0 = i>=0?&CPVS->va[(unsigned int)i]:&GPVS->va[((unsigned int)i)&~MSB]; - t = (COMP)v0->priv; - } else - t = (COMP)eval(root); - for ( ; mchain; mchain = NEXT(mchain) ) - t = (COMP)(t->member[(int)BDY1(mchain)]); - *memp = (Obj)t; -} - -void getmemberp(expr,addrp) -FNODE expr; -Obj **addrp; -{ - int i; - FNODE root; - COMP t; - PV v0; - COMP *addr; - NODE2 mchain; - - root = (FNODE)FA1(expr); mchain = (NODE2)FA2(expr); - if ( ID(root) == I_PVAR ) { - i = (int)FA0(root); - v0 = i>=0?&CPVS->va[(unsigned int)i]:&GPVS->va[((unsigned int)i)&~MSB]; - addr = (COMP *)&v0->priv; - } else { - t = (COMP)eval(root); - addr = (COMP *)&t; - } - for ( ; mchain; mchain = NEXT(mchain) ) - addr = (COMP *)&((*addr)->member[(int)BDY1(mchain)]); - *addrp = (Obj *)addr; -} - -void getarrayp(a,ind,addrp) -Obj a; -NODE ind; -Obj **addrp; -{ - Obj len,row,col; - Obj *addr; - - switch ( OID(a) ) { - case O_VECT: - len = (Obj)BDY(ind); - if ( !rangecheck(len,((VECT)a)->len) ) - error("getarrayp : Out of range"); - else - addr = (Obj *)&(BDY((VECT)a)[QTOS((Q)len)]); - break; - case O_MAT: - row = (Obj)BDY(ind); col = (Obj)BDY(NEXT(ind)); - if ( !rangecheck(row,((MAT)a)->row) - || !rangecheck(col,((MAT)a)->col) ) - error("getarrayp : Out of range"); - else - addr = (Obj *)&(BDY((MAT)a)[QTOS((Q)row)][QTOS((Q)col)]); - break; - default: - addr = 0; - break; - } - *addrp = addr; -} -#endif - -Obj memberofstruct(a,name) -COMP a; -char *name; -{ - NODE2 n,*np; int type,ind; char buf[BUFSIZ]; @@ -235,12 +145,8 @@ char *name; return (Obj)a->member[ind]; } -void assign_to_member(a,name,obj) -COMP a; -char *name; -Obj obj; +void assign_to_member(COMP a,char *name,Obj obj) { - NODE2 n,*np; int type,ind; char buf[BUFSIZ];