| Qore Programming Language - C/C++ Library 0.9.14

QoreProgram.h
1 /* -*- mode: c++; indent-tabs-mode: nil -*- */
2 /*
3 QoreProgram.h
4
5 Program Object Definition
6
7 Qore Programming Language
8
9 Copyright (C) 2003 - 2020 Qore Technologies, s.r.o.
10
11 Permission is hereby granted, free of charge, to any person obtaining a
12 copy of this software and associated documentation files (the "Software"),
13 to deal in the Software without restriction, including without limitation
14 the rights to use, copy, modify, merge, publish, distribute, sublicense,
15 and/or sell copies of the Software, and to permit persons to whom the
16 Software is furnished to do so, subject to the following conditions:
17
18 The above copyright notice and this permission notice shall be included in
19 all copies or substantial portions of the Software.
20
21 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27 DEALINGS IN THE SOFTWARE.
28
29 Note that the Qore library is released under a choice of three open-source
30 licenses: MIT (as above), LGPL 2+, or GPL 2+; see README-LICENSE for more
31 information.
32 */
33
34 #ifndef _QORE_QOREPROGRAM_H
35
36 #define _QORE_QOREPROGRAM_H
37
38 #include <qore/AbstractPrivateData.h>
39 #include <qore/Restrictions.h>
40 //#include <qore/intern/qore_program_private.h>
41
42 // warnings - must correspond with the string order in QoreProgram.cpp
43 // new warnings must also be added as constants
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
63
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)
65
66 #define QP_WARN_DEFAULT (QP_WARN_UNKNOWN_WARNING|QP_WARN_MODULES|QP_WARN_DEPRECATED)
67
68 enum BreakpointPolicy : unsigned char {
69 BKP_PO_NONE = 0,
70 BKP_PO_ACCEPT = 1,
71 BKP_PO_REJECT = 2,
72 };
73
75 DLLEXPORT extern const char** qore_warnings;
76
78 DLLEXPORT extern unsigned qore_num_warnings;
79
81 DLLEXPORT int get_warning_code(const char* str);
82
83 // forward references
84 class AbstractCallReferenceNode;
85 class LocalVar;
86 class ExceptionSink;
87 class QoreListNode;
88 class QoreNamespace;
89 class RootQoreNamespace;
90 class QoreStringNode;
91 class QoreHashNode;
92 class FunctionCallNode;
93 class AbstractStatement;
94 class UnresolvedProgramCallReferenceNode;
95 class Var;
96 class LVList;
97 class UserFunctionVariant;
98 class QoreParseTypeInfo;
99 class ParamList;
100 class AbstractQoreZoneInfo;
101 class qore_program_private;
102 class AbstractQoreProgramExternalData;
103 class QoreBreakpoint;
104 class AbstractQoreFunctionVariant;
105 class QoreRWLock;
106 class QoreExternalFunction;
107 class QoreExternalGlobalVar;
108 class QoreExternalConstant;
109
110 typedef std::list<QoreBreakpoint*> bkp_list_t;
111
112 struct QoreBreakpointList_t : public bkp_list_t {
113 DLLEXPORT QoreBreakpointList_t();
114 // dereferences all breakpoints and clears the list
115 DLLEXPORT ~QoreBreakpointList_t();
116 };
117
119
126 class QoreProgram : public AbstractPrivateData {
127 friend class qore_program_private_base;
128 friend class qore_program_private;
129 friend class qore_debug_program_private;
130 friend struct ThreadLocalProgramData;
131 private:
133 qore_program_private* priv;
134
136 DLLLOCAL QoreProgram(const QoreProgram&);
137
139 DLLLOCAL QoreProgram& operator=(const QoreProgram&);
140
141 protected:
143
145 DLLLOCAL virtual ~QoreProgram();
146
147 public:
149 DLLEXPORT QoreProgram();
150
152
155 DLLEXPORT QoreProgram(int64 parse_options);
156
158
165 DLLEXPORT QoreValue callFunction(const char* name, const QoreListNode* args, ExceptionSink* xsink);
166
168
176 DLLEXPORT QoreValue run(ExceptionSink* xsink);
177
179
186 DLLEXPORT QoreValue runTopLevel(ExceptionSink* xsink);
187
189
199 DLLEXPORT void parseFileAndRun(const char* filename);
200
202
211 DLLEXPORT void parseAndRun(FILE *fp, const char* name);
212
214
223 DLLEXPORT void parseAndRun(const char* str, const char* name);
224
226
233 DLLEXPORT void runClass(const char* classname, ExceptionSink* xsink);
234
236
247 DLLEXPORT void parseFileAndRunClass(const char* filename, const char* classname);
248
250
260 DLLEXPORT void parseAndRunClass(FILE *fp, const char* name, const char* classname);
261
263
273 DLLEXPORT void parseAndRunClass(const char* str, const char* name, const char* classname);
274
276
284 DLLEXPORT void parse(FILE *fp, const char* name, ExceptionSink* xsink, ExceptionSink* warn_sink = 0, int warn_mask = QP_WARN_ALL);
285
287
295 DLLEXPORT void parse(const QoreString* str, const QoreString* lstr, ExceptionSink* xsink, ExceptionSink* warn_sink = 0, int warn_mask = QP_WARN_ALL);
296
298
308 DLLEXPORT void parse(const QoreString* str, const QoreString* lstr, ExceptionSink* xsink, ExceptionSink* warn_sink, int warn_mask, const QoreString* source, int offset);
309
311
319 DLLEXPORT void parse(const char* str, const char* lstr, ExceptionSink* xsink, ExceptionSink* warn_sink = 0, int warn_mask = QP_WARN_ALL);
320
322
332 DLLEXPORT void parse(const char* str, const char* lstr, ExceptionSink* xsink, ExceptionSink* warn_sink, int warn_mask, const char* source, int offset);
333
335
343 DLLEXPORT void parseFile(const char* filename, ExceptionSink* xsink, ExceptionSink* warn_sink = 0, int warn_mask = QP_WARN_ALL, bool only_first_except = false);
344
346
355 DLLEXPORT void parsePending(const char* code, const char* label, ExceptionSink* xsink, ExceptionSink* warn_sink = 0, int warn_mask = QP_WARN_ALL);
356
358
370 DLLEXPORT void parsePending(const char* code, const char* label, ExceptionSink* xsink, ExceptionSink* warn_sink, int warn_mask, const char* source, int offset);
371
373
383 DLLEXPORT void parsePending(const QoreString* str, const QoreString* lstr, ExceptionSink* xsink, ExceptionSink* warn_sink = 0, int warn_mask = QP_WARN_ALL);
384
386
398 DLLEXPORT void parsePending(const QoreString* str, const QoreString* lstr, ExceptionSink* xsink, ExceptionSink* warn_sink, int warn_mask, const QoreString* source, int offset);
399
401
405 DLLEXPORT void parseCommit(ExceptionSink* xsink, ExceptionSink* warn_sink = 0, int warn_mask = QP_WARN_ALL);
406
408
414 DLLEXPORT void parseRollback();
415
417
422 DLLEXPORT int parseRollback(ExceptionSink* xsink);
423
425 DLLEXPORT bool existsFunction(const char* name);
426
428
432 using AbstractPrivateData::deref;
433 DLLEXPORT virtual void deref(ExceptionSink* xsink);
434
436 DLLEXPORT QoreProgram* programRefSelf() const;
437
439 DLLEXPORT void lockOptions();
440
442
447 DLLEXPORT void setExecClass(const char* ecn = 0);
448
450 DLLEXPORT void parseSetParseOptions(int po);
451
453 DLLEXPORT void parseSetParseOptions(int64 po);
454
456 DLLEXPORT void parseDisableParseOptions(int64 po);
457
459 DLLEXPORT void waitForTermination();
460
462
465 DLLEXPORT void waitForTerminationAndDeref(ExceptionSink* xsink);
466
468 DLLEXPORT QoreNamespace* getQoreNS() const;
469
471 DLLEXPORT RootQoreNamespace* getRootNS() const;
472
474
478 DLLEXPORT int setWarningMask(int wm);
479
481
485 DLLEXPORT int enableWarning(int code);
486
488
492 DLLEXPORT int disableWarning(int code);
493
495 DLLEXPORT int getParseOptions() const;
496
498 DLLEXPORT int64 getParseOptions64() const;
499
501
505 DLLEXPORT void setParseOptions(int po, ExceptionSink* xsink);
506
508
512 DLLEXPORT void setParseOptions(int64 po, ExceptionSink* xsink);
513
515
519 DLLEXPORT void disableParseOptions(int po, ExceptionSink* xsink);
520
522
526 DLLEXPORT void disableParseOptions(int64 po, ExceptionSink* xsink);
527
529
533 DLLEXPORT void replaceParseOptions(int64 po, ExceptionSink* xsink);
534
536
539 DLLEXPORT QoreListNode* getUserFunctionList();
540
542 DLLEXPORT bool checkWarning(int code) const;
543
545 DLLEXPORT int getWarningMask() const;
546
548 DLLEXPORT bool checkFeature(const char* f) const;
549
551 DLLEXPORT QoreListNode* getFeatureList() const;
552
554
556 DLLEXPORT QoreStringNode* getScriptName() const;
557
559
561 DLLEXPORT QoreStringNode* getScriptPath() const;
562
564
566 DLLEXPORT QoreStringNode* getScriptDir() const;
567
569
571 DLLEXPORT void setScriptPath(const char* path);
572
574
578 DLLEXPORT QoreValue getGlobalVariableValue(const char* var, bool &found) const;
579
581
585 DLLEXPORT QoreValue getGlobalVariableVal(const char* var, bool &found) const;
586
587 // retrieves the time zone setting for the program
588 DLLEXPORT const AbstractQoreZoneInfo *currentTZ() const;
589
590 // sets the program's time zone
591 DLLEXPORT void setTZ(const AbstractQoreZoneInfo *n_TZ);
592
594
597 DLLEXPORT void addFeature(const char* name);
598
600
604 DLLEXPORT void parseSetTimeZone(const char* zone);
605
607
614 DLLEXPORT void parseDefine(const char* str, QoreValue val);
615
617
624 DLLEXPORT void parseDefine(const char* str, const char* val);
625
626 // @deprecated use parseCmdLineDefines(ExceptionSink& xs, ExceptionSink& ws, int w, const std::map<std::string, std::string>& defmap) instead
627 DLLEXPORT void parseCmdLineDefines(const std::map<std::string, std::string> defmap, ExceptionSink& xs, ExceptionSink& ws, int w);
628
630
635 DLLEXPORT void parseCmdLineDefines(ExceptionSink& xs, ExceptionSink& ws, int w, const std::map<std::string, std::string>& defmap);
636
638
643 DLLEXPORT void setExternalData(const char* owner, AbstractQoreProgramExternalData* pud);
644
646
652 DLLEXPORT AbstractQoreProgramExternalData* getExternalData(const char* owner) const;
653
655
659 DLLEXPORT AbstractQoreProgramExternalData* removeExternalData(const char* owner);
660
662
666 DLLEXPORT QoreHashNode* getGlobalVars() const;
667
669
677 DLLEXPORT int setGlobalVarValue(const char* name, QoreValue val, ExceptionSink* xsink);
678
679 // finds a function or class method variant if possible
688 DLLEXPORT const AbstractQoreFunctionVariant* runtimeFindCall(const char* name, const QoreListNode* params, ExceptionSink* xsink) const;
689
690 // finds all variants of a function or class method and returns a list of the results
702 DLLEXPORT QoreListNode* runtimeFindCallVariants(const char* name, ExceptionSink* xsink) const;
703
705
709 DLLEXPORT QoreListNode* getThreadList() const;
710
712
714 DLLEXPORT const QoreClass* findClass(const char* path, ExceptionSink* xsink) const;
715
717
719 DLLEXPORT class_vec_t findAllClassesRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
720
722
724 DLLEXPORT hashdecl_vec_t findAllHashDeclsRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
725
727
729 DLLEXPORT func_vec_t findAllFunctionsRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
730
732
734 DLLEXPORT ns_vec_t findAllNamespacesRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
735
737
739 DLLEXPORT gvar_vec_t findAllGlobalVarsRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
740
742
744 DLLEXPORT const_vec_t findAllNamespaceConstantsRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
745
747
749 DLLEXPORT const QoreExternalFunction* findFunction(const char* path) const;
750
752
754 DLLEXPORT const TypedHashDecl* findHashDecl(const char* path, const QoreNamespace*& pns) const;
755
757
762 DLLEXPORT QoreNamespace* findNamespace(const QoreString& path);
763
765
767 DLLEXPORT const QoreNamespace* findNamespace(const QoreString& path) const;
768
770
772 DLLEXPORT const QoreExternalGlobalVar* findGlobalVar(const char* path, const QoreNamespace*& pns) const;
773
775
777 DLLEXPORT const QoreExternalConstant* findNamespaceConstant(const char* path, const QoreNamespace*& pns) const;
778
780
782 DLLEXPORT void depRef();
783
785
787 DLLEXPORT void depDeref();
788
790
794 DLLEXPORT QoreHashNode* getThreadData();
795
797
808 DLLEXPORT int issueModuleCmd(const char* module, const char* cmd, ExceptionSink* xsink);
809
810 DLLLOCAL QoreProgram(QoreProgram* pgm, int64 po, bool ec = false, const char* ecn = nullptr);
811
812 DLLLOCAL LocalVar *createLocalVar(const char* name, const QoreTypeInfo *typeInfo);
813
814 // returns 0 if a "requires" exception has already occurred
815 DLLLOCAL ExceptionSink* getParseExceptionSink();
816
817 DLLLOCAL void addFile(char* f);
818 DLLLOCAL QoreListNode* getVarList();
819 DLLLOCAL void parseSetIncludePath(const char* path);
820 DLLLOCAL const char* parseGetIncludePath() const;
821
822 /* for run-time module loading; the parse lock must be grabbed
823 before loading new modules - note this should only be assigned
824 to an AutoLock or SafeLocker object!
825 */
826 DLLLOCAL QoreThreadLock *getParseLock();
827 DLLLOCAL const LVList* getTopLevelLVList() const;
828
830
832 DLLLOCAL const char* parseGetScriptDir() const;
833
834 // can only be called while parsing from the same thread doing the parsing
835 DLLLOCAL bool parseExceptionRaised() const;
836
837 // TODO: implement !
845 DLLEXPORT QoreValue getLocalVariableVal(const char* var, bool &found) const;
846
849 DLLEXPORT void assignBreakpoint(QoreBreakpoint *bkpt, ExceptionSink *xsink);
850
853 DLLEXPORT void deleteAllBreakpoints();
854
857 DLLEXPORT void getBreakpoints(QoreBreakpointList_t &bkptList);
858
861 DLLEXPORT void getStatementBreakpoints(const AbstractStatement* statement, QoreBreakpointList_t &bkptList);
862
865 DLLEXPORT AbstractStatement* findStatement(const char* fileName, int line) const;
866
869 DLLEXPORT AbstractStatement* findFunctionStatement(const char* functionName, const QoreListNode* params, ExceptionSink* xsink) const;
870
872
876 DLLEXPORT unsigned long getStatementId(const AbstractStatement* statement) const;
877
879
884 DLLEXPORT AbstractStatement* resolveStatementId(unsigned long statementId) const;
885
887
890 DLLEXPORT QoreHashNode* getSourceFileNames(ExceptionSink* xsink) const;
892
895 DLLEXPORT QoreHashNode* getSourceLabels(ExceptionSink* xsink) const;
896
898
901 DLLEXPORT unsigned getProgramId() const;
902
904
909 DLLEXPORT static QoreProgram* resolveProgramId(unsigned programId);
910
912 DLLEXPORT void registerQoreObject(QoreObject *o, ExceptionSink* xsink) const;
913
915 DLLEXPORT void unregisterQoreObject(QoreObject *o, ExceptionSink* xsink) const;
916
918 DLLEXPORT QoreObject* findQoreObject() const;
919
921 DLLEXPORT static QoreObject* getQoreObject(QoreProgram* pgm);
922
924 DLLEXPORT static QoreListNode* getAllQoreObjects(ExceptionSink* xsink);
925
927 DLLEXPORT bool checkAllowDebugging(ExceptionSink* xsink);
928 };
929
931
933 class QoreProgramHelper {
934 private:
935 QoreProgram* pgm;
936 ExceptionSink& xsink;
937
938 public:
940 DLLEXPORT QoreProgramHelper(ExceptionSink& xs);
941
943 DLLEXPORT QoreProgramHelper(int64 parse_options, ExceptionSink& xs);
944
946
948 DLLEXPORT ~QoreProgramHelper();
949
951 DLLEXPORT QoreProgram* operator->();
952
954 DLLEXPORT QoreProgram* operator*();
955 };
956
958
960 class CurrentProgramRuntimeExternalParseContextHelper {
961 public:
963 DLLEXPORT CurrentProgramRuntimeExternalParseContextHelper();
964
966 DLLEXPORT ~CurrentProgramRuntimeExternalParseContextHelper();
967
969 DLLEXPORT operator bool() const;
970
971 private:
972 bool valid = true;
973
974 // not implemented
975 CurrentProgramRuntimeExternalParseContextHelper(const CurrentProgramRuntimeExternalParseContextHelper&) = delete;
976 void* operator new(size_t) = delete;
977 };
978
980
982 class QoreProgramContextHelper {
983 public:
985 DLLEXPORT QoreProgramContextHelper(QoreProgram* pgm);
987 DLLEXPORT ~QoreProgramContextHelper();
988
989 private:
990 QoreProgram* old_pgm;
991
992 // not implemented
993 QoreProgramContextHelper(const QoreProgramContextHelper&) = delete;
994 void* operator new(size_t) = delete;
995 };
996
998
1006 class AbstractQoreProgramExternalData {
1007 public:
1008 DLLEXPORT virtual ~AbstractQoreProgramExternalData();
1009
1011
1016 virtual AbstractQoreProgramExternalData* copy(QoreProgram* pgm) const = 0;
1017
1019 virtual void doDeref() = 0;
1020 };
1021
1022 typedef std::list<AbstractStatement*> AbstractStatementList_t;
1023 typedef std::list<int> TidList_t;
1024
1026
1030 class QoreBreakpoint : public AbstractPrivateData {
1031 private:
1032 qore_program_private* pgm;
1033 AbstractStatementList_t statementList;
1034 typedef std::map<int/*tid*/, int/*count*/> TidMap_t;
1035 TidMap_t tidMap;
1036 QoreObject* qo; // reference to Qore script object, it's private object but we cannot
1037 static QoreRWLock lck_breakpoint; // to protect breakpoint manipulation
1038 static QoreBreakpointList_t breakpointList;
1039 static volatile unsigned breakpointIdCounter; // to generate breakpointId
1040 unsigned breakpointId;
1041
1042 DLLLOCAL void unassignAllStatements();
1043 DLLLOCAL bool isStatementAssigned(const AbstractStatement *statement) const;
1044 DLLLOCAL bool checkPgm(ExceptionSink* xsink) const;
1045
1046 friend class qore_program_private;
1047 friend class AbstractStatement;
1048 protected:
1049 DLLLOCAL virtual ~QoreBreakpoint();
1051 DLLLOCAL virtual bool checkBreak() const;
1052 public:
1053 bool enabled;
1057 BreakpointPolicy policy;
1058
1059 DLLEXPORT QoreBreakpoint();
1063 DLLEXPORT QoreBreakpoint& operator=(const QoreBreakpoint& other);
1069 DLLEXPORT void assignProgram(QoreProgram *new_pgm, ExceptionSink* xsink);
1070 /* Get assigned program to breakpoint
1071 *
1072 */
1073 DLLEXPORT QoreProgram* getProgram() const;
1077 DLLEXPORT void assignStatement(AbstractStatement* statement, ExceptionSink* xsink);
1081 DLLEXPORT void unassignStatement(AbstractStatement* statement, ExceptionSink* xsink);
1085 DLLEXPORT void getStatements(AbstractStatementList_t &statList, ExceptionSink* xsink);
1089 DLLEXPORT QoreListNode* getStatementIds(ExceptionSink* xsink);
1093 DLLEXPORT AbstractStatement* resolveStatementId(unsigned long statementId, ExceptionSink* xsink) const;
1097 DLLEXPORT void getThreadIds(TidList_t &tidList, ExceptionSink* xsink);
1101 DLLEXPORT void setThreadIds(TidList_t tidList, ExceptionSink* xsink);
1105 DLLEXPORT void addThreadId(int tid, ExceptionSink* xsink);
1109 DLLEXPORT void removeThreadId(int tid, ExceptionSink* xsink);
1113 DLLEXPORT bool isThreadId(int tid, ExceptionSink* xsink);
1117 DLLEXPORT void clearThreadIds(ExceptionSink* xsink);
1118
1120
1123 DLLEXPORT unsigned getBreakpointId() const;
1124
1126
1131 DLLEXPORT static QoreBreakpoint* resolveBreakpointId(unsigned breakpointId);
1132
1133 DLLEXPORT void setQoreObject(QoreObject* n_qo);
1134
1135 DLLEXPORT QoreObject* getQoreObject();
1136 };
1137
1139
1141 class QoreExternalProgramContextHelper {
1142 public:
1144 DLLEXPORT QoreExternalProgramContextHelper(ExceptionSink* xsink, QoreProgram* pgm);
1145
1147 DLLEXPORT ~QoreExternalProgramContextHelper();
1148
1149 private:
1150 class ProgramThreadCountContextHelper* priv;
1151 };
1152
1154
1156 class QoreExternalProgramCallContextHelper {
1157 public:
1159 DLLEXPORT QoreExternalProgramCallContextHelper(QoreProgram* pgm);
1160
1162 DLLEXPORT ~QoreExternalProgramCallContextHelper();
1163
1164 private:
1165 class QoreExternalProgramCallContextHelperPriv* priv;
1166 };
1167
1168 #endif // _QORE_QOREPROGRAM_H
Restrictions.h
AbstractCallReferenceNode
base class for call references, reference-counted, dynamically allocated only
Definition: CallReferenceNode.h:39
AbstractPrivateData
the base class for all data to be used as private data of Qore objects
Definition: AbstractPrivateData.h:44
AbstractPrivateData::deref
virtual DLLLOCAL void deref()
decrements the reference count of the object without the possibility of throwing a Qore-language exce...
Definition: AbstractPrivateData.h:67
AbstractQoreProgramExternalData
an abstract class for program-specific external data
Definition: QoreProgram.h:1006
AbstractQoreProgramExternalData::doDeref
virtual void doDeref()=0
for non-reference counted classes, deletes the object immediately
AbstractQoreProgramExternalData::copy
virtual AbstractQoreProgramExternalData * copy(QoreProgram *pgm) const =0
for reference-counted classes, returns the same object with the reference count incremented
CurrentProgramRuntimeExternalParseContextHelper
allows for the parse lock for the current program to be acquired by binary modules
Definition: QoreProgram.h:960
CurrentProgramRuntimeExternalParseContextHelper::CurrentProgramRuntimeExternalParseContextHelper
DLLEXPORT CurrentProgramRuntimeExternalParseContextHelper()
acquires the parse lock; if already acquired by another thread, then this call blocks until the lock ...
CurrentProgramRuntimeExternalParseContextHelper::~CurrentProgramRuntimeExternalParseContextHelper
DLLEXPORT ~CurrentProgramRuntimeExternalParseContextHelper()
releases the parse lock for the current program
ExceptionSink
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:48
QoreBreakpoint
Class implementing breakpoint for debugging.
Definition: QoreProgram.h:1030
QoreBreakpoint::getStatements
DLLEXPORT void getStatements(AbstractStatementList_t &statList, ExceptionSink *xsink)
QoreBreakpoint::resolveStatementId
DLLEXPORT AbstractStatement * resolveStatementId(unsigned long statementId, ExceptionSink *xsink) const
QoreBreakpoint::assignStatement
DLLEXPORT void assignStatement(AbstractStatement *statement, ExceptionSink *xsink)
QoreBreakpoint::getStatementIds
DLLEXPORT QoreListNode * getStatementIds(ExceptionSink *xsink)
QoreBreakpoint::unassignStatement
DLLEXPORT void unassignStatement(AbstractStatement *statement, ExceptionSink *xsink)
QoreBreakpoint::checkBreak
virtual DLLLOCAL bool checkBreak() const
check if program flow should be interrupted
QoreBreakpoint::getThreadIds
DLLEXPORT void getThreadIds(TidList_t &tidList, ExceptionSink *xsink)
QoreBreakpoint::resolveBreakpointId
static DLLEXPORT QoreBreakpoint * resolveBreakpointId(unsigned breakpointId)
get the breakpoint from breakpoint id
QoreBreakpoint::removeThreadId
DLLEXPORT void removeThreadId(int tid, ExceptionSink *xsink)
QoreBreakpoint::setThreadIds
DLLEXPORT void setThreadIds(TidList_t tidList, ExceptionSink *xsink)
QoreBreakpoint::clearThreadIds
DLLEXPORT void clearThreadIds(ExceptionSink *xsink)
QoreBreakpoint::getBreakpointId
DLLEXPORT unsigned getBreakpointId() const
get the breakpoint id
QoreBreakpoint::operator=
DLLEXPORT QoreBreakpoint & operator=(const QoreBreakpoint &other)
QoreBreakpoint::policy
BreakpointPolicy policy
Definition: QoreProgram.h:1057
QoreBreakpoint::assignProgram
DLLEXPORT void assignProgram(QoreProgram *new_pgm, ExceptionSink *xsink)
QoreBreakpoint::addThreadId
DLLEXPORT void addThreadId(int tid, ExceptionSink *xsink)
QoreBreakpoint::isThreadId
DLLEXPORT bool isThreadId(int tid, ExceptionSink *xsink)
QoreClass
defines a Qore-language class
Definition: QoreClass.h:239
QoreExternalConstant
external wrapper class for constants
Definition: QoreReflection.h:200
QoreExternalProgramCallContextHelper
allows the program call context to be set by external modules
Definition: QoreProgram.h:1156
QoreExternalProgramCallContextHelper::~QoreExternalProgramCallContextHelper
DLLEXPORT ~QoreExternalProgramCallContextHelper()
resets the call context to the original state
QoreExternalProgramCallContextHelper::QoreExternalProgramCallContextHelper
DLLEXPORT QoreExternalProgramCallContextHelper(QoreProgram *pgm)
sets the call context to the given program
QoreExternalProgramContextHelper
allows a program to be used and guarantees that it will stay valid until the destructor is run if suc...
Definition: QoreProgram.h:1141
QoreExternalProgramContextHelper::~QoreExternalProgramContextHelper
DLLEXPORT ~QoreExternalProgramContextHelper()
destroys the object and releases the program to be destroyed if it was successfully acquired in the c...
QoreExternalProgramContextHelper::QoreExternalProgramContextHelper
DLLEXPORT QoreExternalProgramContextHelper(ExceptionSink *xsink, QoreProgram *pgm)
try to attach to the given program, if not possible, then a Qore-language exception is thrown
QoreHashNode
This is the hash or associative list container type in Qore, dynamically allocated only,...
Definition: QoreHashNode.h:50
QoreListNode
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:52
QoreNamespace
contains constants, classes, and subnamespaces in QoreProgram objects
Definition: QoreNamespace.h:65
QoreObject
the implementation of Qore's object data type, reference counted, dynamically-allocated only
Definition: QoreObject.h:61
QoreProgramContextHelper
allows for external modules to set the current Program context explicitly
Definition: QoreProgram.h:982
QoreProgramContextHelper::QoreProgramContextHelper
DLLEXPORT QoreProgramContextHelper(QoreProgram *pgm)
sets the current Program context
QoreProgramContextHelper::~QoreProgramContextHelper
DLLEXPORT ~QoreProgramContextHelper()
restores the previous Program context
QoreProgramHelper
safely manages QoreProgram objects; note the the destructor will block until all background threads i...
Definition: QoreProgram.h:933
QoreProgramHelper::operator->
DLLEXPORT QoreProgram * operator->()
returns the QoreProgram object being managed
QoreProgramHelper::operator*
DLLEXPORT QoreProgram * operator*()
returns the QoreProgram object being managed
QoreProgramHelper::QoreProgramHelper
DLLEXPORT QoreProgramHelper(ExceptionSink &xs)
creates the QoreProgram object: DEPRECATED: use QoreProgramHelper(int64, ExceptionSink&) instead
QoreProgramHelper::~QoreProgramHelper
DLLEXPORT ~QoreProgramHelper()
waits until all background threads in the Qore library have terminated and until the QoreProgram obje...
QoreProgram
supports parsing and executing Qore-language code, reference counted, dynamically-allocated only
Definition: QoreProgram.h:126
QoreProgram::parseAndRunClass
DLLEXPORT void parseAndRunClass(FILE *fp, const char *name, const char *classname)
parses the given file and runs the code by instantiating the class given
QoreProgram::findNamespace
DLLEXPORT QoreNamespace * findNamespace(const QoreString &path)
search for the given namespace in the program; can be a simple namespace name or a namespace-prefixed...
QoreProgram::getScriptName
DLLEXPORT QoreStringNode * getScriptName() const
returns the script file name, if known (0 if not)
QoreProgram::replaceParseOptions
DLLEXPORT void replaceParseOptions(int64 po, ExceptionSink *xsink)
replaces the parse options in the program with those given by the argument; adds Qore-language except...
QoreProgram::getThreadList
DLLEXPORT QoreListNode * getThreadList() const
returns a list of threads active in this Program object
QoreProgram::checkAllowDebugging
DLLEXPORT bool checkAllowDebugging(ExceptionSink *xsink)
check if program can provide debugging stuff
QoreProgram::getParseOptions
DLLEXPORT int getParseOptions() const
returns the parse options currently set for this program; DEPRECATED; use getParseOptions64() instead
QoreProgram::getUserFunctionList
DLLEXPORT QoreListNode * getUserFunctionList()
returns a list of all user functions in this program
QoreProgram::findClass
DLLEXPORT const QoreClass * findClass(const char *path, ExceptionSink *xsink) const
search for the given class in the program; can be a simple class name or a namespace-prefixed path (e...
QoreProgram::findAllClassesRegex
DLLEXPORT class_vec_t findAllClassesRegex(const QoreString &pattern, int re_opts, ExceptionSink *xsink) const
returns a list of all classes that match the pattern
QoreProgram::disableParseOptions
DLLEXPORT void disableParseOptions(int po, ExceptionSink *xsink)
turns off the parse options given in the passed mask and adds Qore-language exception information if ...
QoreProgram::setScriptPath
DLLEXPORT void setScriptPath(const char *path)
sets the script path
QoreProgram::getSourceFileNames
DLLEXPORT QoreHashNode * getSourceFileNames(ExceptionSink *xsink) const
get list of files which appears in a statement
QoreProgram::resolveProgramId
static DLLEXPORT QoreProgram * resolveProgramId(unsigned programId)
get the program from program id
QoreProgram::parseCommit
DLLEXPORT void parseCommit(ExceptionSink *xsink, ExceptionSink *warn_sink=0, int warn_mask=QP_WARN_ALL)
commits pending changes to the program
QoreProgram::parseSetTimeZone
DLLEXPORT void parseSetTimeZone(const char *zone)
sets the time zone during parsing
QoreProgram::getScriptDir
DLLEXPORT QoreStringNode * getScriptDir() const
returns the script directory, if known (0 if not)
QoreProgram::getScriptPath
DLLEXPORT QoreStringNode * getScriptPath() const
returns the script path (directory and name), if known (0 if not)
QoreProgram::run
DLLEXPORT QoreValue run(ExceptionSink *xsink)
runs the program (instantiates the program class if a program class has been set) and returns the ret...
QoreProgram::findStatement
DLLEXPORT AbstractStatement * findStatement(const char *fileName, int line) const
QoreProgram::getGlobalVariableVal
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...
QoreProgram::waitForTerminationAndDeref
DLLEXPORT void waitForTerminationAndDeref(ExceptionSink *xsink)
this call blocks until the program's last thread terminates, and then calls QoreProgram::deref()
QoreProgram::setGlobalVarValue
DLLEXPORT int setGlobalVarValue(const char *name, QoreValue val, ExceptionSink *xsink)
sets the value of the given global variable
QoreProgram::findAllFunctionsRegex
DLLEXPORT func_vec_t findAllFunctionsRegex(const QoreString &pattern, int re_opts, ExceptionSink *xsink) const
returns a list of all functions that match the pattern
QoreProgram::runtimeFindCall
DLLEXPORT const AbstractQoreFunctionVariant * runtimeFindCall(const char *name, const QoreListNode *params, ExceptionSink *xsink) const
QoreProgram::getQoreObject
static DLLEXPORT QoreObject * getQoreObject(QoreProgram *pgm)
get QoreObject of QoreProgram
QoreProgram::getLocalVariableVal
DLLEXPORT QoreValue getLocalVariableVal(const char *var, bool &found) const
QoreProgram::parseAndRun
DLLEXPORT void parseAndRun(FILE *fp, const char *name)
parses the given file and runs the file
QoreProgram::enableWarning
DLLEXPORT int enableWarning(int code)
enables a warning by its code
QoreProgram::getParseOptions64
DLLEXPORT int64 getParseOptions64() const
returns the parse options currently set for this program
QoreProgram::disableWarning
DLLEXPORT int disableWarning(int code)
disables a warning by its code
QoreProgram::addFeature
DLLEXPORT void addFeature(const char *name)
manually add the feature to the program
QoreProgram::depRef
DLLEXPORT void depRef()
incremements the weak reference count for the program object
QoreProgram::parseRollback
DLLEXPORT void parseRollback()
rolls back changes to the program object that were added with QoreProgram::parsePending()
QoreProgram::getExternalData
DLLEXPORT AbstractQoreProgramExternalData * getExternalData(const char *owner) const
retrieves the external data pointer
QoreProgram::removeExternalData
DLLEXPORT AbstractQoreProgramExternalData * removeExternalData(const char *owner)
removes a pointer to external data in the Program; does not dereference the data
QoreProgram::parseSetParseOptions
DLLEXPORT void parseSetParseOptions(int po)
adds the parse options given to the parse option mask; DEPRECATED: use parseSetParseOptions(int64) in...
QoreProgram::callFunction
DLLEXPORT QoreValue callFunction(const char *name, const QoreListNode *args, ExceptionSink *xsink)
calls a function from the function name and returns the return value
QoreProgram::getFeatureList
DLLEXPORT QoreListNode * getFeatureList() const
returns a list of features in the program object
QoreProgram::deref
virtual DLLLOCAL void deref(ExceptionSink *xsink)
dereferences the object and deletes it if the reference count reaches zero
Definition: AbstractPrivateData.h:61
QoreProgram::getGlobalVars
DLLEXPORT QoreHashNode * getGlobalVars() const
retrieves a hash of global variables and their values
QoreProgram::findAllGlobalVarsRegex
DLLEXPORT gvar_vec_t findAllGlobalVarsRegex(const QoreString &pattern, int re_opts, ExceptionSink *xsink) const
returns a list of all global variables that match the pattern
QoreProgram::findHashDecl
DLLEXPORT const TypedHashDecl * findHashDecl(const char *path, const QoreNamespace *&pns) const
search for the given typed hash (hashdecl) in the program; can be a simple function name or a namespa...
QoreProgram::parseGetScriptDir
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...
QoreProgram::findQoreObject
DLLEXPORT QoreObject * findQoreObject() const
find Qore script object related to QoreProgram instance
QoreProgram::findGlobalVar
DLLEXPORT const QoreExternalGlobalVar * findGlobalVar(const char *path, const QoreNamespace *&pns) const
search for the given global variable in the program; can be a simple function name or a namespace-pre...
QoreProgram::getThreadData
DLLEXPORT QoreHashNode * getThreadData()
returns the thread-local data for the current thread and the Program object
QoreProgram::getProgramId
DLLEXPORT unsigned getProgramId() const
get the program id
QoreProgram::findAllHashDeclsRegex
DLLEXPORT hashdecl_vec_t findAllHashDeclsRegex(const QoreString &pattern, int re_opts, ExceptionSink *xsink) const
returns a list of all typed hashes (hashdecls) that match the pattern
QoreProgram::setParseOptions
DLLEXPORT void setParseOptions(int po, ExceptionSink *xsink)
sets the parse options and adds Qore-language exception information if an error occurs
QoreProgram::deleteAllBreakpoints
DLLEXPORT void deleteAllBreakpoints()
QoreProgram::runtimeFindCallVariants
DLLEXPORT QoreListNode * runtimeFindCallVariants(const char *name, ExceptionSink *xsink) const
QoreProgram::setExecClass
DLLEXPORT void setExecClass(const char *ecn=0)
sets the name of the application class to be executed (instantiated) instead of top-level code
QoreProgram::programRefSelf
DLLEXPORT QoreProgram * programRefSelf() const
references "this" and returns a non-const pointer to itself
QoreProgram::parseFileAndRunClass
DLLEXPORT void parseFileAndRunClass(const char *filename, const char *classname)
parses the given filename and runs the program by instantiating the class given
QoreProgram::getWarningMask
DLLEXPORT int getWarningMask() const
returns the warning mask
QoreProgram::findFunction
DLLEXPORT const QoreExternalFunction * findFunction(const char *path) const
search for the given function in the program; can be a simple function name or a namespace-prefixed p...
QoreProgram::findAllNamespacesRegex
DLLEXPORT ns_vec_t findAllNamespacesRegex(const QoreString &pattern, int re_opts, ExceptionSink *xsink) const
returns a list of all namespaces that match the pattern
QoreProgram::getRootNS
DLLEXPORT RootQoreNamespace * getRootNS() const
returns a pointer to the root namespace
QoreProgram::registerQoreObject
DLLEXPORT void registerQoreObject(QoreObject *o, ExceptionSink *xsink) const
register link to Qore script object
QoreProgram::runClass
DLLEXPORT void runClass(const char *classname, ExceptionSink *xsink)
instantiates the class given and runs its constructor
QoreProgram::lockOptions
DLLEXPORT void lockOptions()
locks parse options so they may not be changed
QoreProgram::runTopLevel
DLLEXPORT QoreValue runTopLevel(ExceptionSink *xsink)
tuns the top level code and returns any return value
QoreProgram::parseDefine
DLLEXPORT void parseDefine(const char *str, QoreValue val)
defines a parse-time variable; call only at parse time (or before parsing)
QoreProgram::existsFunction
DLLEXPORT bool existsFunction(const char *name)
returns true if the given function exists as a user function, false if not
QoreProgram::~QoreProgram
virtual DLLLOCAL ~QoreProgram()
the destructor is private in order to prohibit the object from being allocated on the stack
QoreProgram::checkWarning
DLLEXPORT bool checkWarning(int code) const
returns true if the warning code is set
QoreProgram::findNamespaceConstant
DLLEXPORT const QoreExternalConstant * findNamespaceConstant(const char *path, const QoreNamespace *&pns) const
search for the given namespace constant in the program; can be a simple function name or a namespace-...
QoreProgram::findFunctionStatement
DLLEXPORT AbstractStatement * findFunctionStatement(const char *functionName, const QoreListNode *params, ExceptionSink *xsink) const
QoreProgram::issueModuleCmd
DLLEXPORT int issueModuleCmd(const char *module, const char *cmd, ExceptionSink *xsink)
issues a module command for the given module; the module is loaded into the current Program object if...
QoreProgram::parseFile
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
QoreProgram::getBreakpoints
DLLEXPORT void getBreakpoints(QoreBreakpointList_t &bkptList)
QoreProgram::parsePending
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
QoreProgram::getGlobalVariableValue
DLLEXPORT QoreValue 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...
QoreProgram::setWarningMask
DLLEXPORT int setWarningMask(int wm)
sets the warning mask
QoreProgram::findAllNamespaceConstantsRegex
DLLEXPORT const_vec_t findAllNamespaceConstantsRegex(const QoreString &pattern, int re_opts, ExceptionSink *xsink) const
returns a list of all namespace constants that match the pattern
QoreProgram::getStatementId
DLLEXPORT unsigned long getStatementId(const AbstractStatement *statement) const
get the statement id
QoreProgram::getAllQoreObjects
static DLLEXPORT QoreListNode * getAllQoreObjects(ExceptionSink *xsink)
list all programs as QoreObject list
QoreProgram::getStatementBreakpoints
DLLEXPORT void getStatementBreakpoints(const AbstractStatement *statement, QoreBreakpointList_t &bkptList)
QoreProgram::resolveStatementId
DLLEXPORT AbstractStatement * resolveStatementId(unsigned long statementId) const
get the statement from statement id
QoreProgram::unregisterQoreObject
DLLEXPORT void unregisterQoreObject(QoreObject *o, ExceptionSink *xsink) const
unregister link to Qore script object
QoreProgram::assignBreakpoint
DLLEXPORT void assignBreakpoint(QoreBreakpoint *bkpt, ExceptionSink *xsink)
QoreProgram::getSourceLabels
DLLEXPORT QoreHashNode * getSourceLabels(ExceptionSink *xsink) const
get list of labels which appears in a statement
QoreProgram::setExternalData
DLLEXPORT void setExternalData(const char *owner, AbstractQoreProgramExternalData *pud)
sets a pointer to external data in the Program
QoreProgram::waitForTermination
DLLEXPORT void waitForTermination()
this call blocks until the program's last thread terminates
QoreProgram::parse
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
QoreProgram::parseDisableParseOptions
DLLEXPORT void parseDisableParseOptions(int64 po)
disables the parse options given to the parse option mask
QoreProgram::checkFeature
DLLEXPORT bool checkFeature(const char *f) const
returns true if the given feature is present in the program object
QoreProgram::getQoreNS
DLLEXPORT QoreNamespace * getQoreNS() const
returns a pointer to the "Qore" namespace
QoreProgram::parseFileAndRun
DLLEXPORT void parseFileAndRun(const char *filename)
parses the given filename and runs the file
QoreProgram::depDeref
DLLEXPORT void depDeref()
dereferences a weak reference for the program object
QoreProgram::QoreProgram
DLLEXPORT QoreProgram()
creates the object
QoreRWLock
provides a simple POSIX-threads-based read-write lock
Definition: QoreRWLock.h:47
QoreString
Qore's string type supported by the QoreEncoding class.
Definition: QoreString.h:81
QoreStringNode
Qore's string value type, reference counted, dynamically-allocated only.
Definition: QoreStringNode.h:50
QoreThreadLock
provides a mutually-exclusive thread lock
Definition: QoreThreadLock.h:49
RootQoreNamespace
the root namespace of a QoreProgram object
Definition: QoreNamespace.h:335
TypedHashDecl
typed hash declaration
Definition: TypedHashDecl.h:44
int64
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:260
getProgram
DLLEXPORT QoreProgram * getProgram()
returns the current QoreProgram
currentTZ
DLLEXPORT const AbstractQoreZoneInfo * currentTZ()
returns the current local time zone, note that if 0 = UTC
QoreValue
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:262