32 #ifndef _QORE_EXCEPTIONSINK_H 34 #define _QORE_EXCEPTIONSINK_H 44 struct QoreProgramLocation;
49 friend struct qore_es_private;
54 struct qore_es_private* priv;
91 DLLEXPORT
operator bool ()
const;
226 DLLEXPORT
void raiseException(
const QoreProgramLocation& loc,
const char* err,
QoreValue arg,
const char* fmt, ...);
243 DLLEXPORT
void clear();
263 DLLLOCAL QoreException* catchException();
264 DLLLOCAL QoreException* getException();
265 DLLLOCAL
void overrideLocation(
const QoreProgramLocation& loc);
266 DLLLOCAL
void rethrow(QoreException* old);
268 DLLLOCAL
static void defaultExceptionHandler(QoreException* e);
269 DLLLOCAL
static void defaultWarningHandler(QoreException* e);
271 DLLLOCAL
static void outputExceptionLocation(
const char* fns,
int start_line,
int end_line,
const char* srcs,
272 int offset,
const char* langs,
const char* types);
276 enum qore_call_t :
signed char {
301 const char*
code,
const char*
lang =
"Qore") :
313 const char*
lang =
"Qore") :
323 typedef std::vector<QoreCallStackElement> callstack_vec_t;
330 DLLEXPORT
void add(qore_call_t type,
const char* label,
int start,
int end,
const char* code,
331 const char* lang =
"Qore");
334 DLLEXPORT
void add(qore_call_t type,
const char* label,
int start,
int end,
const char* source,
335 unsigned offset,
const char* code,
const char* lang =
"Qore");
338 static inline void alreadyDeleted(
ExceptionSink *xsink,
const char *cmeth) {
339 xsink->
raiseException(
"OBJECT-ALREADY-DELETED",
"the method %s() cannot be executed because the object has already been deleted", cmeth);
342 static inline void makeAccessDeletedObjectException(
ExceptionSink *xsink,
const char *mem,
const char *cname) {
343 xsink->
raiseException(
"OBJECT-ALREADY-DELETED",
"attempt to access member '%s' of an already-deleted object of class '%s'", mem, cname);
346 static inline void makeAccessDeletedObjectException(
ExceptionSink *xsink,
const char *cname) {
347 xsink->
raiseException(
"OBJECT-ALREADY-DELETED",
"attempt to access an already-deleted object of class '%s'", cname);
364 const char* source =
nullptr,
int offset = 0,
const char* lang =
nullptr);
370 DLLEXPORT
void set(
const char* file,
int start_line,
int end_line,
371 const char* source =
nullptr,
int offset = 0,
const char* lang =
nullptr);
374 DLLLOCAL
const QoreProgramLocation&
get()
const {
401 std::string file_str;
402 std::string source_str;
403 std::string lang_str;
406 QoreProgramLocation* loc;
453 DLLLOCAL
virtual const AbstractStatement*
getStatement()
const = 0;
456 DLLLOCAL
virtual const std::string&
getCallName()
const = 0;
459 DLLLOCAL
virtual qore_call_t
getCallType()
const = 0;
462 DLLLOCAL
virtual const QoreProgramLocation&
getLocation()
const = 0;
472 friend class qore_external_runtime_stack_location_helper_priv;
496 DLLEXPORT
virtual const AbstractStatement*
getStatement()
const;
499 class qore_external_stack_location_priv* priv;
526 class qore_external_runtime_stack_location_helper_priv* priv;
DLLEXPORT void handleWarnings()
calls ExceptionSink::defaultWarningHandler() on all exceptions still present in the object and then d...
unsigned offset
offset in source file (only used if source is not empty)
Definition: ExceptionSink.h:292
DLLEXPORT void outOfMemory()
intended to be used to handle out of memory errors
DLLEXPORT const QoreValue getExceptionArg()
returns the argument of the top exception
DLLLOCAL QoreExternalStackLocation & operator=(const QoreExternalStackLocation &)=delete
no assignment operator
DLLEXPORT ~ExceptionSink()
calls ExceptionSink::defaultExceptionHandler() on all exceptions still present in the object and then...
DLLEXPORT void handleExceptions()
calls ExceptionSink::defaultExceptionHandler() on all exceptions still present in the object and then...
returns a custom Qore program location for external modules to generate runtime exceptions with the s...
Definition: ExceptionSink.h:351
virtual DLLLOCAL const QoreStackLocation * getNext() const
returns the next location in the stack or nullptr if there is none
Definition: ExceptionSink.h:445
DLLLOCAL QoreStackLocation & operator=(const QoreStackLocation &)=default
default assignment operator
Stack location element abstract class.
Definition: ExceptionSink.h:412
std::string lang
the source language
Definition: ExceptionSink.h:294
DLLEXPORT AbstractQoreNode * raiseExceptionArg(const char *err, QoreValue arg, const char *fmt,...)
appends a Qore-language exception to the list, and sets the 'arg' member (this object takes over the ...
Stack location element abstract class for external binary modules.
Definition: ExceptionSink.h:471
DLLLOCAL const std::string & getFile() const
returns the file name
Definition: ExceptionSink.h:379
virtual DLLLOCAL qore_call_t getCallType() const =0
returns the call type
class for C++ exception based on an ExceptionSink object
Definition: QoreXSinkException.h:51
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:57
DLLLOCAL QoreExternalRuntimeStackLocationHelper & operator=(const QoreExternalRuntimeStackLocationHelper &)=delete
no assignment operator
DLLEXPORT int getStartLine() const
returns the start line
DLLEXPORT int getEndLine() const
returns the start line
std::string label
the code label name (source file if source not present)
Definition: ExceptionSink.h:288
virtual DLLLOCAL ~QoreStackLocation()=default
virtual destructor
DLLEXPORT AbstractQoreNode * raiseException(const char *err, const char *fmt,...)
appends a Qore-language exception to the list
DLLEXPORT AbstractQoreNode * raiseErrnoException(const char *err, int en, const char *fmt,...)
appends a Qore-language exception to the list and appends the result of strerror(errno) to the descri...
DLLEXPORT const QoreValue getExceptionErr()
returns the error of the top exception
DLLEXPORT int appendLastDescription(const char *fmt,...)
appends a formatted string to the top exception description if the desc value is a string ...
Qore's string value type, reference counted, dynamically-allocated only.
Definition: QoreStringNode.h:50
virtual DLLLOCAL const std::string & getCallName() const =0
returns the name of the function or method call
DLLLOCAL const std::string & getSource() const
returns the source
Definition: ExceptionSink.h:384
virtual DLLLOCAL QoreProgram * getProgram() const =0
returns the QoreProgram container
DLLEXPORT QoreExternalStackLocation()
create the object
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:52
std::string code
the function or method call name; method calls in format class::name
Definition: ExceptionSink.h:293
virtual DLLEXPORT ~QoreExternalStackLocation()
destroys the object
DLLEXPORT ~QoreExternalRuntimeStackLocationHelper()
Restores the old runtime location.
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:267
supports parsing and executing Qore-language code, reference counted, dynamically-allocated only ...
Definition: QoreProgram.h:127
DLLEXPORT void clear()
deletes the exception list immediately
DLLLOCAL QoreStackLocation()
constructor
DLLEXPORT QoreExternalProgramLocationWrapper()
empty constructor; use set() to set the location
int start_line
the start line
Definition: ExceptionSink.h:289
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:48
Sets the stack location for external modules providing language support.
Definition: ExceptionSink.h:505
virtual DLLLOCAL const QoreProgramLocation & getLocation() const =0
returns the source location of the element
qore_call_t type
the call stack element type
Definition: ExceptionSink.h:310
DLLEXPORT void add(qore_call_t type, const char *label, int start, int end, const char *code, const char *lang="Qore")
add an element to the end of the stack trace
virtual DLLLOCAL const AbstractStatement * getStatement() const =0
returns the statement for the call for internal Qore code
int end_line
the end line
Definition: ExceptionSink.h:289
virtual DLLEXPORT const AbstractStatement * getStatement() const
returns the statement for the call for internal Qore code
DLLEXPORT bool isThreadExit() const
returns true if thread_exit has been triggered
DLLLOCAL const std::string & getLanguage() const
returns the language
Definition: ExceptionSink.h:389
DLLEXPORT void raiseThreadExit()
sets the "thread_exit" flag; will cause the current thread to terminate
DLLEXPORT const QoreValue getExceptionDesc()
returns the description of the top exception
DLLEXPORT ExceptionSink()
creates an empty ExceptionSink object
Qore source location; strings must be in the default encoding for the Qore process.
Definition: ExceptionSink.h:287
virtual DLLEXPORT QoreProgram * getProgram() const
returns the QoreProgram container
std::string source
optional additional source file
Definition: ExceptionSink.h:291
DLLLOCAL void setNext(const QoreStackLocation *next)
called when pushed on the stack to set the next location
Definition: ExceptionSink.h:440
DLLEXPORT QoreExternalRuntimeStackLocationHelper()
Sets the current runtime location.
DLLEXPORT bool isException() const
returns true if at least one exception is present
DLLEXPORT ~QoreExternalProgramLocationWrapper()
destructor; frees memory
Qore call stack.
Definition: ExceptionSink.h:328
DLLEXPORT void assimilate(ExceptionSink *xs)
assimilates all entries of the "xs" argument by appending them to the internal list and deletes the "...
DLLEXPORT bool isEvent() const
returns true if at least one exception is present or thread_exit has been triggered ...
call stack element; strings must be in the default encoding for the Qore process
Definition: ExceptionSink.h:309