34 #ifndef _QORE_QOREPROGRAM_H 36 #define _QORE_QOREPROGRAM_H 38 #include <qore/AbstractPrivateData.h> 44 #define QP_WARN_NONE 0 45 #define QP_WARN_WARNING_MASK_UNCHANGED (1 << 0) 46 #define QP_WARN_DUPLICATE_LOCAL_VARS (1 << 1) 47 #define QP_WARN_UNKNOWN_WARNING (1 << 2) 48 #define QP_WARN_UNDECLARED_VAR (1 << 3) 49 #define QP_WARN_DUPLICATE_GLOBAL_VARS (1 << 4) 50 #define QP_WARN_UNREACHABLE_CODE (1 << 5) 51 #define QP_WARN_NONEXISTENT_METHOD_CALL (1 << 6) 52 #define QP_WARN_INVALID_OPERATION (1 << 7) 53 #define QP_WARN_CALL_WITH_TYPE_ERRORS (1 << 8) 54 #define QP_WARN_RETURN_VALUE_IGNORED (1 << 9) 55 #define QP_WARN_DEPRECATED (1 << 10) 56 #define QP_WARN_EXCESS_ARGS (1 << 11) 57 #define QP_WARN_DUPLICATE_HASH_KEY (1 << 12) 58 #define QP_WARN_UNREFERENCED_VARIABLE (1 << 13) 59 #define QP_WARN_DUPLICATE_BLOCK_VARS (1 << 14) 60 #define QP_WARN_MODULE_ONLY (1 << 15) 61 #define QP_WARN_BROKEN_LOGIC_PRECEDENCE (1 << 16) 62 #define QP_WARN_ALL -1 64 #define QP_WARN_MODULES (QP_WARN_UNREACHABLE_CODE|QP_WARN_NONEXISTENT_METHOD_CALL|QP_WARN_INVALID_OPERATION|QP_WARN_CALL_WITH_TYPE_ERRORS|QP_WARN_RETURN_VALUE_IGNORED|QP_WARN_DUPLICATE_HASH_KEY|QP_WARN_DUPLICATE_BLOCK_VARS|QP_WARN_BROKEN_LOGIC_PRECEDENCE) 66 #define QP_WARN_DEFAULT (QP_WARN_UNKNOWN_WARNING|QP_WARN_MODULES|QP_WARN_DEPRECATED) 68 enum BreakpointPolicy :
unsigned char {
75 DLLEXPORT
extern const char** qore_warnings;
78 DLLEXPORT
extern unsigned qore_num_warnings;
81 DLLEXPORT
int get_warning_code(
const char* str);
92 class FunctionCallNode;
93 class AbstractStatement;
94 class UnresolvedProgramCallReferenceNode;
97 class UserFunctionVariant;
98 class QoreParseTypeInfo;
100 class AbstractQoreZoneInfo;
101 class qore_program_private;
104 class AbstractQoreFunctionVariant;
107 typedef std::list<QoreBreakpoint*> QoreBreakpointList_t;
118 friend class qore_program_private_base;
119 friend class qore_program_private;
120 friend class qore_debug_program_private;
121 friend struct ThreadLocalProgramData;
124 qore_program_private* priv;
130 DLLLOCAL QoreProgram& operator=(
const QoreProgram&);
200 DLLEXPORT
void parseAndRun(FILE *fp,
const char* name);
212 DLLEXPORT
void parseAndRun(
const char* str,
const char* name);
249 DLLEXPORT
void parseAndRunClass(FILE *fp,
const char* name,
const char* classname);
262 DLLEXPORT
void parseAndRunClass(
const char* str,
const char* name,
const char* classname);
321 DLLEXPORT
void parse(
const char* str,
const char* lstr,
ExceptionSink* xsink,
ExceptionSink* warn_sink,
int warn_mask,
const char* source,
int offset);
577 DLLEXPORT
const AbstractQoreZoneInfo *
currentTZ()
const;
580 DLLEXPORT
void setTZ(
const AbstractQoreZoneInfo *n_TZ);
613 DLLEXPORT
void parseDefine(
const char* str,
const char* val);
616 DLLEXPORT
void parseCmdLineDefines(
const std::map<std::string, std::string> defmap,
ExceptionSink& xs,
ExceptionSink& ws,
int w);
624 DLLEXPORT
void parseCmdLineDefines(
ExceptionSink& xs,
ExceptionSink& ws,
int w,
const std::map<std::string, std::string>& defmap);
692 DLLLOCAL
QoreProgram(QoreProgram* pgm,
int64 po,
bool ec =
false,
const char* ecn = 0);
694 DLLLOCAL LocalVar *createLocalVar(
const char* name,
const QoreTypeInfo *typeInfo);
700 DLLLOCAL
void depRef();
701 DLLLOCAL
void depDeref();
702 DLLLOCAL
void addFile(
char* f);
704 DLLLOCAL
void parseSetIncludePath(
const char* path);
705 DLLLOCAL
const char* parseGetIncludePath()
const;
712 DLLLOCAL
const LVList* getTopLevelLVList()
const;
720 DLLLOCAL
bool parseExceptionRaised()
const;
750 DLLEXPORT AbstractStatement*
findStatement(
const char* fileName,
int line)
const;
762 DLLEXPORT
unsigned long getStatementId(
const AbstractStatement* statement)
const;
824 DLLEXPORT ~QoreProgramHelper();
842 DLLEXPORT ~CurrentProgramRuntimeExternalParseContextHelper();
845 DLLEXPORT
operator bool()
const;
851 CurrentProgramRuntimeExternalParseContextHelper(
const CurrentProgramRuntimeExternalParseContextHelper&) =
delete;
852 void*
operator new(size_t) =
delete;
863 DLLEXPORT ~QoreProgramContextHelper();
869 QoreProgramContextHelper(
const QoreProgramContextHelper&) =
delete;
870 void*
operator new(size_t) =
delete;
895 virtual void doDeref() = 0;
898 typedef std::list<QoreBreakpoint*> QoreBreakpointList_t;
899 typedef std::list<AbstractStatement*> AbstractStatementList_t;
900 typedef std::list<int> TidList_t;
909 qore_program_private* pgm;
910 AbstractStatementList_t statementList;
911 typedef std::map<
int,
int> TidMap_t;
914 typedef std::list<QoreBreakpoint*> QoreBreakpointList_t;
916 static QoreBreakpointList_t breakpointList;
917 static volatile unsigned breakpointIdCounter;
918 unsigned breakpointId;
920 DLLLOCAL
void unassignAllStatements();
921 DLLLOCAL
bool isStatementAssigned(
const AbstractStatement *statement)
const;
924 friend class qore_program_private;
925 friend class AbstractStatement;
929 DLLLOCAL
virtual bool checkBreak()
const;
954 DLLEXPORT
void assignStatement(AbstractStatement* statement,
ExceptionSink* xsink);
958 DLLEXPORT
void unassignStatement(AbstractStatement* statement,
ExceptionSink* xsink);
962 DLLEXPORT
void getStatements(AbstractStatementList_t &statList,
ExceptionSink* xsink);
974 DLLEXPORT
void getThreadIds(TidList_t &tidList,
ExceptionSink* xsink);
978 DLLEXPORT
void setThreadIds(TidList_t tidList,
ExceptionSink* xsink);
986 DLLEXPORT
void removeThreadId(
int tid,
ExceptionSink* xsink);
1000 DLLEXPORT
unsigned getBreakpointId()
const;
1008 DLLEXPORT
static QoreBreakpoint* resolveBreakpointId(
unsigned breakpointId);
1010 DLLEXPORT
void setQoreObject(
QoreObject* n_qo);
1016 #endif // _QORE_QOREPROGRAM_H DLLEXPORT void deleteAllBreakpoints()
DLLEXPORT void waitForTermination()
this call blocks until the program's last thread terminates
DLLEXPORT QoreListNode * getThreadList() const
returns a list of threads active in this Program object
DLLEXPORT void parseDefine(const char *str, AbstractQoreNode *val)
defines a parse-time variable; call only at parse time (or before parsing)
DLLEXPORT void lockOptions()
locks parse options so they may not be changed
DLLEXPORT int getWarningMask() const
returns the warning mask
DLLEXPORT void unregisterQoreObject(QoreObject *o, ExceptionSink *xsink) const
unregister link to Qore script object
DLLEXPORT void parsePending(const char *code, const char *label, ExceptionSink *xsink, ExceptionSink *warn_sink=0, int warn_mask=QP_WARN_ALL)
parses code from the given string but does not commit changes to the QoreProgram
DLLEXPORT void addFeature(const char *name)
manually add the feature to the program
allows for the parse lock for the current program to be acquired by binary modules ...
Definition: QoreProgram.h:836
This is the hash or associative list container type in Qore, dynamically allocated only...
Definition: QoreHashNode.h:50
DLLEXPORT QoreStringNode * getScriptDir() const
returns the script directory, if known (0 if not)
static DLLEXPORT QoreProgram * resolveProgramId(unsigned programId)
get the program from program id
virtual DLLLOCAL ~QoreProgram()
the destructor is private in order to prohibit the object from being allocated on the stack ...
DLLEXPORT void waitForTerminationAndDeref(ExceptionSink *xsink)
this call blocks until the program's last thread terminates, and then calls QoreProgram::deref() ...
DLLEXPORT void disableParseOptions(int po, ExceptionSink *xsink)
turns off the parse options given in the passed mask and adds Qore-language exception information if ...
the base class for all data to be used as private data of Qore objects
Definition: AbstractPrivateData.h:44
DLLEXPORT void setExecClass(const char *ecn=0)
sets the name of the application class to be executed (instantiated) instead of top-level code ...
DLLEXPORT AbstractQoreNode * runTopLevel(ExceptionSink *xsink)
tuns the top level code and returns any return value
Class implementing breakpoint for debugging.
Definition: QoreProgram.h:907
DLLEXPORT QoreValue getGlobalVariableVal(const char *var, bool &found) const
returns the value of the global variable given (do not include the "$" symbol), the caller owns the r...
DLLEXPORT QoreProgram * programRefSelf() const
references "this" and returns a non-const pointer to itself
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreValueList.h:45
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:54
DLLEXPORT unsigned getProgramId() const
get the program id
DLLEXPORT RootQoreNamespace * getRootNS() const
returns a pointer to the root namespace
contains constants, classes, and subnamespaces in QoreProgram objects
Definition: QoreNamespace.h:63
DLLEXPORT void parseFileAndRun(const char *filename)
parses the given filename and runs the file
allows for external modules to set the current Program context explicitly
Definition: QoreProgram.h:858
BreakpointPolicy policy
Definition: QoreProgram.h:935
base class for call references, reference-counted, dynamically allocated only
Definition: CallReferenceNode.h:39
DLLEXPORT QoreListNode * getFeatureList() const
returns a list of features in the program object
DLLEXPORT AbstractQoreNode * callFunction(const char *name, const QoreListNode *args, ExceptionSink *xsink)
calls a function from the function name and returns the return value
safely manages QoreProgram objects; note the the destructor will block until all background threads i...
Definition: QoreProgram.h:809
DLLEXPORT void parseSetTimeZone(const char *zone)
sets the time zone during parsing
Qore's string type supported by the QoreEncoding class.
Definition: QoreString.h:82
Qore's string value type, reference counted, dynamically-allocated only.
Definition: QoreStringNode.h:50
DLLEXPORT void parseAndRun(FILE *fp, const char *name)
parses the given file and runs the file
DLLEXPORT QoreProgram * getProgram()
returns the current QoreProgram
DLLEXPORT QoreListNode * getUserFunctionList()
returns a list of all user functions in this program
DLLEXPORT int setGlobalVarValue(const char *name, QoreValue val, ExceptionSink *xsink)
sets the value of the given global variable
the root namespace of a QoreProgram object
Definition: QoreNamespace.h:250
DLLEXPORT bool existsFunction(const char *name)
returns true if the given function exists as a user function, false if not
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:52
DLLEXPORT void assignBreakpoint(QoreBreakpoint *bkpt, ExceptionSink *xsink)
DLLEXPORT int getParseOptions() const
returns the parse options currently set for this program; DEPRECATED; use getParseOptions64() instead...
DLLEXPORT int enableWarning(int code)
enables a warning by its code
DLLEXPORT bool checkWarning(int code) const
returns true if the warning code is set
DLLEXPORT QoreObject * findQoreObject() const
find Qore script object related to QoreProgram instance
an abstract class for program-specific external data
Definition: QoreProgram.h:882
virtual DLLLOCAL void deref()
decrements the reference count of the object without the possibility of throwing a Qore-language exce...
Definition: AbstractPrivateData.h:67
DLLEXPORT void parseCommit(ExceptionSink *xsink, ExceptionSink *warn_sink=0, int warn_mask=QP_WARN_ALL)
commits pending changes to the program
DLLEXPORT unsigned long getStatementId(const AbstractStatement *statement) const
get the statement id
DLLEXPORT QoreNamespace * getQoreNS() const
returns a pointer to the "Qore" namespace
DLLEXPORT int setWarningMask(int wm)
sets the warning mask
DLLEXPORT void setExternalData(const char *owner, AbstractQoreProgramExternalData *pud)
sets a pointer to external data in the Program
DLLEXPORT void setScriptPath(const char *path)
sets the script path
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:112
supports parsing and executing Qore-language code, reference counted, dynamically-allocated only ...
Definition: QoreProgram.h:117
DLLEXPORT void parseRollback()
rolls back changes to the program object that were added with QoreProgram::parsePending() ...
DLLEXPORT void parse(FILE *fp, const char *name, ExceptionSink *xsink, ExceptionSink *warn_sink=0, int warn_mask=QP_WARN_ALL)
parses code from the file given and commits changes to the QoreProgram
DLLEXPORT void parseAndRunClass(FILE *fp, const char *name, const char *classname)
parses the given file and runs the code by instantiating the class given
static DLLEXPORT QoreObject * getQoreObject(QoreProgram *pgm)
get QoreObject of QoreProgram
the implementation of Qore's object data type, reference counted, dynamically-allocated only ...
Definition: QoreObject.h:62
DLLLOCAL const char * parseGetScriptDir() const
returns the script directory, if known (0 if not), does not grab the parse lock, only to be called wh...
DLLEXPORT const AbstractQoreFunctionVariant * runtimeFindCall(const char *name, const QoreValueList *params, ExceptionSink *xsink) const
DLLEXPORT void setParseOptions(int po, ExceptionSink *xsink)
sets the parse options and adds Qore-language exception information if an error occurs ...
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:47
DLLEXPORT QoreStringNode * getScriptPath() const
returns the script path (directory and name), if known (0 if not)
DLLEXPORT AbstractStatement * findStatement(const char *fileName, int line) const
DLLEXPORT void runClass(const char *classname, ExceptionSink *xsink)
instantiates the class given and runs its constructor
DLLEXPORT QoreValue getLocalVariableVal(const char *var, bool &found) const
DLLEXPORT QoreStringNode * getScriptName() const
returns the script file name, if known (0 if not)
static DLLEXPORT QoreListNode * getAllQoreObjects(ExceptionSink *xsink)
list all programs as QoreObject list
DLLEXPORT bool checkAllowDebugging(ExceptionSink *xsink)
check if program can provide debugging stuff
long long int64
64bit integer type, cannot use int64_t here since it breaks the API on some 64-bit systems due to equ...
Definition: common.h:241
DLLEXPORT QoreProgram()
creates the object
DLLEXPORT int disableWarning(int code)
disables a warning by its code
DLLEXPORT QoreHashNode * getGlobalVars() const
retrieves a hash of global variables and their values
DLLEXPORT void parseSetParseOptions(int po)
adds the parse options given to the parse option mask; DEPRECATED: use parseSetParseOptions(int64) in...
DLLEXPORT AbstractQoreProgramExternalData * getExternalData(const char *owner) const
retrieves the external data pointer
DLLEXPORT void parseDisableParseOptions(int64 po)
disables the parse options given to the parse option mask
DLLEXPORT void registerQoreObject(QoreObject *o, ExceptionSink *xsink) const
register link to Qore script object
DLLEXPORT AbstractQoreNode * run(ExceptionSink *xsink)
runs the program (instantiates the program class if a program class has been set) and returns the ret...
provides a mutually-exclusive thread lock
Definition: QoreThreadLock.h:49
provides a simple POSIX-threads-based read-write lock
Definition: QoreRWLock.h:47
DLLEXPORT void getBreakpoints(QoreBreakpointList_t &bkptList)
DLLEXPORT QoreValueList * runtimeFindCallVariants(const char *name, ExceptionSink *xsink) const
DLLEXPORT void replaceParseOptions(int64 po, ExceptionSink *xsink)
replaces the parse options in the program with those given by the argument; adds Qore-language except...
DLLEXPORT AbstractQoreNode * getGlobalVariableValue(const char *var, bool &found) const
returns the value of the global variable given (do not include the "$" symbol), the caller owns the r...
DLLEXPORT void parseFileAndRunClass(const char *filename, const char *classname)
parses the given filename and runs the program by instantiating the class given
DLLEXPORT bool checkFeature(const char *f) const
returns true if the given feature is present in the program object
DLLEXPORT AbstractStatement * resolveStatementId(unsigned long statementId) const
get the statement from statement id
DLLEXPORT void parseFile(const char *filename, ExceptionSink *xsink, ExceptionSink *warn_sink=0, int warn_mask=QP_WARN_ALL, bool only_first_except=false)
parses code from the file given and commits changes to the QoreProgram
DLLEXPORT AbstractStatement * findFunctionStatement(const char *functionName, const QoreValueList *params, ExceptionSink *xsink) const
DLLEXPORT int64 getParseOptions64() const
returns the parse options currently set for this program
DLLEXPORT const AbstractQoreZoneInfo * currentTZ()
returns the current local time zone, note that if 0 = UTC