--- parser3/src/main/execute.C 2003/01/28 15:42:40 1.295.2.2 +++ parser3/src/main/execute.C 2003/04/07 12:39:32 1.296 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_EXECUTE_C="$Date: 2003/01/28 15:42:40 $"; +static const char* IDENT_EXECUTE_C="$Date: 2003/04/07 12:39:32 $"; #include "pa_opcode.h" #include "pa_array.h" @@ -125,7 +125,7 @@ void Request::execute(const Array& ops) while(i.has_next()) { if(interrupted()) throw Exception("parser.interrupted", - Exception::undefined_source, + 0, "execution stopped"); Operation op; @@ -432,7 +432,7 @@ void Request::execute(const Array& ops) if(frame.junction.method->call_type!=Method::CT_STATIC) { // this is a constructor call - if(ValuePtr value=called_class->create_new_value()) { + if(Value *value=called_class->create_new_value(pool())) { // some stateless_class creatable derivates new_self=value; } else @@ -726,48 +726,54 @@ void Request::execute(const Array& ops) case OP_NUM_LT: { b=POP(); a=POP(); - double result=a->as_double() - b->as_double(); - value=NEW VBool(pool(), result < 0.0); + volatile double a_double=a->as_double(); + volatile double b_double=b->as_double(); + value=NEW VBool(pool(), a_doubleas_double() - b->as_double(); - value=NEW VBool(pool(), result > 0.0); + volatile double a_double=a->as_double(); + volatile double b_double=b->as_double(); + value=NEW VBool(pool(), a_double>b_double); PUSH(value); break; } case OP_NUM_LE: { b=POP(); a=POP(); - double result=a->as_double() - b->as_double(); - value=NEW VBool(pool(), result <= 0.0); + volatile double a_double=a->as_double(); + volatile double b_double=b->as_double(); + value=NEW VBool(pool(), a_double<=b_double); PUSH(value); break; } case OP_NUM_GE: { b=POP(); a=POP(); - double result=a->as_double() - b->as_double(); - value=NEW VBool(pool(), result >= 0.0); + volatile double a_double=a->as_double(); + volatile double b_double=b->as_double(); + value=NEW VBool(pool(), a_double>=b_double); PUSH(value); break; } case OP_NUM_EQ: { b=POP(); a=POP(); - double result=a->as_double() - b->as_double(); - value=NEW VBool(pool(), result == 0.0); + volatile double a_double=a->as_double(); + volatile double b_double=b->as_double(); + value=NEW VBool(pool(), a_double==b_double); PUSH(value); break; } case OP_NUM_NE: { b=POP(); a=POP(); - double result=a->as_double() - b->as_double(); - value=NEW VBool(pool(), result != 0.0); + volatile double a_double=a->as_double(); + volatile double b_double=b->as_double(); + value=NEW VBool(pool(), a_double!=b_double); PUSH(value); break; }