=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/parse.h,v retrieving revision 1.37 retrieving revision 1.42 diff -u -p -r1.37 -r1.42 --- OpenXM_contrib2/asir2000/parse/parse.h 2005/09/13 06:40:46 1.37 +++ OpenXM_contrib2/asir2000/parse/parse.h 2005/11/04 07:03:38 1.42 @@ -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/parse.h,v 1.36 2005/08/25 18:59:11 ohara Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/parse.h,v 1.41 2005/11/02 05:18:42 noro Exp $ */ # if defined(VISUAL) #include @@ -69,7 +69,7 @@ typedef enum { I_FORMULA, I_LIST, I_STR, I_NEWCOMP, I_CAR, I_CDR, I_CAST, I_INDEX, I_EV, I_TIMER, I_GF2NGEN, I_GFPNGEN, I_GFSNGEN, I_LOP, I_OPT, I_GETOPT, I_POINT, I_PAREN, I_MINUS, - I_NARYOP, I_UNIFY + I_NARYOP, I_CONS, I_FUNC_HEAD } fid; /* identifiers for statements */ @@ -136,7 +136,7 @@ struct oTKWD { }; typedef struct fid_spec { - fid id; + fid id; farg_type type[10]; } *fid_spec_p; @@ -151,6 +151,7 @@ typedef struct oFUNC { int type; int secure; aid id; + unsigned int quote; union { void (*binf)(); struct oUSRF *usrf; @@ -193,7 +194,9 @@ typedef struct oPFINS { #define NEWPF(p) ((p)=(PF)MALLOC(sizeof(struct oPF))) typedef struct oFNODE { - fid id; + short id; + char normalized; + char expanded; pointer arg[1]; } *FNODE; @@ -223,6 +226,7 @@ struct ftab { char *name; void (*f)(); int argc; + unsigned int quote; }; #define MKPVI(a,b,c)\ @@ -272,25 +276,33 @@ switch ( id ) {\ #define DEFSIZE 32 #define PVGLOBAL(i) (((unsigned int)(i))|(1<<30)) -#define PVMGLOBAL(i) (((unsigned int)(i))|(3<<30)) +#define PVMGLOBAL(i) (((unsigned int)(i))|(2<<30)) +#define PVPATTERN(i) (((unsigned int)(i))|(3<<30)) #define PVATTR(i) (((unsigned int)(i))>>30) #define PVIND(i) (((unsigned int)(i))&0x3fffffff) #define GETPV(i,p) \ (PVATTR(i)==0?(int)((p)=CPVS->va[(unsigned int)(i)].priv)\ - :PVATTR(i)==1?(int)((p)=GPVS->va[PVIND(i)].priv)\ - :(int)((p)=MPVS->va[PVIND(i)].priv)) + :PVATTR(i)==1?(int)((p)=GPVS->va[PVIND(i)].priv)\ + :PVATTR(i)==2?(int)((p)=MPVS->va[PVIND(i)].priv)\ + :(int)((p)=PPVS->va[PVIND(i)].priv)) + #define GETPVREF(i,p) \ (PVATTR(i)==0?(int)((p)=&(CPVS->va[(unsigned int)(i)].priv))\ - :PVATTR(i)==1?(int)((p)=&(GPVS->va[PVIND(i)].priv))\ - :(int)((p)=&(MPVS->va[PVIND(i)].priv))) + :PVATTR(i)==1?(int)((p)=&(GPVS->va[PVIND(i)].priv))\ + :PVATTR(i)==2?(int)((p)=&(MPVS->va[PVIND(i)].priv))\ + :(int)((p)=&(PPVS->va[PVIND(i)].priv))) + #define GETPVNAME(i,p) \ (PVATTR(i)==0?(int)((p)=CPVS->va[(unsigned int)(i)].name)\ - :PVATTR(i)==1?(int)((p)=GPVS->va[PVIND(i)].name)\ - :(int)((p)=MPVS->va[PVIND(i)].name)) + :PVATTR(i)==1?(int)((p)=GPVS->va[PVIND(i)].name)\ + :PVATTR(i)==2?(int)((p)=MPVS->va[PVIND(i)].name)\ + :(int)((p)=PPVS->va[PVIND(i)].name)) + #define ASSPV(i,p) \ (PVATTR(i)==0?(int)(CPVS->va[(unsigned int)(i)].priv=(pointer)(p))\ - :PVATTR(i)==1?(int)(GPVS->va[PVIND(i)].priv=(pointer)(p))\ - :(int)(MPVS->va[PVIND(i)].priv=(pointer)(p))) + :PVATTR(i)==1?(int)(GPVS->va[PVIND(i)].priv=(pointer)(p))\ + :PVATTR(i)==2?(int)(MPVS->va[PVIND(i)].priv=(pointer)(p))\ + :(int)(PPVS->va[PVIND(i)].priv=(pointer)(p))) #define NEWNODE2(a) ((a)=(NODE2)MALLOC(sizeof(struct oNODE2))) #define MKNODE2(a,b,c,d) \ @@ -298,7 +310,7 @@ switch ( id ) {\ #define BDY1(a) ((a)->body1) #define BDY2(a) ((a)->body2) -extern VS GPVS,CPVS,EPVS,APVS,MPVS; +extern VS GPVS,CPVS,EPVS,APVS,MPVS,PPVS; extern MODULE CUR_MODULE; extern NODE MODULE_LIST; extern char *CUR_FUNC; @@ -483,8 +495,8 @@ void closecurrentinput(void); void asir_terminate(int); void searchasirpath(char *,char **); void get_vars(Obj,VL *); -void appendbinf(NODE *,char *,void(*)(),int); -void appendubinf(char *,void(*)(),int); +void appendbinf(NODE *,char *,void(*)(),int,unsigned int); +void appendubinf(char *,void(*)(),int,unsigned int); void parif_init(void); void sysf_init(void); void makesrvar(FUNC, P *); @@ -514,15 +526,6 @@ int qcoefp(Obj); int qcoefr(Obj); int rangecheck(Obj,int); int structtoindex(char *); -pointer eval(FNODE); -pointer evalf(FUNC,FNODE,FNODE); -pointer bevalf(FUNC,NODE); -pointer evalif(FNODE,FNODE); -pointer evalnode(NODE node); -pointer evalpf(PF,NODE); -pointer evalparif(FUNC,NODE); -pointer evalpv(int,FNODE,pointer); -pointer evalstat(SNODE f); void _mkpfins(PF ,Obj *,V *); void appendpfins(V ,V *); void appenduf(char *,FUNC *); @@ -883,12 +886,14 @@ pointer eval(FNODE f); pointer evalstat(SNODE f); pointer evalnode(NODE node); pointer evalf(FUNC f,FNODE a,FNODE opt); +pointer evalparif(FUNC f,NODE a); +pointer evalf_deriv(FUNC f,FNODE a,FNODE deriv); pointer evalmapf(FUNC f,FNODE a); pointer eval_rec_mapf(FUNC f,FNODE a); pointer beval_rec_mapf(FUNC f,NODE node); pointer bevalf(FUNC f,NODE a); pointer evalif(FNODE f,FNODE a); -pointer evalpf(PF pf,NODE args); +pointer evalpf(PF pf,NODE args,NODE deriv); void evalnodebody(NODE sn,NODE *dnp); void gen_searchf(char *name,FUNC *r); void searchf(NODE fn,char *name,FUNC *r);