=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/parse.h,v retrieving revision 1.15 retrieving revision 1.54 diff -u -p -r1.15 -r1.54 --- OpenXM_contrib2/asir2000/parse/parse.h 2001/10/09 01:36:24 1.15 +++ OpenXM_contrib2/asir2000/parse/parse.h 2015/08/06 10:01:53 1.54 @@ -45,9 +45,9 @@ * 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.14 2001/09/05 09:01:28 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/parse.h,v 1.53 2013/11/05 11:36:58 ohara Exp $ */ -# if defined(VISUAL) +# if defined(VISUAL) || defined(__MINGW32__) || defined(__MINGW64__) #include #else #include @@ -67,8 +67,9 @@ typedef enum { I_FUNC, I_FUNC_OPT, I_IFUNC, I_MAP, I_RECMAP, I_PFDERIV, I_ANS, I_PVAR, I_ASSPVAR, I_FORMULA, I_LIST, I_STR, I_NEWCOMP, I_CAR, I_CDR, I_CAST, - I_COM, I_PROC, I_INDEX, I_EV, I_TIMER, I_GF2NGEN, I_GFPNGEN, I_GFSNGEN, - I_LOP, I_OPT, I_GETOPT, I_POINT, I_QUOTE, I_PAREN, I_MINUS + 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_CONS, I_FUNC_QARG, I_FUNC_HEAD, } fid; /* identifiers for statements */ @@ -77,7 +78,8 @@ typedef enum { S_BP, S_PFDEF, S_SINGLE, S_CPLX, S_IFELSE, S_FOR, S_DO, - S_BREAK, S_RETURN, S_CONTINUE + S_BREAK, S_RETURN, S_CONTINUE, + S_MODULE } sid; /* identifiers for comparison operators */ @@ -96,7 +98,7 @@ typedef enum { A_UNDEF, A_BIN, A_USR, A_PURE, A_PARI } typedef enum { V_IND, V_UC, V_PF, V_SR } vid; -struct oVS { +typedef struct oVS { unsigned int n; unsigned int asize; unsigned int at; @@ -104,69 +106,72 @@ struct oVS { struct oFUNC *usrf; struct oPV *va; NODE opt; -}; +} *VS; -typedef struct oVS *VS; +typedef struct oMODULE { + char *name; + VS pvs; + NODE usrf_list; +} *MODULE; -struct oPV { +typedef struct oPV { char *name; short attr,type; pointer priv; -}; +} *PV; -typedef struct oPV *PV; - -struct oINFILE { +typedef struct oINFILE { char *name; FILE *fp; + JMP_BUF jmpbuf; + int ready_for_longjmp; int ln; struct oINFILE *next; char *tname; int encoded; short vol; -}; +} *INFILE; -typedef struct oINFILE *INFILE; - struct oTKWD { char *name; int token; }; -struct oARF { +typedef struct fid_spec { + fid id; + farg_type type[10]; +} *fid_spec_p; + +typedef struct oARF { char *name; void (*fp)(); -}; +} *ARF; -typedef struct oARF *ARF; - -struct oFUNC { - char *name; +typedef struct oFUNC { + char *name,*fullname; int argc; int type; + int secure; aid id; + unsigned int quote; union { void (*binf)(); struct oUSRF *usrf; struct oPF *puref; } f; -}; +} *FUNC; -typedef struct oFUNC *FUNC; - -struct oUSRF { +typedef struct oUSRF { char *fname; - short vol; + MODULE module; int startl,endl; NODE args; VS pvs; char *desc; struct oSNODE *body; -}; +} *USRF; -typedef struct oUSRF *USRF; - -struct oPF { +typedef struct oPF { char *name; int argc; Obj body; @@ -176,65 +181,55 @@ struct oPF { int (*pari)(); double (*libm)(); int (*simplify)(); -}; +} *PF; -typedef struct oPF *PF; - -struct oPFAD { +typedef struct oPFAD { Obj arg; int d; -}; +} *PFAD; -typedef struct oPFAD *PFAD; - -struct oPFINS { +typedef struct oPFINS { struct oPF *pf; struct oPFAD ad[1]; -}; +} *PFINS; -typedef struct oPFINS *PFINS; - #define NEWPF(p) ((p)=(PF)MALLOC(sizeof(struct oPF))) -struct oFNODE { - fid id; +typedef struct oFNODE { + short id; + unsigned normalized:1; + unsigned expanded:2; + unsigned coef:1; pointer arg[1]; -}; +} *FNODE; -typedef struct oFNODE *FNODE; - #define NEWFNODE(a,b) \ ((a)=(FNODE)MALLOC(sizeof(struct oFNODE)+sizeof(pointer)*(b-1))) -struct oSNODE { +typedef struct oSNODE { sid id; int ln; pointer arg[1]; -}; +} *SNODE; -typedef struct oSNODE *SNODE; - #define NEWSNODE(a,b) \ ((a)=(SNODE)MALLOC(sizeof(struct oSNODE)+sizeof(pointer)*(b-1)),(a)->ln=asir_infile->ln) -struct oPVI { +typedef struct oPVI { int pv; NODE index; -}; +} *PVI; -typedef struct oPVI *PVI; - -struct oNODE2 { +typedef struct oNODE2 { pointer body1,body2; struct oNODE2 *next; -}; +} *NODE2; -typedef struct oNODE2 *NODE2; - struct ftab { char *name; void (*f)(); int argc; + unsigned int quote; }; #define MKPVI(a,b,c)\ @@ -283,16 +278,34 @@ switch ( id ) {\ } #define DEFSIZE 32 -#define MSB (1<<31) +#define PVGLOBAL(i) (((unsigned int)(i))|(1<<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) \ -((int)(i)>=0 ? (int)((p)=CPVS->va[(unsigned int)(i)].priv)\ - : (int)((p)=GPVS->va[(unsigned int)(i)&(~MSB)].priv)) +(PVATTR(i)==0?(int)((p)=CPVS->va[(unsigned int)(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))\ + :PVATTR(i)==2?(int)((p)=&(MPVS->va[PVIND(i)].priv))\ + :(int)((p)=&(PPVS->va[PVIND(i)].priv))) + #define GETPVNAME(i,p) \ -((int)(i)>=0 ? (int)((p)=CPVS->va[(unsigned int)(i)].name)\ - : (int)((p)=GPVS->va[(unsigned int)(i)&(~MSB)].name)) +(PVATTR(i)==0?(int)((p)=CPVS->va[(unsigned int)(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) \ -((int)(i)>=0 ? (int)(CPVS->va[(unsigned int)(i)].priv=(pointer)(p))\ - : (int)(GPVS->va[(unsigned int)(i)&(~MSB)].priv=(pointer)(p))) +(PVATTR(i)==0?(int)(CPVS->va[(unsigned int)(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) \ @@ -300,12 +313,18 @@ switch ( id ) {\ #define BDY1(a) ((a)->body1) #define BDY2(a) ((a)->body2) -extern VS GPVS,CPVS,EPVS,APVS; +extern VS GPVS,CPVS,EPVS,APVS,MPVS,PPVS; +extern MODULE CUR_MODULE; +extern NODE MODULE_LIST; +extern char *CUR_FUNC; extern ARF addfs, subfs, mulfs, divfs, remfs, pwrfs; extern INFILE asir_infile; extern NODE usrf,sysf,noargsysf,ubinf,parif,ONENODE; extern int nextbp,nextbplevel; extern int Verbose; +extern int do_quiet; +extern SYMBOL Symbol_grlex, Symbol_glex, Symbol_lex; +extern NODE current_option; #if defined(VISUAL_LIB) #include @@ -322,7 +341,7 @@ extern int Verbose; #define fflush w_fflush #endif -#if defined(VISUAL) || (defined(__MACH__) && defined(__ppc__)) +#if defined(__GNUC__) || defined(VISUAL) || defined(__MINGW32__) || defined(__MINGW64__) || (defined(__MACH__) && defined(__ppc__)) || defined(__FreeBSD__) NODE mknode(int,...); FNODE mkfnode(int,fid,...); SNODE mksnode(int,sid,...); @@ -341,6 +360,7 @@ void dp_ptozp_d(DP,DP *); void dp_vtod(Q *,DP,DP *); void dp_idivv_hist(Q,DP *); void dp_igcdv_hist(DP,Q *); +void dp_ptozp3(DP,Q *,DP *); void dp_ptozp2(DP,DP,DP *,DP *); void dp_ptozp(DP,DP *); void dp_nf_tab_mod(DP,LIST *,int,DP *); @@ -376,8 +396,8 @@ void dp_mod(DP,int,NODE,DP *); void dp_prim_mod(DP,int,DP *); void dp_prim(DP,DP *); void heu_nezgcdnpz(VL,P *,int,P *); -void homogenize_order(struct order_spec *,int,struct order_spec *); -int create_order_spec(Obj,struct order_spec *); +void homogenize_order(struct order_spec *,int,struct order_spec **); +int create_order_spec(VL,Obj,struct order_spec **); int dl_equal(int,DL,DL); void qltozl(Q *,int,Q *); @@ -432,6 +452,7 @@ void input_init(FILE *,char *); void asir_terminate(int); void param_init(void); void sprompt(char *); +void cppname_init(); void process_args(int,char **); void sig_init(void); void asir_save_handler(void); @@ -446,7 +467,6 @@ void tty_reset(void); void set_timer(int); void reset_timer(void); void int_handler(int); -void int_handler(int); void segv_handler(int); void bus_handler(int); void fpe_handler(int); @@ -465,19 +485,20 @@ int yyparse(void); void nodetod(NODE,DP *); void poppvs(void); int length(NODE); -int get_heapsize(void); +size_t get_heapsize(void); int searchpvar(char *); void mkparif(char *,FUNC *); void makevar(char *,P *); -void mkpvs(void); +void mkpvs(char *); +MODULE mkmodule(char *); void stoarg(char *,int *,char **); void yyerror(char *); 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 *); @@ -493,29 +514,18 @@ void printv(VL,V); void sprintv(VL,V); int arf_comp(VL, Obj, Obj); int complist(VL, LIST, LIST); -int complist(VL, LIST, LIST); int getcompsize(int); int getpvar(VS,char *,int); -int getpvar(VS,char *,int); int gettype(unsigned int); int indextotype(int,int); int loadfile(char *); int loadfiles(NODE); -int makepvar(char *); +unsigned int makepvar(char *); int membertoindex(int,char *); 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 *); @@ -549,7 +559,7 @@ void instov(PFINS ,V *); Obj memberofstruct(COMP,char *); void mkpf(char *,Obj ,int ,V *,int (*)(),double (*)(),int (*)(),PF *); void mkpfins(PF ,V *,V *); -void mkuf(char *,char *,NODE,SNODE,int,int,char *); +void mkuf(char *,char *,NODE,SNODE,int,int,char *,MODULE); void newstruct(int,struct oCOMP **); void optobj(Obj *); void println(int, char **, int); @@ -605,12 +615,10 @@ int dp_redble(DP p1,DP p2); void sortbynm(Q *w,int n); int comp_nm(Q *a,Q *b); void qltozl(Q *w,int n,Q *dvr); -void homogenize_order(struct order_spec *old,int n,struct order_spec *new); void dp_rat(DP p,DP *rp); void dp_mod(DP p,int mod,NODE subst,DP *rp); void dp_dehomo(DP p,DP *rp); void dp_homo(DP p,DP *rp); -int create_order_spec(Obj obj,struct order_spec *spec); void dp_nf_tab_mod(DP p,LIST *tab,int mod,DP *rp); void dp_lnf_mod(DP p1,DP p2,NODE g,int mod,DP *r1p,DP *r2p); void dp_lnf_f(DP p1,DP p2,NODE g,DP *r1p,DP *r2p); @@ -643,7 +651,6 @@ void dp_mbase(NODE hlist,NODE *mbase); void dp_idiv(DP p,Q c,DP *rp); void dp_ptozp2(DP p0,DP p1,DP *hp,DP *rp); void dp_ptozp(DP p,DP *rp); -int eqdl(int nv,DL dl1,DL dl2); void _dpmod_to_vect(DP f,DL *at,int *b); void _tf_to_vect_compress(NODE tf,DL *at,CDP *b); void dp_to_vect(DP f,DL *at,Q *b); @@ -690,7 +697,7 @@ DP_pairs criterion_F( DP_pairs d1 ); NODE updbase(NODE g,int t); NODE /* of index */ remove_reducibles(NODE /* of index */ nd, int newdp ); int dl_redble(DL dl1,DL dl2); -int dl_weight(DL dl); +int dl_weyl_weight(DL dl); int gbcheck(NODE f); int membercheck(NODE f,NODE x); void dp_set_flag(Obj name,Obj value); @@ -752,7 +759,7 @@ int generic_gauss_elim_mod(int **mat0,int row,int col, int lu_gfmmat(GFMMAT mat,unsigned int md,int *perm); int find_lhs_and_lu_mod(unsigned int **a,int row,int col, unsigned int md,int **rinfo,int **cinfo); -void solve_by_lu_mod(int **a,int n,int md,int **b,int l); +void solve_by_lu_mod(int **a,int n,int md,int **b,int l,int normalize); int gauss_elim_mod1(int **mat,int row,int col,int md); int gauss_elim_geninv_mod(unsigned int **mat,int row,int col,int md); void solve_by_lu_gfmmat(GFMMAT lu,unsigned int md,unsigned int *b,unsigned int *x); @@ -774,10 +781,9 @@ void igcd_cofactor(Q a,Q b,Q *gcd,Q *ca,Q *cb); int comp_n(N *a,N *b); int TypeT_NB_check(unsigned int m, unsigned int t); int small_jacobi(int a,int m); -void mkpvs(); void pushpvs(FUNC f); void poppvs(); -int makepvar(char *str); +unsigned int makepvar(char *str); int searchpvar(char *str); int getpvar(VS pvs,char *str,int searchonly); void closecurrentinput(); @@ -798,8 +804,8 @@ void chsgnquote(QUOTE a,QUOTE *c); void objtoquote(Obj a,QUOTE *c); void polytoquote(P a,QUOTE *c); void dptoquote(DP a,QUOTE *c); -void dctoquote(DCP dc,QUOTE v,QUOTE *c); -void mptoquote(MP m,int n,QUOTE *c); +void dctoquote(DCP dc,QUOTE v,QUOTE *c,int *sgn); +void mptoquote(MP m,int n,QUOTE *c,int *sgn); void vartoquote(V v,QUOTE *c); void fnodetotree(FNODE f,LIST *rp); FNODE eval_pvar_in_fnode(FNODE f); @@ -816,7 +822,6 @@ void prompt() ; void sprompt(char *ptr); void process_args(int ac,char **av); void sig_init() ; -static void (*old_int)(int);; void asir_save_handler() ; void asir_set_handler() ; void asir_reset_handler() ; @@ -879,18 +884,21 @@ 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 bevalf_with_opts(FUNC f,NODE a,NODE opts); +pointer evalif(FNODE f,FNODE a,FNODE opt); +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); void appenduf(char *name,FUNC *r); void mkparif(char *name,FUNC *r); -void mkuf(char *name,char *fname,NODE args,SNODE body,int startl,int endl,char *desc); +void mkuf(char *name,char *fname,NODE args,SNODE body,int startl,int endl,char *desc,MODULE module); Obj getopt_from_cpvs(char *key); void des_enc(unsigned long *, unsigned char *, unsigned long *); unsigned long round_func(unsigned long , unsigned char *);