--- parser3/src/main/execute.C 2001/03/13 12:37:05 1.99 +++ parser3/src/main/execute.C 2001/03/13 14:06:55 1.102 @@ -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.99 2001/03/13 12:37:05 paf Exp $ + $Id: execute.C,v 1.102 2001/03/13 14:06:55 paf Exp $ */ #include "pa_array.h" @@ -305,9 +305,9 @@ void Request::execute(const Array& ops) PUSH(rcontext); PUSH(wcontext); - VClass *called_class=frame->junction.self.get_class(); + VStateless_class *called_class=frame->junction.self.get_class(); // is context object or class & is it my class or my parent's class? - VClass *read_class=rcontext->get_class(); + VStateless_class *read_class=rcontext->get_class(); if(read_class && read_class->is_or_derived_from(*called_class)) // yes self=rcontext; // class dynamic call else // no, not me or relative of mine (total stranger) @@ -317,6 +317,8 @@ void Request::execute(const Array& ops) // yes, this is a constructor call if(called_class->name()==TABLE_CLASS_NAME) self=NEW VTable(pool()); + else if(called_class->name()==ENV_CLASS_NAME) + self=NEW VEnv(pool()); else self=NEW VObject(pool(), *called_class); frame->write(*self, @@ -329,9 +331,8 @@ void Request::execute(const Array& ops) root=rcontext=wcontext=frame; { // take object or class from any wrappers - VAliased *aliased=self->get_aliased(); - // substitute class alias to the class they are called AS - Temp_alias temp_alias(*aliased, *frame->junction.vclass); + // and substitute class alias to the class they are called AS + Temp_alias temp_alias(*self->get_aliased(), *frame->junction.vclass); const Method& method=*frame->junction.method; if(method.native_code) { // native code?