--- parser3/src/main/execute.C 2001/03/13 13:43:30 1.100 +++ parser3/src/main/execute.C 2001/03/13 14:28:51 1.103 @@ -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.100 2001/03/13 13:43:30 paf Exp $ + $Id: execute.C,v 1.103 2001/03/13 14:28:51 paf Exp $ */ #include "pa_array.h" @@ -50,7 +50,8 @@ char *opcode_name[]={ "BIN_AND", "BIN_OR", "BIN_XOR", "LOG_AND", "LOG_OR", "LOG_XOR", "NUM_LT", "NUM_GT", "NUM_LE", "NUM_GE", "NUM_EQ", "NUM_NE", - "STR_LT", "STR_GT", "STR_LE", "STR_GE", "STR_EQ", "STR_NE" + "STR_LT", "STR_GT", "STR_LE", "STR_GE", "STR_EQ", "STR_NE", + "IS" }; void dump(int level, const Array& ops) { @@ -317,6 +318,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 +332,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? @@ -568,6 +570,13 @@ void Request::execute(const Array& ops) PUSH(value); break; } + case OP_IS: + { + Value *b=POP(); Value *a=POP(); + Value *value=NEW VBool(pool(), b->as_string() == a->type()); + PUSH(value); + break; + } default: THROW(0,0,