--- parser3/src/main/execute.C 2002/04/18 11:41:29 1.237 +++ parser3/src/main/execute.C 2002/04/22 10:15:12 1.239 @@ -4,7 +4,7 @@ Copyright (c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) - $Id: execute.C,v 1.237 2002/04/18 11:41:29 paf Exp $ + $Id: execute.C,v 1.239 2002/04/22 10:15:12 paf Exp $ */ #include "pa_opcode.h" @@ -210,11 +210,11 @@ void Request::execute(const Array& ops) #endif Junction& j=*NEW Junction(pool(), *self, 0, 0, - root, - rcontext, - wcontext, + 0, + 0, + 0, local_ops); - + value=NEW VJunction(j); const String& name=POP_NAME(); Value *ncontext=POP(); @@ -859,23 +859,29 @@ StringOrValue Request::process(Value& in #ifdef DEBUG_EXECUTE debug_printf(pool(), "ja->\n"); #endif + PUSH(self); PUSH(root); PUSH(rcontext); PUSH(wcontext); - + + WContext *jwcontext; self=&junction->self; - root=junction->root; - rcontext=junction->rcontext; + if(junction->root) { + root=junction->root; + rcontext=junction->rcontext; + jwcontext=junction->wcontext; + } else + jwcontext=wcontext; // for expression method params // wcontext is set 0 // using the fact in decision "which wwrapper to use" - bool using_code_frame=intercept_string && junction->wcontext; + bool using_code_frame=intercept_string && jwcontext; if(using_code_frame) { // almost plain wwrapper about junction wcontext, // BUT intercepts string writes - VCodeFrame local(pool(), *junction->wcontext); + VCodeFrame local(pool(), *jwcontext); wcontext=&local; // execute it