32#ifndef _QORE_EXCEPTIONSINK_H 
   34#define _QORE_EXCEPTIONSINK_H 
   45hashdecl QoreProgramLocation;
 
   47class AbstractStatement;
 
   51    friend hashdecl qore_es_private;
 
   83    DLLEXPORT 
operator bool () 
const;
 
  262    DLLLOCAL QoreException* catchException();
 
  263    DLLLOCAL QoreException* getException();
 
  264    DLLLOCAL 
void overrideLocation(
const QoreProgramLocation& loc);
 
  265    DLLLOCAL 
void rethrow(QoreException* old);
 
  267    DLLLOCAL 
static void defaultExceptionHandler(QoreException* e);
 
  268    DLLLOCAL 
static void defaultWarningHandler(QoreException* e);
 
  270    DLLLOCAL 
static void outputExceptionLocation(
const char* fns, 
int start_line, 
int end_line, 
const char* srcs,
 
  271        int offset, 
const char* langs, 
const char* types);
 
  275    hashdecl qore_es_private* priv;
 
  282enum qore_call_t : 
signed char {
 
  307        const char* 
code, 
const char* 
lang = 
"Qore") :
 
  319        const char* 
lang = 
"Qore") :
 
  329typedef std::vector<QoreCallStackElement> callstack_vec_t;
 
  336    DLLEXPORT 
void add(qore_call_t type, 
const char* label, 
int start, 
int end, 
const char* code,
 
  337        const char* lang = 
"Qore");
 
  340    DLLEXPORT 
