--- parser3/src/main/execute.C 2009/06/16 08:40:32 1.350 +++ parser3/src/main/execute.C 2009/06/29 09:25:29 1.352 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_EXECUTE_C="$Date: 2009/06/16 08:40:32 $"; +static const char * const IDENT_EXECUTE_C="$Date: 2009/06/29 09:25:29 $"; #include "pa_opcode.h" #include "pa_array.h" @@ -451,12 +451,11 @@ void Request::execute(ArrayOperation& op } case OP::OP_WRITE_EXPR_RESULT: { - Value& value=stack.pop().value(); - write_no_lang(value.as_expr_result()); - - // must be after write(result) and // see OP_PREPARE_TO_EXPRESSION wcontext->set_in_expression(false); + + Value& value=stack.pop().value(); + wcontext->write(value.as_expr_result()); break; } case OP::OP_STRING__WRITE: @@ -645,9 +644,9 @@ void Request::execute(ArrayOperation& op String::Language saved_lang=flang; flang=String::L_PASS_APPENDED; #ifdef OPTIMIZE_SINGLE_STRING_WRITE - WObjectPoolWrapper local(0/*empty*/, wcontext); + WObjectPoolWrapper local(wcontext); #else - WWrapper local(0/*empty*/, wcontext); + WWrapper local(wcontext); #endif wcontext=&local; @@ -664,7 +663,7 @@ void Request::execute(ArrayOperation& op ArrayOperation& local_ops=*i.next().ops; WContext *saved_wcontext=wcontext; - WWrapper local(0 /*empty*/, wcontext); + WWrapper local(wcontext); wcontext=&local; execute(local_ops); @@ -846,9 +845,6 @@ void Request::execute(ArrayOperation& op case OP::OP_CONSTRUCT_OBJECT: case OP::OP_CONSTRUCT_OBJECT__WRITE: { - // maybe they do ^class:method[] call, remember the fact - // wcontext->set_somebody_entered_some_class(); - debug_origin=i.next().origin; Value& vclass_name=*i.next().value; const String& class_name=*vclass_name.get_string(); @@ -1347,8 +1343,8 @@ void Request::put_element(Value& ncontex if(vjunction!=PUT_ELEMENT_REPLACED_ELEMENT) { // process it VMethodFrame frame(vjunction->junction(), method_frame/*caller*/); - int param_count=frame.method_params_count(); + size_t param_count=frame.method_params_count(); if(param_count!=1) throw Exception(PARSER_RUNTIME, 0, @@ -1388,9 +1384,8 @@ StringOrValue Request::process(Value& in if(junction) { if(junction->is_getter) { // is it a getter-junction? VMethodFrame frame(*junction, method_frame/*caller*/); - int param_count=frame.method_params_count(); - if(param_count){ + if(size_t param_count=frame.method_params_count()){ if(junction->auto_name){ // default getter if(param_count==1){ Value *param=new VString(*junction->auto_name); @@ -1428,8 +1423,8 @@ StringOrValue Request::process(Value& in if(!junction->method_frame) throw Exception(PARSER_RUNTIME, - 0, - "junction used outside of context"); + 0, + "junction used outside of context"); SAVE_CONTEXT @@ -1453,7 +1448,7 @@ StringOrValue Request::process(Value& in result=wcontext->result(); } else { // plain wwrapper - WWrapper local(0/*empty*/, wcontext); + WWrapper local(wcontext); wcontext=&local; // execute it @@ -1481,9 +1476,8 @@ void Request::process_write(Value& input if(junction) { if(junction->is_getter) { // is it a getter-junction? VMethodFrame frame(*junction, method_frame/*caller*/); - int param_count=frame.method_params_count(); - if(param_count){ + if(size_t param_count=frame.method_params_count()){ if(junction->auto_name){ // default getter if(param_count==1){ Value *param=new VString(*junction->auto_name); @@ -1550,7 +1544,7 @@ void Request::process_write(Value& input write_pass_lang(local.result()); } else { // plain wwrapper - WWrapper local(0/*empty*/, wcontext); + WWrapper local(wcontext); wcontext=&local; // execute it