--- parser3/src/classes/op.C 2005/07/27 10:57:52 1.153.2.2 +++ parser3/src/classes/op.C 2005/08/30 08:23:09 1.157 @@ -1,11 +1,11 @@ /** @file Parser: parser @b operators. - Copyright (c) 2001-2004 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_OP_C="$Date: 2005/07/27 10:57:52 $"; +static const char * const IDENT_OP_C="$Date: 2005/08/30 08:23:09 $"; #include "classes.h" #include "pa_vmethod_frame.h" @@ -83,14 +83,11 @@ public: // methods static void _if(Request& r, MethodParams& params) { - Value& condition_code=params.as_junction(0, "condition must be expression"); - - bool condition=r.process_to_value(condition_code, - false/*don't intercept string*/).as_bool(); + bool condition=params.as_bool(0, "condition must be expression", r); if(condition) - r.write_pass_lang(r.process(params.as_junction(1, "'then' parameter must be code"))); + r.write_pass_lang(r.process(*params.get(1))); else if(params.count()>2) - r.write_pass_lang(r.process(params.as_junction(2, "'else' parameter must be code"))); + r.write_pass_lang(r.process(*params.get(2))); } static void _untaint(Request& r, MethodParams& params) { @@ -273,7 +270,7 @@ static void _for(Request& r, MethodParam VInt* vint=new VInt(0); VMethodFrame& caller=*r.get_method_frame()->caller(); - caller.put_element(caller, var_name, vint); + caller.put_element(caller, var_name, vint, false); for(int i=from; i<=to; i++) { vint->set_int(i); @@ -384,7 +381,7 @@ static void _case(Request& r, MethodPara for(int i=0; i_default=&code; break; } @@ -440,12 +437,12 @@ static Try_catch_result try_catch(Reques Value* method_frame=junction->method_frame; Value* saved_exception_var_value=method_frame->get_element(exception_var_name, *method_frame, false); VMethodFrame& frame=*junction->method_frame; - frame.put_element(frame, exception_var_name, &details.vhash); + frame.put_element(frame, exception_var_name, &details.vhash, false); result.processed_code=r.process(*catch_code); // retriving $exception.handled, restoring $exception var Value* vhandled=details.vhash.hash().get(exception_handled_part_name); - frame.put_element(frame, exception_var_name, saved_exception_var_value); + frame.put_element(frame, exception_var_name, saved_exception_var_value, false); bool bhandled=false; if(vhandled) {