=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/eval.c,v retrieving revision 1.68 retrieving revision 1.79 diff -u -p -r1.68 -r1.79 --- OpenXM_contrib2/asir2000/parse/eval.c 2011/02/18 02:54:49 1.68 +++ OpenXM_contrib2/asir2000/parse/eval.c 2018/03/28 05:27:22 1.79 @@ -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.67 2010/05/24 01:59:52 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/eval.c,v 1.78 2018/03/27 06:29:19 noro Exp $ */ #include #include "ca.h" @@ -57,20 +57,17 @@ #endif #include #include -#if defined(PARI) -#include "genpari.h" -#endif extern JMP_BUF timer_env; extern FUNC cur_binf; extern NODE PVSS; +extern int evalef; int f_break,f_return,f_continue; int evalstatline; -int recv_intr; int show_crossref; int at_root; -void gen_searchf_searchonly(char *name,FUNC *r); +void gen_searchf_searchonly(char *name,FUNC *r,int global); LIST eval_arg(FNODE a,unsigned int quote); pointer eval(FNODE f) @@ -83,7 +80,7 @@ pointer eval(FNODE f) R u; DP dp; unsigned int pv; - int c,ret; + int c,ret,pos; FNODE f1; UP2 up2; UP up; @@ -94,18 +91,10 @@ pointer eval(FNODE f) GFSN gfsn; RANGE range; QUOTE expr,pattern; + Q q; -#if defined(VISUAL) - if ( recv_intr ) { -#include - if ( recv_intr == 1 ) { - recv_intr = 0; - int_handler(SIGINT); - } else { - recv_intr = 0; - ox_usr1_handler(0); - } - } +#if defined(VISUAL) || defined(__MINGW32__) + check_intr(); #endif if ( !f ) return ( 0 ); @@ -181,6 +170,9 @@ pointer eval(FNODE f) case I_EV: evalnodebody((NODE)FA0(f),&tn); nodetod(tn,&dp); val = (pointer)dp; break; + case I_EVM: + evalnodebody((NODE)FA0(f),&tn); pos = eval((FNODE)FA1(f)); nodetodpm(tn,pos,&dp); val = (pointer)dp; + break; case I_FUNC: val = evalf((FUNC)FA0(f),(FNODE)FA1(f),0); break; case I_FUNC_OPT: @@ -196,7 +188,7 @@ pointer eval(FNODE f) val = eval_rec_mapf((FUNC)FA0(f),(FNODE)FA1(f)); break; case I_IFUNC: val = evalif((FNODE)FA0(f),(FNODE)FA1(f),(FNODE)FA2(f)); break; -#if !defined(VISUAL) +#if !defined(VISUAL) && !defined(__MINGW32__) case I_TIMER: { int interval; @@ -307,7 +299,8 @@ pointer eval(FNODE f) case I_STR: MKSTR(str,FA0(f)); val = (pointer)str; break; case I_FORMULA: - val = FA0(f); break; + val = FA0(f); + break; case I_LIST: evalnodebody((NODE)FA0(f),&tn); MKLIST(t,tn); val = (pointer)t; break; case I_CONS: @@ -733,15 +726,9 @@ pointer evalstat(SNODE f) case S_BP: if ( !nextbp && (!FA1(f) || eval((FNODE)FA1(f))) ) { if ( (FNODE)FA2(f) ) { -#if defined(PARI) - pari_outfile = stderr; -#endif asir_out = stderr; printexpr(CO,eval((FNODE)FA2(f))); putc('\n',asir_out); fflush(asir_out); -#if defined(PARI) - pari_outfile = stdout; -#endif asir_out = stdout; } else { nextbp = 1; nextbplevel = 0; @@ -776,15 +763,15 @@ pointer evalstat(SNODE f) } break; case S_BREAK: - if ( GPVS != CPVS ) + if ( 1 || GPVS != CPVS ) f_break = 1; break; case S_CONTINUE: - if ( GPVS != CPVS ) + if ( 1 || GPVS != CPVS ) f_continue = 1; break; case S_RETURN: - if ( GPVS != CPVS ) { + if ( 1 || GPVS != CPVS ) { val = eval((FNODE)FA0(f)); f_return = 1; } break; @@ -882,7 +869,7 @@ pointer evalf(FUNC f,FNODE a,FNODE opt) FUNC f1; if ( f->id == A_UNDEF ) { - gen_searchf_searchonly(f->fullname,&f1); + gen_searchf_searchonly(f->fullname,&f1,0); if ( f1->id == A_UNDEF ) { sprintf(errbuf,"evalf : %s undefined",NAME(f)); error(errbuf); @@ -936,7 +923,7 @@ pointer evalf(FUNC f,FNODE a,FNODE opt) break; case A_USR: /* stack check */ -#if !defined(VISUAL) && !defined(__CYGWIN__) +#if !defined(VISUAL) && !defined(__MINGW32__) && !defined(__CYGWIN__) if ( !stack_size ) { struct rlimit rl; getrlimit(RLIMIT_STACK,&rl); @@ -1344,7 +1331,7 @@ pointer evalpf(PF pf,NODE args,NODE dargs) simplify_ins(ins,&s); } else { s = pf->body; - if ( dnode ) { + if ( dargs ) { for ( i = 0, dnode = dargs; dnode; dnode = NEXT(dnode), i++ ) { di = QTOS((Q)dnode->body); for ( j = 0; j < di; j++ ) { @@ -1435,10 +1422,9 @@ void gen_searchf(char *name,FUNC *r) *r = val; } -void gen_searchf_searchonly(char *name,FUNC *r) +void gen_searchf_searchonly(char *name,FUNC *r,int global) { FUNC val = 0; - int global = 0; if ( *name == ':' ) { global = 1; name += 2; @@ -1652,7 +1638,7 @@ MODULE mkmodule(char *name) mod->name = (char *)MALLOC_ATOMIC(len+1); strcpy(mod->name,name); mod->pvs = mpvs = (VS)MALLOC(sizeof(struct oVS)); - reallocarray((char **)&mpvs->va,(int *)&mpvs->asize, + asir_reallocarray((char **)&mpvs->va,(int *)&mpvs->asize, (int *)&mpvs->n,(int)sizeof(struct oPV)); mod->usrf_list = 0; MKNODE(m,mod,MODULE_LIST);