=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/eval.c,v retrieving revision 1.4 retrieving revision 1.7 diff -u -p -r1.4 -r1.7 --- OpenXM_contrib2/asir2000/parse/eval.c 2000/08/21 08:31:46 1.4 +++ OpenXM_contrib2/asir2000/parse/eval.c 2000/09/22 06:36:43 1.7 @@ -23,7 +23,7 @@ * shall be made on your publication or presentation in any form of the * results obtained by use of the SOFTWARE. * (4) In the event that you modify the SOFTWARE, you shall notify FLL by - * e-mail at risa-admin@flab.fujitsu.co.jp of the detailed specification + * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification * for such modification or the source code of the modified part of the * SOFTWARE. * @@ -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/eval.c,v 1.3 2000/07/13 05:09:03 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/eval.c,v 1.6 2000/09/21 09:19:27 noro Exp $ */ #include #include "ca.h" @@ -185,15 +185,6 @@ FNODE f; } break; #endif -#if 0 - case I_PRESELF: case I_POSTSELF: - val = evalpv(f->id,FA1(f),FA0(f)); break; - case I_PVAR: - val = evalpv(f->id,FA0(f),0); break; - case I_ASSPVAR: - val = evalpv(f->id,FA0(f),FA1(f)); break; -#endif -#if 1 case I_PRESELF: f1 = (FNODE)FA1(f); if ( ID(f1) == I_PVAR ) { @@ -205,7 +196,7 @@ FNODE f; (*((ARF)FA0(f))->fp)(CO,u,ONE,&val); putarray(a,tn,val); } } else - val = evalpv(f->id,(FNODE)FA1(f),FA0(f)); + error("++ : not implemented yet"); break; case I_POSTSELF: f1 = (FNODE)FA1(f); @@ -219,10 +210,8 @@ FNODE f; val = a; } } else - val = evalpv(f->id,(FNODE)FA1(f),FA0(f)); + error("-- : not implemented yet"); break; - case I_CAST: - getmember((FNODE)f,(Obj *)&val); break; case I_PVAR: pv = (int)FA0(f); ind = (NODE)FA1(f); GETPV(pv,a); if ( !ind ) @@ -242,10 +231,17 @@ FNODE f; evalnodebody(ind,&tn); putarray(a,tn,val = eval((FNODE)FA1(f))); } - } else - val = evalpv(ID(f),(FNODE)FA0(f),FA1(f)); + } else if ( ID(f1) == I_POINT ) { + /* f1 <-> FA0(f1)->FA1(f1) */ + a = eval(FA0(f1)); + assign_to_member(a,(char *)FA1(f1),val = eval((FNODE)FA1(f))); + } else if ( ID(f1) == I_INDEX ) { + /* f1 <-> FA0(f1)[FA1(f1)] */ + a = eval((FNODE)FA0(f1)); ind = (NODE)FA1(f1); + evalnodebody(ind,&tn); + putarray(a,tn,val = eval((FNODE)FA1(f))); + } break; -#endif case I_ANS: if ( (pv =(int)FA0(f)) < (int)APVS->n ) val = APVS->va[pv].priv; @@ -304,6 +300,10 @@ FNODE f; break; case I_GETOPT: val = (pointer)getopt_from_cpvs((char *)FA0(f)); + break; + case I_POINT: + a = (pointer)eval(FA0(f)); + val = (pointer)memberofstruct(a,(char *)FA1(f)); break; default: error("eval : unknown id");