void add(qore_call_t type, 
const char* label, 
int start, 
int end, 
const char* source,
 
  341        unsigned offset, 
const char* code, 
const char* lang = 
"Qore");
 
  344static inline void alreadyDeleted(
ExceptionSink *xsink, 
const char *cmeth) {
 
  345    xsink->
raiseException(
"OBJECT-ALREADY-DELETED", 
"the method %s() cannot be executed because the object has already been deleted", cmeth);
 
  348static inline void makeAccessDeletedObjectException(
ExceptionSink *xsink, 
const char *mem, 
const char *cname) {
 
  349    xsink->
raiseException(
"OBJECT-ALREADY-DELETED", 
"attempt to access member '%s' of an already-deleted object of class '%s'", mem, cname);
 
  352static inline void makeAccessDeletedObjectException(
ExceptionSink *xsink, 
const char *cname) {
 
  353    xsink->
raiseException(
"OBJECT-ALREADY-DELETED", 
"attempt to access an already-deleted object of class '%s'", cname);
 
  370        const char* source = 
nullptr, 
int offset = 0, 
const char* lang = 
nullptr);
 
  376    DLLEXPORT 
void set(
const char* file, 
int start_line, 
int end_line,
 
  377        const char* source = 
nullptr, 
int offset = 0, 
const char* lang = 
nullptr);
 
  380    DLLLOCAL 
const QoreProgramLocation& 
get()
 const {
 
  407    std::string file_str;
 
  408    std::string source_str;
 
  409    std::string lang_str;
 
  412    QoreProgramLocation* loc;
 
  468    DLLLOCAL 
virtual const QoreProgramLocation& 
getLocation() 
const = 0;
 
  478    friend class qore_external_runtime_stack_location_helper_priv;
 
  505    class qore_external_stack_location_priv* priv;
 
  532    class qore_external_runtime_stack_location_helper_priv* priv;
 
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:57
 
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:50
 
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
 
DLLEXPORT const QoreValue getExceptionErr()
returns the error of the top exception
 
DLLEXPORT void assimilate(ExceptionSink &xs)
assimilates all entries of the "xs" argument by appending them to the internal list and clears the "x...
 
DLLEXPORT void raiseThreadExit()
sets the "thread_exit" flag; will cause the current thread to terminate
 
DLLEXPORT const QoreValue getExceptionArg()
returns the argument of the top exception
 
DLLEXPORT AbstractQoreNode * raiseException(QoreStringNode *err, QoreStringNode *desc)
appends a Qore-language exception to the list; takes owenership of the "desc" argument reference
 
DLLEXPORT const QoreValue getExceptionDesc()
returns the description 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
 
DLLEXPORT AbstractQoreNode * raiseException(QoreStringNode *err, QoreStringNode *desc, QoreValue arg)
appends a Qore-language exception to the list; takes owenership of the "desc" argument reference
 
DLLEXPORT AbstractQoreNode * raiseExceptionArg(const QoreProgramLocation &loc, const char *err, QoreValue arg, QoreStringNode *desc, const QoreCallStack &stack)
appends a Qore-language exception to the list, and sets the 'arg' member (this object takes over the ...
 
DLLEXPORT void outOfMemory()
intended to be used to handle out of memory errors
 
DLLEXPORT int renamePrependLastException(const char *err, const char *desc_fmt,...)
 
DLLEXPORT void handleWarnings()
calls ExceptionSink::defaultWarningHandler() on all exceptions still present in the object and then d...
 
DLLEXPORT void raiseException(const QoreProgramLocation &loc, const char *err, QoreValue arg, QoreValue desc)
appends a Qore-language exception to the list; takes owenership of the "desc" argument reference
 
DLLEXPORT AbstractQoreNode * raiseException(const char *err, const char *fmt,...)
appends a Qore-language exception to the list
 
DLLEXPORT AbstractQoreNode * raiseExceptionArg(const char *err, QoreValue arg, QoreStringNode *desc, const QoreCallStack &stack)
appends a Qore-language exception to the list, and sets the 'arg' member (this object takes over the ...
 
DLLEXPORT void handleExceptions()
calls ExceptionSink::defaultExceptionHandler() on all exceptions still present in the object and then...
 
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 void clear()
deletes the exception list immediately
 
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 ...
 
DLLEXPORT void raiseException(const QoreProgramLocation &loc, const char *err, QoreValue arg, const char *fmt,...)
appends a Qore-language exception to the list; takes owenership of the "desc" argument reference
 
DLLEXPORT AbstractQoreNode * raiseException(const char *err, QoreStringNode *desc)
appends a Qore-language exception to the list; takes owenership of the "desc" argument reference
 
DLLEXPORT ~ExceptionSink()
calls ExceptionSink::defaultExceptionHandler() on all exceptions still present in the object and then...
 
DLLEXPORT AbstractQoreNode * raiseExceptionArg(const char *err, QoreValue arg, QoreStringNode *desc)
appends a Qore-language exception to the list, and sets the 'arg' member (this object takes over the ...
 
DLLEXPORT ExceptionSink()
creates an empty ExceptionSink object
 
DLLEXPORT bool isThreadExit() const
returns true if thread_exit has been triggered
 
DLLEXPORT AbstractQoreNode * raiseErrnoException(const char *err, int en, QoreStringNode *desc)
appends a Qore-language exception to the list and appends the result of strerror(errno) to the descri...
 
DLLEXPORT AbstractQoreNode * raiseExceptionArg(const QoreProgramLocation &loc, const char *err, QoreValue arg, QoreStringNode *desc)
appends a Qore-language exception to the list, and sets the 'arg' member (this object takes over the ...
 
DLLEXPORT bool isException() const
returns true if at least one exception is present
 
returns a custom Qore program location for external modules to generate runtime exceptions with the s...
Definition: ExceptionSink.h:357
 
DLLEXPORT QoreExternalProgramLocationWrapper(QoreExternalProgramLocationWrapper &&)
move ctor
 
DLLLOCAL const QoreProgramLocation & get() const
returns the source location
Definition: ExceptionSink.h:380
 
DLLEXPORT int getEndLine() const
returns the start line
 
DLLEXPORT QoreExternalProgramLocationWrapper(const QoreExternalProgramLocationWrapper &)
copy ctor
 
DLLEXPORT QoreExternalProgramLocationWrapper()
empty constructor; use set() to set the location
 
DLLEXPORT QoreExternalProgramLocationWrapper(const char *file, int start_line, int end_line, const char *source=nullptr, int offset=0, const char *lang=nullptr)
constructor setting the source location
 
DLLEXPORT void set(const char *file, int start_line, int end_line, const char *source=nullptr, int offset=0, const char *lang=nullptr)
sets the program source location
 
DLLLOCAL const std::string & getLanguage() const
returns the language
Definition: ExceptionSink.h:395
 
DLLLOCAL const std::string & getFile() const
returns the file name
Definition: ExceptionSink.h:385
 
DLLLOCAL const std::string & getSource() const
returns the source
Definition: ExceptionSink.h:390
 
DLLEXPORT ~QoreExternalProgramLocationWrapper()
destructor; frees memory
 
DLLEXPORT int getStartLine() const
returns the start line
 
Sets the stack location for external modules providing language support.
Definition: ExceptionSink.h:511
 
DLLEXPORT QoreExternalRuntimeStackLocationHelper(const QoreExternalRuntimeStackLocationHelper &)
copy ctor
 
DLLLOCAL QoreExternalRuntimeStackLocationHelper & operator=(const QoreExternalRuntimeStackLocationHelper &)=delete
no assignment operator
 
DLLEXPORT QoreExternalRuntimeStackLocationHelper()
Sets the current runtime location.
 
DLLLOCAL QoreExternalRuntimeStackLocationHelper & operator=(QoreExternalRuntimeStackLocationHelper &&)=delete
no move assignment operator
 
DLLEXPORT ~QoreExternalRuntimeStackLocationHelper()
Restores the old runtime location.
 
DLLEXPORT QoreExternalRuntimeStackLocationHelper(QoreExternalRuntimeStackLocationHelper &&)
move ctor
 
Stack location element abstract class for external binary modules.
Definition: ExceptionSink.h:477
 
DLLLOCAL QoreExternalStackLocation & operator=(const QoreExternalStackLocation &)=delete
no assignment operator
 
virtual DLLEXPORT ~QoreExternalStackLocation()
destroys the object
 
virtual DLLEXPORT QoreProgram * getProgram() const
returns the QoreProgram container
 
DLLEXPORT QoreExternalStackLocation()
create the object
 
virtual DLLEXPORT const AbstractStatement * getStatement() const
returns the statement for the call for internal Qore code
 
DLLEXPORT QoreExternalStackLocation(QoreExternalStackLocation &&)
move ctor
 
DLLEXPORT QoreExternalStackLocation(const QoreExternalStackLocation &)
copy ctor
 
DLLLOCAL QoreExternalStackLocation & operator=(QoreExternalStackLocation &&)=delete
no move assignment operator
 
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:52
 
supports parsing and executing Qore-language code, reference counted, dynamically-allocated only
Definition: QoreProgram.h:128
 
Stack location element abstract class.
Definition: ExceptionSink.h:418
 
DLLLOCAL QoreStackLocation & operator=(QoreStackLocation &&)=default
default move assignment operator
 
virtual DLLLOCAL const QoreProgramLocation & getLocation() const =0
returns the source location of the element
 
DLLLOCAL QoreStackLocation & operator=(const QoreStackLocation &)=default
default assignment operator
 
virtual DLLLOCAL const std::string & getCallName() const =0
returns the name of the function or method call
 
virtual DLLLOCAL ~QoreStackLocation()=default
virtual destructor
 
virtual DLLLOCAL QoreProgram * getProgram() const =0
returns the QoreProgram container
 
DLLLOCAL void setNext(const QoreStackLocation *next)
called when pushed on the stack to set the next location
Definition: ExceptionSink.h:446
 
virtual DLLLOCAL const QoreStackLocation * getNext() const
returns the next location in the stack or nullptr if there is none
Definition: ExceptionSink.h:451
 
virtual DLLLOCAL const AbstractStatement * getStatement() const =0
returns the statement for the call for internal Qore code
 
DLLLOCAL QoreStackLocation(const QoreStackLocation &)=default
copy ctor
 
DLLLOCAL QoreStackLocation(QoreStackLocation &&)=default
move ctor
 
DLLLOCAL QoreStackLocation()
constructor
 
virtual DLLLOCAL qore_call_t getCallType() const =0
returns the call type
 
Qore's string value type, reference counted, dynamically-allocated only.
Definition: QoreStringNode.h:50
 
class for C++ exception based on an ExceptionSink object
Definition: QoreXSinkException.h:51
 
call stack element; strings must be in the default encoding for the Qore process
Definition: ExceptionSink.h:315
 
qore_call_t type
the call stack element type
Definition: ExceptionSink.h:316
 
Qore call stack.
Definition: ExceptionSink.h:334
 
DLLEXPORT void add(qore_call_t type, const char *label, int start, int end, const char *source, unsigned offset, const char *code, const char *lang="Qore")
add an element to the end of the stack trace
 
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
 
Qore source location; strings must be in the default encoding for the Qore process.
Definition: ExceptionSink.h:293
 
unsigned offset
offset in source file (only used if source is not empty)
Definition: ExceptionSink.h:298
 
std::string label
the code label name (source file if source not present)
Definition: ExceptionSink.h:294
 
int end_line
the end line
Definition: ExceptionSink.h:296
 
int start_line
the start line
Definition: ExceptionSink.h:295
 
std::string code
the function or method call name; method calls in format class::name
Definition: ExceptionSink.h:299
 
std::string source
optional additional source file
Definition: ExceptionSink.h:297
 
std::string lang
the source language
Definition: ExceptionSink.h:300
 
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:276