--- parser3/src/main/execute.C 2024/10/02 21:24:41 1.423 +++ parser3/src/main/execute.C 2025/10/04 15:50:49 1.427 @@ -1,7 +1,7 @@ /** @file Parser: executor part of request class. - Copyright (c) 2001-2023 Art. Lebedev Studio (http://www.artlebedev.com) + Copyright (c) 2001-2024 Art. Lebedev Studio (http://www.artlebedev.com) Authors: Konstantin Morshnev , Alexandr Petrosian */ @@ -22,7 +22,7 @@ #include "pa_varray.h" #include "pa_wwrapper.h" -volatile const char * IDENT_EXECUTE_C="$Id: execute.C,v 1.423 2024/10/02 21:24:41 moko Exp $" IDENT_PA_OPCODE_H IDENT_PA_OPERATION_H IDENT_PA_VCODE_FRAME_H IDENT_PA_WWRAPPER_H; +volatile const char * IDENT_EXECUTE_C="$Id: execute.C,v 1.427 2025/10/04 15:50:49 moko Exp $" IDENT_PA_OPCODE_H IDENT_PA_OPERATION_H IDENT_PA_VCODE_FRAME_H IDENT_PA_WWRAPPER_H; //#define DEBUG_EXECUTE @@ -442,7 +442,7 @@ void Request::execute(ArrayOperation& op const String& name=stack.pop().string(); debug_name=&name; Value& ncontext=stack.pop().value(); - if(const VJunction* vjunction=ncontext.put_element(name, &value)) + if(ncontext.put_element(name, &value)) throw Exception(PARSER_RUNTIME, 0, "property value cannot be code, use [] or () brackets"); break; @@ -516,8 +516,7 @@ void Request::execute(ArrayOperation& op DEBUG_PRINT_STRING(name) if(Method* method=main_class.get_method(name)){ // looking operator of that name FIRST - if(!method->junction_template) method->junction_template=new VJunction(main_class, method); - stack.push(*method->junction_template); + stack.push(*method->get_vjunction(main_class)); break; } Value& value=get_element(*rcontext, name); @@ -530,8 +529,7 @@ void Request::execute(ArrayOperation& op const String& name=stack.pop().string(); debug_name=&name; Value& ncontext=stack.pop().value(); if(Method* method=main_class.get_method(name)){ // looking operator of that name FIRST - if(!method->junction_template) method->junction_template=new VJunction(main_class, method); - stack.push(*method->junction_template); + stack.push(*method->get_vjunction(main_class)); break; } Value& value=get_element(ncontext, name); @@ -877,9 +875,10 @@ void Request::execute(ArrayOperation& op DEBUG_PRINT_STRING(constructor_name) + // not get_element4call for better error reporting Junction* constructor_junction=get_element(vclass, constructor_name).get_junction(); if(!constructor_junction) - throw Exception(PARSER_RUNTIME, &constructor_name, "constructor must be declared in class '%s'", vclass.type()); + throw Exception(PARSER_RUNTIME, &constructor_name, "%s constructor not found", vclass.type()); ArrayOperation* local_ops=i.next().ops; DEBUG_PRINT_OPS(local_ops)