--- parser3/src/main/execute.C 2001/03/15 11:00:40 1.106 +++ parser3/src/main/execute.C 2001/03/16 09:26:43 1.108 @@ -3,7 +3,7 @@ Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) Author: Alexander Petrosyan (http://design.ru/paf) - $Id: execute.C,v 1.106 2001/03/15 11:00:40 paf Exp $ + $Id: execute.C,v 1.108 2001/03/16 09:26:43 paf Exp $ */ #include "pa_array.h" @@ -34,7 +34,7 @@ char *opcode_name[]={ "WITH_SELF", "WITH_ROOT", "WITH_READ", "WITH_WRITE", "GET_CLASS", "CONSTRUCT_VALUE", "CONSTRUCT_DOUBLE", - "WRITE", "STRING__WRITE", + "WRITE_VALUE", "WRITE_EXPR_RESULT", "STRING__WRITE", "GET_ELEMENT", "GET_ELEMENT__WRITE", "CREATE_EWPOOL", "REDUCE_EWPOOL", "CREATE_RWPOOL", "REDUCE_RWPOOL", @@ -54,8 +54,16 @@ char *opcode_name[]={ "IS" }; +void va_log_printf(const char *fmt,va_list args) { + vfprintf(stderr, fmt, args); +} + void log_printf(const char *fmt, ...) { // TODO: куда-нибудь пристроить + va_list args; + va_start(args,fmt); + va_log_printf(fmt,args); + va_end(args); } void dump(int level, const Array& ops) { @@ -187,17 +195,23 @@ void Request::execute(const Array& ops) value->set_name(name); break; } - case OP_WRITE: + case OP_WRITE_VALUE: { Value *value=POP(); write_assign_lang(*value); break; } + case OP_WRITE_EXPR_RESULT: + { + Value *value=POP(); + write_expr_result(*value->get_expr_result()); + break; + } case OP_STRING__WRITE: { VString *vstring=static_cast(ops.quick_get(++i)); - log_printf(" \"%s\"", vstring->value().cstr()); - write(vstring->value()); + log_printf(" \"%s\"", vstring->string().cstr()); + write(vstring->string()); break; } @@ -631,7 +645,7 @@ Value& Request::process(Value& value, co frame=NEW VCodeFrame(pool(), *junction->wcontext); } else { // plain wwrapper - frame=NEW WWrapper(pool(), 0 /* empty */, false /*not constructing*/); + frame=NEW WWrapper(pool(), 0/*empty*/, false/*not constructing*/); } wcontext=frame;