=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/eval.c,v retrieving revision 1.64 retrieving revision 1.68 diff -u -p -r1.64 -r1.68 --- OpenXM_contrib2/asir2000/parse/eval.c 2008/11/18 20:52:47 1.64 +++ OpenXM_contrib2/asir2000/parse/eval.c 2011/02/18 02:54:49 1.68 @@ -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.63 2008/09/01 06:20:33 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/eval.c,v 1.67 2010/05/24 01:59:52 noro Exp $ */ #include #include "ca.h" @@ -917,6 +917,7 @@ pointer evalf(FUNC f,FNODE a,FNODE opt) } else opts = 0; if ( !n ) { + current_option = opts; cur_binf = f; (*f->f.binf)(&val); } else { @@ -943,9 +944,7 @@ pointer evalf(FUNC f,FNODE a,FNODE opt) } if ( !stack_base ) { #if defined(GC7) - struct GC_stack_base sb; - GC_get_stack_base(&sb); - stack_base = (void *)sb.mem_base; + stack_base = (void *)GC_get_main_stack_base(); #else stack_base = (void *)GC_get_stack_base(); #endif @@ -989,6 +988,7 @@ pointer evalf(FUNC f,FNODE a,FNODE opt) for ( tn = f->f.usrf->args, sn = BDY(args); sn; tn = NEXT(tn), sn = NEXT(sn) ) ASSPV((int)FA0((FNODE)BDY(tn)),BDY(sn)); + f_return = f_break = f_continue = 0; if ( f->f.usrf->module ) { prev_mpvs = MPVS; MPVS = f->f.usrf->module->pvs; @@ -997,6 +997,8 @@ pointer evalf(FUNC f,FNODE a,FNODE opt) } else val = evalstat((SNODE)BDY(f->f.usrf)); f_return = f_break = f_continue = 0; poppvs(); + if ( PVSS ) + evalstatline = ((VS)BDY(PVSS))->at; break; case A_PURE: args = (LIST)eval(a); @@ -1165,6 +1167,7 @@ pointer bevalf(FUNC f,NODE a) } switch ( f->id ) { case A_BIN: + current_option = 0; if ( !n ) { cur_binf = f; (*f->f.binf)(&val); @@ -1197,6 +1200,7 @@ pointer bevalf(FUNC f,NODE a) for ( tn = f->f.usrf->args, sn = a; sn; tn = NEXT(tn), sn = NEXT(sn) ) ASSPV((int)FA0((FNODE)BDY(tn)),BDY(sn)); + f_return = f_break = f_continue = 0; if ( f->f.usrf->module ) { prev_mpvs = MPVS; MPVS = f->f.usrf->module->pvs; @@ -1275,6 +1279,7 @@ pointer bevalf_with_opts(FUNC f,NODE a,NODE opts) for ( tn = f->f.usrf->args, sn = a; sn; tn = NEXT(tn), sn = NEXT(sn) ) ASSPV((int)FA0((FNODE)BDY(tn)),BDY(sn)); + f_return = f_break = f_continue = 0; if ( f->f.usrf->module ) { prev_mpvs = MPVS; MPVS = f->f.usrf->module->pvs;