--- parser3/src/main/execute.C 2001/03/10 11:44:42 1.82 +++ parser3/src/main/execute.C 2001/03/10 13:07:09 1.84 @@ -1,5 +1,5 @@ /* - $Id: execute.C,v 1.82 2001/03/10 11:44:42 paf Exp $ + $Id: execute.C,v 1.84 2001/03/10 13:07:09 paf Exp $ */ #include "pa_array.h" @@ -179,7 +179,7 @@ void Request::execute(const Array& ops) case OP_WRITE: { Value *value=POP(); - wcontext->write(*value); + write(*value); break; } @@ -193,7 +193,7 @@ void Request::execute(const Array& ops) case OP_GET_ELEMENT__WRITE: { Value *value=get_element(); - wcontext->write(*value); + write(*value); break; } @@ -299,7 +299,9 @@ void Request::execute(const Array& ops) if(wcontext->constructing()) { // constructing? // yes, constructor call: $some(^class:method(..)) self=NEW VObject(pool(), *called_class); - frame->write(*self); + frame->write(*self, + String::Untaint_lang::NO // not used, always an object, not string + ); } else self=&frame->junction.self; // no, static or simple dynamic call @@ -560,7 +562,7 @@ Value *Request::get_element() { Value *value=ncontext->get_element(name); if(value) - value=&autocalc(*value); // autocalc possible code-junction + value=&autocalc(*value, &name); // autocalc possible code-junction else { value=NEW VUnknown(pool()); value->set_name(name); @@ -569,7 +571,7 @@ Value *Request::get_element() { return value; } -Value& Request::autocalc(Value& value, bool make_string) { +Value& Request::autocalc(Value& value, const String *name, bool make_string) { Junction *junction=value.get_junction(); if(junction && junction->code) { // is it a code-junction? // autocalc it @@ -602,6 +604,8 @@ Value& Request::autocalc(Value& value, b result=NEW VString(*frame->get_string()); } else result=frame->result(); + if(name) + result->set_name(*name); wcontext=static_cast(POP()); rcontext=POP();