--- parser3/src/include/pa_exception.h 2024/12/11 00:37:04 1.73 +++ parser3/src/include/pa_exception.h 2026/10/18 22:42:42 1.78 @@ -1,14 +1,14 @@ /** @file Parser: exception decls. - Copyright (c) 2001-2024 Art. Lebedev Studio (http://www.artlebedev.com) + Copyright (c) 2001-2026 Art. Lebedev Studio (https://www.artlebedev.com) Authors: Konstantin Morshnev , Alexandr Petrosian */ #ifndef PA_EXCEPTION_H #define PA_EXCEPTION_H -#define IDENT_PA_EXCEPTION_H "$Id: pa_exception.h,v 1.73 2024/12/11 00:37:04 moko Exp $" +#define IDENT_PA_EXCEPTION_H "$Id: pa_exception.h,v 1.78 2026/10/18 22:42:42 moko Exp $" const char* const PARSER_RUNTIME = "parser.runtime"; const char* const IMAGE_FORMAT = "image.format"; @@ -25,10 +25,9 @@ const char* const PARAMETER_MUST_BE_STRI const char* const COLUMN_NAME_MUST_BE_STRING = "column name must be string"; const char* const FILE_NAME_MUST_BE_SPECIFIED = "file name must be specified"; -const char* const FIRST_ARG_MUST_NOT_BE_CODE = "first argument must not be code"; const char* const PARAM_MUST_NOT_BE_CODE = "param must not be code"; const char* const PARAM_MUST_BE_HASH = "param must be hash"; -const char* const MODE_MUST_NOT_BE_CODE = "mode must not be code"; +const char* const MODE_MUST_BE_STRING = "mode must be string"; const char* const OPTIONS_MUST_NOT_BE_CODE = "options must not be code"; const char* const CALLED_WITH_INVALID_OPTION = "called with invalid option"; @@ -70,7 +69,7 @@ public: // modifies exception to fine-tune error reporting void set_source(const String* aproblem_source) { if(!problem_source()) - fproblem_source=aproblem_source; + fproblem_source=pa_gc_reference(aproblem_source); } void add_comment(const char* acomment); @@ -99,4 +98,10 @@ protected: }; +// recovery recursion reserve is exhausted: bypass catch/finally handlers +class Recursion_limit_exception: public Exception { +public: + Recursion_limit_exception(): Exception(PARSER_RUNTIME, 0, "call canceled - endless recursion recovery limit exceeded") {} +}; + #endif