--- parser3/src/include/pa_exception.h 2024/12/11 03:22:23 1.75 +++ 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.75 2024/12/11 03:22:23 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"; @@ -69,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); @@ -98,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