--- parser3/src/main/execute.C 2003/01/21 15:51:13 1.295 +++ parser3/src/main/execute.C 2003/01/31 12:34:35 1.295.2.4 @@ -1,11 +1,11 @@ /** @file Parser: executor part of request class. - Copyright (c) 2001, 2003 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_EXECUTE_C="$Date: 2003/01/21 15:51:13 $"; +static const char* IDENT_EXECUTE_C="$Date: 2003/01/31 12:34:35 $"; #include "pa_opcode.h" #include "pa_array.h" @@ -62,13 +62,13 @@ char *opcode_name[]={ "IS" }; -void va_debug_printf(Pool& pool, const char *fmt,va_list args) { +void va_debug_printf(Pool& pool, const char* fmt,va_list args) { char buf[MAX_STRING]; vsnprintf(buf, MAX_STRING, fmt, args); SAPI::log(pool, "%s", buf); } -void debug_printf(Pool& pool, const char *fmt, ...) { +void debug_printf(Pool& pool, const char* fmt, ...) { va_list args; va_start(args,fmt); va_debug_printf(pool,fmt,args); @@ -112,6 +112,14 @@ void debug_dump(Pool& pool, int level, c #define POP_NAME() static_cast(stack.pop())->as_string() #define POP_CODE() static_cast(stack.pop()) +// ArrayOperation + +ArrayOperation::~ArrayOperation() { + // go through code, and recoursively delete [free] array/value pointers +} + +// Request + void Request::execute(const Array& ops) { // _asm int 3; #ifdef DEBUG_EXECUTE @@ -125,7 +133,7 @@ void Request::execute(const Array& ops) while(i.has_next()) { if(interrupted()) throw Exception("parser.interrupted", - 0, + Exception::undefined_source, "execution stopped"); Operation op; @@ -432,7 +440,7 @@ void Request::execute(const Array& ops) if(frame.junction.method->call_type!=Method::CT_STATIC) { // this is a constructor call - if(Value *value=called_class->create_new_value(pool())) { + if(ValuePtr value=called_class->create_new_value()) { // some stateless_class creatable derivates new_self=value; } else @@ -543,7 +551,7 @@ void Request::execute(const Array& ops) { /// @test String::cmp Value *operand=POP(); - const char *path=operand->as_string().cstr(); + const char* path=operand->as_string().cstr(); value=NEW VBool(pool(), info.uri && strncmp(path, info.uri, strlen(path))==0); PUSH(value);