=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/eval.c,v retrieving revision 1.57 retrieving revision 1.60 diff -u -p -r1.57 -r1.60 --- OpenXM_contrib2/asir2000/parse/eval.c 2005/12/10 14:14:15 1.57 +++ OpenXM_contrib2/asir2000/parse/eval.c 2006/02/25 06:33:31 1.60 @@ -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.56 2005/12/09 08:10:44 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/eval.c,v 1.59 2005/12/11 07:21:43 noro Exp $ */ #include #include "ca.h" @@ -59,11 +59,14 @@ #endif extern JMP_BUF timer_env; +extern FUNC cur_binf; +extern NODE PVSS; 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); LIST eval_arg(FNODE a,unsigned int quote); @@ -547,15 +550,16 @@ FNODE partial_eval(FNODE f) return mkfnode(3,f->id,a0,a1,a2); break; - /* XXX : function is evaluated */ - case I_FUNC: case I_FUNC_QARG: + /* XXX : function is evaluated with QUOTE args */ + case I_FUNC: a1 = partial_eval((FNODE)FA1(f)); func = (FUNC)FA0(f); - a1 = mkfnode(2,I_FUNC,func,a1); - if ( f->id == I_FUNC_QARG || func->id == A_UNDEF ) + if ( func->id == A_UNDEF || func->id != A_USR ) { + a1 = mkfnode(2,I_FUNC,func,a1); return a1; - else { - obj = eval(a1); + } else { + n = BDY(eval_arg(a1,(unsigned int)0xffffffff)); + obj = bevalf(func,n); objtoquote(obj,&q); return BDY(q); } @@ -720,6 +724,7 @@ pointer evalstat(SNODE f) bp(f); } evalstatline = f->ln; + if ( !PVSS ) at_root = evalstatline; switch ( f->id ) { case S_BP: @@ -833,8 +838,6 @@ pointer evalnode(NODE node) return ( val ); } -extern FUNC cur_binf; -extern NODE PVSS; LIST eval_arg(FNODE a,unsigned int quote) {