--- parser3/src/main/execute.C 2003/04/07 11:57:46 1.295.2.27.2.21 +++ parser3/src/main/execute.C 2003/10/02 07:26:46 1.299 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_EXECUTE_C="$Date: 2003/04/07 11:57:46 $"; +static const char* IDENT_EXECUTE_C="$Date: 2003/10/02 07:26:46 $"; #include "pa_opcode.h" #include "pa_array.h" @@ -710,49 +710,49 @@ void Request::execute(ArrayOperation& op } case OP_NUM_LT: { - Value& b=stack.pop().value(); Value& a=stack.pop().value(); - double result=a.as_double() - b.as_double(); - Value& value=*new VBool(result < 0.0); + volatile double b_double=stack.pop().value().as_double(); + volatile double a_double=stack.pop().value().as_double(); + Value& value=*new VBool(a_double 0.0); + volatile double b_double=stack.pop().value().as_double(); + volatile double a_double=stack.pop().value().as_double(); + Value& value=*new VBool(a_double>b_double); stack.push(value); break; } case OP_NUM_LE: { - Value& b=stack.pop().value(); Value& a=stack.pop().value(); - double result=a.as_double() - b.as_double(); - Value& value=*new VBool(result <= 0.0); + volatile double b_double=stack.pop().value().as_double(); + volatile double a_double=stack.pop().value().as_double(); + Value& value=*new VBool(a_double<=b_double); stack.push(value); break; } case OP_NUM_GE: { - Value& b=stack.pop().value(); Value& a=stack.pop().value(); - double result=a.as_double() - b.as_double(); - Value& value=*new VBool(result >= 0.0); + volatile double b_double=stack.pop().value().as_double(); + volatile double a_double=stack.pop().value().as_double(); + Value& value=*new VBool(a_double>=b_double); stack.push(value); break; } case OP_NUM_EQ: { - Value& b=stack.pop().value(); Value& a=stack.pop().value(); - double result=a.as_double() - b.as_double(); - Value& value=*new VBool(result == 0.0); + volatile double b_double=stack.pop().value().as_double(); + volatile double a_double=stack.pop().value().as_double(); + Value& value=*new VBool(a_double==b_double); stack.push(value); break; } case OP_NUM_NE: { - Value& b=stack.pop().value(); Value& a=stack.pop().value(); - double result=a.as_double() - b.as_double(); - Value& value=*new VBool(result != 0.0); + volatile double b_double=stack.pop().value().as_double(); + volatile double a_double=stack.pop().value().as_double(); + Value& value=*new VBool(a_double!=b_double); stack.push(value); break; } @@ -938,7 +938,7 @@ StringOrValue Request::process(Value& in return result; } -const String& Request::execute_method(VMethodFrame& amethod_frame, const Method& method) { +StringOrValue Request::execute_method(VMethodFrame& amethod_frame, const Method& method) { VMethodFrame *saved_method_frame=method_frame; Value* saved_rcontext=rcontext; WContext *saved_wcontext=wcontext; @@ -950,7 +950,7 @@ const String& Request::execute_method(VM execute(*method.parser_code); // result - const String& result=wcontext->result().as_string(); + StringOrValue result=wcontext->result(); wcontext=saved_wcontext; rcontext=saved_rcontext;