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

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 - 2021 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_INVALID_CATCH (1 << 17)
63 #define QP_WARN_ALL -1
64
65 #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|QP_WARN_INVALID_CATCH)
66
67 #define QP_WARN_DEFAULT (QP_WARN_UNKNOWN_WARNING|QP_WARN_MODULES|QP_WARN_DEPRECATED)
68
69 enum BreakpointPolicy : unsigned char {
70 BKP_PO_NONE = 0,
71 BKP_PO_ACCEPT = 1,
72 BKP_PO_REJECT = 2,
73 };
74
76 DLLEXPORT extern const char** qore_warnings;
77
79 DLLEXPORT extern unsigned qore_num_warnings;
80
82 DLLEXPORT int get_warning_code(const char* str);
83
84 // forward references
85 class AbstractCallReferenceNode;
86 class LocalVar;
87 class ExceptionSink;
88 class QoreListNode;
89 class QoreNamespace;
90 class RootQoreNamespace;
91 class QoreStringNode;
92 class QoreHashNode;
93 class FunctionCallNode;
94 class AbstractStatement;
95 class UnresolvedProgramCallReferenceNode;
96 class Var;
97 class LVList;
98 class UserFunctionVariant;
99 class QoreParseTypeInfo;
100 class ParamList;
101 class AbstractQoreZoneInfo;
102 class qore_program_private;
103 class AbstractQoreProgramExternalData;
104 class QoreBreakpoint;
105 class AbstractQoreFunctionVariant;
106 class QoreRWLock;
107 class QoreExternalFunction;
108 class QoreExternalGlobalVar;
109 class QoreExternalConstant;
110
111 typedef std::list<QoreBreakpoint*> bkp_list_t;
112
113 struct QoreBreakpointList_t : public bkp_list_t {
114 DLLEXPORT QoreBreakpointList_t();
115 // dereferences all breakpoints and clears the list
116 DLLEXPORT ~QoreBreakpointList_t();
117 };
118
120
127 class QoreProgram : public AbstractPrivateData {
128 friend class qore_program_private_base;
129 friend class qore_program_private;
130 friend class qore_debug_program_private;
131 friend struct ThreadLocalProgramData;
132 private:
134 qore_program_private* priv;
135
137 DLLLOCAL QoreProgram(const QoreProgram&);
138
140 DLLLOCAL QoreProgram& operator=(const QoreProgram&);
141
142 protected:
144
146 DLLLOCAL virtual ~QoreProgram();
147
148 public:
150 DLLEXPORT QoreProgram();
151
153
156 DLLEXPORT QoreProgram(int64 parse_options);
157
159
166 DLLEXPORT QoreValue callFunction(const char* name, const QoreListNode* args, ExceptionSink* xsink);
167
169
177 DLLEXPORT QoreValue run(ExceptionSink* xsink);
178
180
187 DLLEXPORT QoreValue runTopLevel(ExceptionSink* xsink);
188
190
200 DLLEXPORT void parseFileAndRun(const char* filename);
201
203
212 DLLEXPORT void parseAndRun(FILE *fp, const char* name);
213
215
224 DLLEXPORT void parseAndRun(const char* str, const char* name);
225
227
234 DLLEXPORT void runClass(const char* classname, ExceptionSink* xsink);
235
237
248 DLLEXPORT void parseFileAndRunClass(const char* filename, const char* classname);
249
251
261 DLLEXPORT void parseAndRunClass(FILE *fp, const char* name, const char* classname);
262
264
274 DLLEXPORT void parseAndRunClass(const char* str, const char* name, const char* classname);
275
277
285 DLLEXPORT void parse(FILE *fp, const char* name, ExceptionSink* xsink, ExceptionSink* warn_sink = 0, int warn_mask = QP_WARN_ALL);
286
288
296 DLLEXPORT void parse(const QoreString* str, const QoreString* lstr, ExceptionSink* xsink, ExceptionSink* warn_sink = 0, int warn_mask = QP_WARN_ALL);
297
299
309 DLLEXPORT void parse(const QoreString* str, const QoreString* lstr, ExceptionSink* xsink, ExceptionSink* warn_sink, int warn_mask, const QoreString* source, int offset);
310
312
320 DLLEXPORT void parse(const char* str, const char* lstr, ExceptionSink* xsink, ExceptionSink* warn_sink = 0, int warn_mask = QP_WARN_ALL);
321
323
333 DLLEXPORT void parse(const char* str, const char* lstr, ExceptionSink* xsink, ExceptionSink* warn_sink, int warn_mask, const char* source, int offset);
334
336
344 DLLEXPORT void parseFile(const char* filename, ExceptionSink* xsink, ExceptionSink* warn_sink = 0, int warn_mask = QP_WARN_ALL, bool only_first_except = false);
345
347
356 DLLEXPORT void parsePending(const char* code, const char* label, ExceptionSink* xsink, ExceptionSink* warn_sink = 0, int warn_mask = QP_WARN_ALL);
357
359
371 DLLEXPORT void parsePending(const char* code, const char* label, ExceptionSink* xsink, ExceptionSink* warn_sink, int warn_mask, const char* source, int offset);
372
374
384 DLLEXPORT void parsePending(const QoreString* str, const QoreString* lstr, ExceptionSink* xsink, ExceptionSink* warn_sink = 0, int warn_mask = QP_WARN_ALL);
385
387
399 DLLEXPORT void parsePending(const QoreString* str, const QoreString* lstr, ExceptionSink* xsink, ExceptionSink* warn_sink, int warn_mask, const QoreString* source, int offset);
400
402
406 DLLEXPORT void parseCommit(ExceptionSink* xsink, ExceptionSink* warn_sink = 0, int warn_mask = QP_WARN_ALL);
407
409
414 DLLEXPORT int parseRollback(ExceptionSink* xsink);
415
417 DLLEXPORT bool existsFunction(const char* name);
418
420
424 using AbstractPrivateData::deref;
425 DLLEXPORT virtual void deref(ExceptionSink* xsink);
426
428 DLLEXPORT QoreProgram* programRefSelf() const;
429
431 DLLEXPORT void lockOptions();
432
434
439 DLLEXPORT void setExecClass(const char* ecn = 0);
440
442 DLLEXPORT void parseSetParseOptions(int64 po);
443
445 DLLEXPORT void parseDisableParseOptions(int64 po);
446
448 DLLEXPORT void waitForTermination();
449
451
454 DLLEXPORT void waitForTerminationAndDeref(ExceptionSink* xsink);
455
457 DLLEXPORT QoreNamespace* getQoreNS() const;
458
460 DLLEXPORT RootQoreNamespace* getRootNS() const;
461
463
467 DLLEXPORT int setWarningMask(int wm);
468
470
474 DLLEXPORT int enableWarning(int code);
475
477
481 DLLEXPORT int disableWarning(int code);
482
484 DLLEXPORT int getParseOptions() const;
485
487 DLLEXPORT int64 getParseOptions64() const;
488
490
494 DLLEXPORT void setParseOptions(int64 po, ExceptionSink* xsink);
495
497
501 DLLEXPORT void disableParseOptions(int64 po, ExceptionSink* xsink);
502
504
508 DLLEXPORT void replaceParseOptions(int64 po, ExceptionSink* xsink);
509
511
514 DLLEXPORT QoreListNode* getUserFunctionList();
515
517 DLLEXPORT bool checkWarning(int code) const;
518
520 DLLEXPORT int getWarningMask() const;
521
523 DLLEXPORT bool checkFeature(const char* f) const;
524
526 DLLEXPORT QoreListNode* getFeatureList() const;
527
529
531 DLLEXPORT QoreStringNode* getScriptName() const;
532
534
536 DLLEXPORT QoreStringNode* getScriptPath() const;
537
539
541 DLLEXPORT QoreStringNode* getScriptDir() const;
542
544
546 DLLEXPORT void setScriptPath(const char* path);
547
549
553 DLLEXPORT QoreValue getGlobalVariableValue(const char* var, bool &found) const;
554
556
560 DLLEXPORT QoreValue getGlobalVariableVal(const char* var, bool &found) const;
561
562 // retrieves the time zone setting for the program
563 DLLEXPORT const AbstractQoreZoneInfo *currentTZ() const;
564
565 // sets the program's time zone
566 DLLEXPORT void setTZ(const AbstractQoreZoneInfo *n_TZ);
567
569
572 DLLEXPORT void addFeature(const char* name);
573
575
579 DLLEXPORT void parseSetTimeZone(const char* zone);
580
582
589 DLLEXPORT void parseDefine(const char* str, QoreValue val);
590
592
599 DLLEXPORT void parseDefine(const char* str, const char* val);
600
601 // @deprecated use parseCmdLineDefines(ExceptionSink& xs, ExceptionSink& ws, int w, const std::map<std::string, std::string>& defmap) instead
602 DLLEXPORT void parseCmdLineDefines(const std::map<std::string, std::string> defmap, ExceptionSink& xs, ExceptionSink& ws, int w);
603
605
610 DLLEXPORT void parseCmdLineDefines(ExceptionSink& xs, ExceptionSink& ws, int w, const std::map<std::string, std::string>& defmap);
611
613
618 DLLEXPORT void setExternalData(const char* owner, AbstractQoreProgramExternalData* pud);
619
621
627 DLLEXPORT AbstractQoreProgramExternalData* getExternalData(const char* owner) const;
628
630
634 DLLEXPORT AbstractQoreProgramExternalData* removeExternalData(const char* owner);
635
637
641 DLLEXPORT QoreHashNode* getGlobalVars() const;
642
644
652 DLLEXPORT int setGlobalVarValue(const char* name, QoreValue val, ExceptionSink* xsink);
653
654 // finds a function or class method variant if possible
663 DLLEXPORT const AbstractQoreFunctionVariant* runtimeFindCall(const char* name, const QoreListNode* params, ExceptionSink* xsink) const;
664
665 // finds all variants of a function or class method and returns a list of the results
677 DLLEXPORT QoreListNode* runtimeFindCallVariants(const char* name, ExceptionSink* xsink) const;
678
680
684 DLLEXPORT QoreListNode* getThreadList() const;
685
687
689 DLLEXPORT const QoreClass* findClass(const char* path, ExceptionSink* xsink) const;
690
692
694 DLLEXPORT class_vec_t findAllClassesRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
695
697
699 DLLEXPORT hashdecl_vec_t findAllHashDeclsRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
700
702
704 DLLEXPORT func_vec_t findAllFunctionsRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
705
707
709 DLLEXPORT ns_vec_t findAllNamespacesRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
710
712
714 DLLEXPORT gvar_vec_t findAllGlobalVarsRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
715
717
719 DLLEXPORT const_vec_t findAllNamespaceConstantsRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
720
722
724 DLLEXPORT const QoreExternalFunction* findFunction(const char* path) const;
725
727
729 DLLEXPORT const TypedHashDecl* findHashDecl(const char* path, const QoreNamespace*& pns) const;
730
732
737 DLLEXPORT QoreNamespace* findNamespace(const QoreString& path);
738
740
742 DLLEXPORT const QoreNamespace* findNamespace(const QoreString& path) const;
743
745
747 DLLEXPORT const QoreExternalGlobalVar* findGlobalVar(const char* path, const QoreNamespace*& pns) const;
748
750
752 DLLEXPORT const QoreExternalConstant* findNamespaceConstant(const char* path, const QoreNamespace*& pns) const;
753
755
757 DLLEXPORT void depRef();
758
760
762 DLLEXPORT void depDeref();
763
765
769 DLLEXPORT QoreHashNode* getThreadData();
770
772
783 DLLEXPORT int issueModuleCmd(const char* module, const char* cmd, ExceptionSink* xsink);
784
785 DLLLOCAL QoreProgram(QoreProgram* pgm, int64 po, bool ec = false, const char* ecn = nullptr);
786
787 DLLLOCAL LocalVar *createLocalVar(const char* name, const QoreTypeInfo *typeInfo);
788
789 // returns 0 if a "requires" exception has already occurred
790 DLLLOCAL ExceptionSink* getParseExceptionSink();
791
792 DLLLOCAL void addFile(char* f);
793 DLLLOCAL QoreListNode* getVarList();
794 DLLLOCAL void parseSetIncludePath(const char* path);
795 DLLLOCAL const char* parseGetIncludePath() const;
796
797 /* for run-time module loading; the parse lock must be grabbed
798 before loading new modules - note this should only be assigned
799 to an AutoLock or SafeLocker object!
800 */
801 DLLLOCAL QoreThreadLock *getParseLock();
802 DLLLOCAL const LVList* getTopLevelLVList() const;
803
805
807 DLLLOCAL const char* parseGetScriptDir() const;
808
809 // can only be called while parsing from the same thread doing the parsing
810 DLLLOCAL bool parseExceptionRaised() const;
811
812 // TODO: implement !
820 DLLEXPORT QoreValue getLocalVariableVal(const char* var, bool &found) const;
821
824 DLLEXPORT void assignBreakpoint(QoreBreakpoint *bkpt, ExceptionSink *xsink);
825
828 DLLEXPORT void deleteAllBreakpoints();
829
832 DLLEXPORT void getBreakpoints(QoreBreakpointList_t &bkptList);
833
836 DLLEXPORT void getStatementBreakpoints(const AbstractStatement* statement, QoreBreakpointList_t &bkptList);
837
840 DLLEXPORT AbstractStatement* findStatement(const char* fileName, int line) const;
841
844 DLLEXPORT AbstractStatement* findFunctionStatement(const char* functionName, const QoreListNode* params, ExceptionSink* xsink) const;
845
847
851 DLLEXPORT unsigned long getStatementId(const AbstractStatement* statement) const;
852
854
859 DLLEXPORT AbstractStatement* resolveStatementId(unsigned long statementId) const;
860
862
865 DLLEXPORT QoreHashNode* getSourceFileNames(ExceptionSink* xsink) const;
867
870 DLLEXPORT QoreHashNode* getSourceLabels(ExceptionSink* xsink) const;
871
873
876 DLLEXPORT unsigned getProgramId() const;
877
879
884 DLLEXPORT static QoreProgram* resolveProgramId(unsigned programId);
885
887 DLLEXPORT void registerQoreObject(QoreObject *o, ExceptionSink* xsink) const;
888
890 DLLEXPORT void unregisterQoreObject(QoreObject *o, ExceptionSink* xsink) const;
891
893 DLLEXPORT QoreObject* findQoreObject() const;
894
896 DLLEXPORT static QoreObject* getQoreObject(QoreProgram* pgm);
897
899 DLLEXPORT static QoreListNode* getAllQoreObjects(ExceptionSink* xsink);
900
902 DLLEXPORT bool checkAllowDebugging(ExceptionSink* xsink);
903 };
904
906
908 class QoreProgramHelper {
909 private:
910 QoreProgram* pgm;
911 ExceptionSink& xsink;
912
913 public:
915 DLLEXPORT QoreProgramHelper(ExceptionSink& xs);
916
918 DLLEXPORT QoreProgramHelper(int64 parse_options, ExceptionSink& xs);
919
921
923 DLLEXPORT ~QoreProgramHelper();
924
926 DLLEXPORT QoreProgram* operator->();
927
929 DLLEXPORT QoreProgram* operator*();
930 };
931
933
935 class CurrentProgramRuntimeExternalParseContextHelper {
936 public:
938 DLLEXPORT CurrentProgramRuntimeExternalParseContextHelper();
939
941 DLLEXPORT ~CurrentProgramRuntimeExternalParseContextHelper();
942
944 DLLEXPORT operator bool() const;
945
946 private:
947 bool valid = true;
948
949 // not implemented
950 CurrentProgramRuntimeExternalParseContextHelper(const CurrentProgramRuntimeExternalParseContextHelper&) = delete;
951 void* operator new(size_t) = delete;
952 };
953
955
957 class QoreProgramContextHelper {
958 public:
960 DLLEXPORT QoreProgramContextHelper(QoreProgram* pgm);
962 DLLEXPORT ~QoreProgramContextHelper();
963
964 private:
965 QoreProgram* old_pgm;
966
967 // not implemented
968 QoreProgramContextHelper(const QoreProgramContextHelper&) = delete;
969 void* operator new(size_t) = delete;
970 };
971
973
981 class AbstractQoreProgramExternalData {
982 public:
984
986 DLLEXPORT virtual ~AbstractQoreProgramExternalData();
987
989
999 virtual AbstractQoreProgramExternalData* copy(QoreProgram* pgm) const = 0;
1000
1002
1006 virtual void init();
1007
1009 virtual void doDeref() = 0;
1010 };
1011
1012 typedef std::list<AbstractStatement*> AbstractStatementList_t;
1013 typedef std::list<int> TidList_t;
1014
1016
1020 class QoreBreakpoint : public AbstractPrivateData {
1021 private:
1022 qore_program_private* pgm;
1023 AbstractStatementList_t statementList;
1024 typedef std::map<int/*tid*/, int/*count*/> TidMap_t;
1025 TidMap_t tidMap;
1026 QoreObject* qo; // reference to Qore script object, it's private object but we cannot
1027 static QoreRWLock lck_breakpoint; // to protect breakpoint manipulation
1028 static QoreBreakpointList_t breakpointList;
1029 static volatile unsigned breakpointIdCounter; // to generate breakpointId
1030 unsigned breakpointId;
1031
1032 DLLLOCAL void unassignAllStatements();
1033 DLLLOCAL bool isStatementAssigned(const AbstractStatement *statement) const;
1034 DLLLOCAL bool checkPgm(ExceptionSink* xsink) const;
1035
1036 friend class qore_program_private;
1037 friend class AbstractStatement;
1038 protected:
1039 DLLLOCAL virtual ~QoreBreakpoint();
1041 DLLLOCAL virtual bool checkBreak() const;
1042 public:
1043 bool enabled;
1047 BreakpointPolicy policy;
1048
1049 DLLEXPORT QoreBreakpoint();
1053 DLLEXPORT QoreBreakpoint& operator=(const QoreBreakpoint& other);
1059 DLLEXPORT void assignProgram(QoreProgram *new_pgm, ExceptionSink* xsink);
1060 /* Get assigned program to breakpoint
1061 *
1062 */
1063 DLLEXPORT QoreProgram* getProgram() const;
1067 DLLEXPORT void assignStatement(AbstractStatement* statement, ExceptionSink* xsink);
1071 DLLEXPORT void unassignStatement(AbstractStatement* statement, ExceptionSink* xsink);
1075 DLLEXPORT void getStatements(AbstractStatementList_t &statList, ExceptionSink* xsink);
1079 DLLEXPORT QoreListNode* getStatementIds(ExceptionSink* xsink);
1083 DLLEXPORT AbstractStatement* resolveStatementId(unsigned long statementId, ExceptionSink* xsink) const;
1087 DLLEXPORT void getThreadIds(TidList_t &tidList, ExceptionSink* xsink);
1091 DLLEXPORT void setThreadIds(TidList_t tidList, ExceptionSink* xsink);
1095 DLLEXPORT void addThreadId(int tid, ExceptionSink* xsink);
1099 DLLEXPORT void removeThreadId(int tid, ExceptionSink* xsink);
1103 DLLEXPORT bool isThreadId(int tid, ExceptionSink* xsink);
1107 DLLEXPORT void clearThreadIds(ExceptionSink* xsink);
1108
1110
1113 DLLEXPORT unsigned getBreakpointId() const;
1114
1116
1121 DLLEXPORT static QoreBreakpoint* resolveBreakpointId(unsigned breakpointId);
1122
1123 DLLEXPORT void setQoreObject(QoreObject* n_qo);
1124
1125 DLLEXPORT QoreObject* getQoreObject();
1126 };
1127
1129
1131 class QoreExternalProgramContextHelper {
1132 public:
1134 DLLEXPORT QoreExternalProgramContextHelper(ExceptionSink* xsink, QoreProgram* pgm);
1135
1137 DLLEXPORT ~QoreExternalProgramContextHelper();
1138
1139 private:
1140 class ProgramThreadCountContextHelper* priv;
1141 };
1142
1144
1146 class QoreExternalProgramCallContextHelper {
1147 public:
1149 DLLEXPORT QoreExternalProgramCallContextHelper(QoreProgram* pgm);
1150
1152 DLLEXPORT ~QoreExternalProgramCallContextHelper();
1153
1154 private:
1155 class QoreExternalProgramCallContextHelperPriv* priv;
1156 };
1157
1158 #endif // _QORE_QOREPROGRAM_H
QoreProgram::deleteAllBreakpoints
DLLEXPORT void deleteAllBreakpoints()
QoreProgram::waitForTermination
DLLEXPORT void waitForTermination()
this call blocks until the program&#39;s last thread terminates
QoreProgram::getThreadList
DLLEXPORT QoreListNode * getThreadList() const
returns a list of threads active in this Program object
QoreProgramHelper::~QoreProgramHelper
DLLEXPORT ~QoreProgramHelper()
waits until all background threads in the Qore library have terminated and until the QoreProgram obje...
QoreProgram::lockOptions
DLLEXPORT void lockOptions()
locks parse options so they may not be changed
QoreProgram::getWarningMask
DLLEXPORT int getWarningMask() const
returns the warning mask
QoreProgram::depRef
DLLEXPORT void depRef()
incremements the weak reference count for the program object
QoreBreakpoint::getStatementIds
DLLEXPORT QoreListNode * getStatementIds(ExceptionSink *xsink)
QoreProgram::unregisterQoreObject
DLLEXPORT void unregisterQoreObject(QoreObject *o, ExceptionSink *xsink) const
unregister link to Qore script object
QoreBreakpoint::assignProgram
DLLEXPORT void assignProgram(QoreProgram *new_pgm, ExceptionSink *xsink)
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::addFeature
DLLEXPORT void addFeature(const char *name)
manually add the feature to the program
CurrentProgramRuntimeExternalParseContextHelper
allows for the parse lock for the current program to be acquired by binary modules ...
Definition: QoreProgram.h:935
AbstractQoreProgramExternalData::copy
virtual AbstractQoreProgramExternalData * copy(QoreProgram *pgm) const =0
For reference-counted classes, returns the same object with the reference count incremented.
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
QoreExternalConstant
external wrapper class for constants
Definition: QoreReflection.h:200
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::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...
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
QoreProgram::getScriptDir
DLLEXPORT QoreStringNode * getScriptDir() const
returns the script directory, if known (0 if not)
QoreProgram::resolveProgramId
static DLLEXPORT QoreProgram * resolveProgramId(unsigned programId)
get the program from program id
QoreProgram::~QoreProgram
virtual DLLLOCAL ~QoreProgram()
the destructor is private in order to prohibit the object from being allocated on the stack ...
QoreExternalProgramCallContextHelper
allows the program call context to be set by external modules
Definition: QoreProgram.h:1146
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...
QoreExternalProgramContextHelper
allows a program to be used and guarantees that it will stay valid until the destructor is run if suc...
Definition: QoreProgram.h:1131
QoreProgram::waitForTerminationAndDeref
DLLEXPORT void waitForTerminationAndDeref(ExceptionSink *xsink)
this call blocks until the program&#39;s last thread terminates, and then calls QoreProgram::deref() ...
AbstractPrivateData
the base class for all data to be used as private data of Qore objects
Definition: AbstractPrivateData.h:44
QoreProgramContextHelper::QoreProgramContextHelper
DLLEXPORT QoreProgramContextHelper(QoreProgram *pgm)
sets the current Program context
Restrictions.h
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 ...
QoreBreakpoint::resolveStatementId
DLLEXPORT AbstractStatement * resolveStatementId(unsigned long statementId, ExceptionSink *xsink) const
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::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
QoreBreakpoint
Class implementing breakpoint for debugging.
Definition: QoreProgram.h:1020
QoreProgram::runtimeFindCallVariants
DLLEXPORT QoreListNode * runtimeFindCallVariants(const char *name, ExceptionSink *xsink) const
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::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::programRefSelf
DLLEXPORT QoreProgram * programRefSelf() const
references "this" and returns a non-const pointer to itself
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
AbstractQoreProgramExternalData::~AbstractQoreProgramExternalData
virtual DLLEXPORT ~AbstractQoreProgramExternalData()
Destroys the object.
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::getProgramId
DLLEXPORT unsigned getProgramId() const
get the program id
QoreProgram::getRootNS
DLLEXPORT RootQoreNamespace * getRootNS() const
returns a pointer to the root namespace
QoreProgram::getStatementBreakpoints
DLLEXPORT void getStatementBreakpoints(const AbstractStatement *statement, QoreBreakpointList_t &bkptList)
QoreNamespace
contains constants, classes, and subnamespaces in QoreProgram objects
Definition: QoreNamespace.h:65
QoreProgramHelper::operator*
DLLEXPORT QoreProgram * operator*()
returns the QoreProgram object being managed
QoreProgram::depDeref
DLLEXPORT void depDeref()
dereferences a weak reference for the program object
QoreProgramContextHelper::~QoreProgramContextHelper
DLLEXPORT ~QoreProgramContextHelper()
restores the previous Program context
QoreProgram::parseFileAndRun
DLLEXPORT void parseFileAndRun(const char *filename)
parses the given filename and runs the file
AbstractQoreProgramExternalData::init
virtual void init()
Called after copy() on the new object.
QoreProgramContextHelper
allows for external modules to set the current Program context explicitly
Definition: QoreProgram.h:957
CurrentProgramRuntimeExternalParseContextHelper::~CurrentProgramRuntimeExternalParseContextHelper
DLLEXPORT ~CurrentProgramRuntimeExternalParseContextHelper()
releases the parse lock for the current program
QoreBreakpoint::assignStatement
DLLEXPORT void assignStatement(AbstractStatement *statement, ExceptionSink *xsink)
QoreBreakpoint::policy
BreakpointPolicy policy
Definition: QoreProgram.h:1047
QoreBreakpoint::setThreadIds
DLLEXPORT void setThreadIds(TidList_t tidList, ExceptionSink *xsink)
QoreProgram::setParseOptions
DLLEXPORT void setParseOptions(int64 po, ExceptionSink *xsink)
sets the parse options and adds Qore-language exception information if an error occurs ...
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
AbstractCallReferenceNode
base class for call references, reference-counted, dynamically allocated only
Definition: CallReferenceNode.h:39
QoreProgram::getFeatureList
DLLEXPORT QoreListNode * getFeatureList() const
returns a list of features in the program object
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-...
QoreProgramHelper
safely manages QoreProgram objects; note the the destructor will block until all background threads i...
Definition: QoreProgram.h:908
CurrentProgramRuntimeExternalParseContextHelper::CurrentProgramRuntimeExternalParseContextHelper
DLLEXPORT CurrentProgramRuntimeExternalParseContextHelper()
acquires the parse lock; if already acquired by another thread, then this call blocks until the lock ...
QoreProgram::parseSetTimeZone
DLLEXPORT void parseSetTimeZone(const char *zone)
sets the time zone during parsing
QoreBreakpoint::checkBreak
virtual DLLLOCAL bool checkBreak() const
check if program flow should be interrupted
QoreString
Qore&#39;s string type supported by the QoreEncoding class.
Definition: QoreString.h:81
QoreStringNode
Qore&#39;s string value type, reference counted, dynamically-allocated only.
Definition: QoreStringNode.h:50
QoreProgram::parseAndRun
DLLEXPORT void parseAndRun(FILE *fp, const char *name)
parses the given file and runs the file
getProgram
DLLEXPORT QoreProgram * getProgram()
returns the current QoreProgram
QoreProgram::getUserFunctionList
DLLEXPORT QoreListNode * getUserFunctionList()
returns a list of all user functions in this program
QoreProgram::setGlobalVarValue
DLLEXPORT int setGlobalVarValue(const char *name, QoreValue val, ExceptionSink *xsink)
sets the value of the given global variable
RootQoreNamespace
the root namespace of a QoreProgram object
Definition: QoreNamespace.h:337
QoreProgram::existsFunction
DLLEXPORT bool existsFunction(const char *name)
returns true if the given function exists as a user function, false if not
QoreBreakpoint::operator=
DLLEXPORT QoreBreakpoint & operator=(const QoreBreakpoint &other)
QoreListNode
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:52
QoreProgram::assignBreakpoint
DLLEXPORT void assignBreakpoint(QoreBreakpoint *bkpt, ExceptionSink *xsink)
QoreProgram::parseSetParseOptions
DLLEXPORT void parseSetParseOptions(int64 po)
adds the parse options given to the parse option mask
QoreProgram::getParseOptions
DLLEXPORT int getParseOptions() const
returns the parse options currently set for this program; DEPRECATED; use getParseOptions64() instead...
QoreProgram::enableWarning
DLLEXPORT int enableWarning(int code)
enables a warning by its code
QoreProgram::disableParseOptions
DLLEXPORT void disableParseOptions(int64 po, ExceptionSink *xsink)
turns off the parse options given in the passed mask and adds Qore-language exception information if ...
QoreProgram::checkWarning
DLLEXPORT bool checkWarning(int code) const
returns true if the warning code is set
QoreClass
defines a Qore-language class
Definition: QoreClass.h:239
QoreProgram::findQoreObject
DLLEXPORT QoreObject * findQoreObject() const
find Qore script object related to QoreProgram instance
QoreBreakpoint::resolveBreakpointId
static DLLEXPORT QoreBreakpoint * resolveBreakpointId(unsigned breakpointId)
get the breakpoint from breakpoint id
AbstractQoreProgramExternalData
an abstract class for program-specific external data
Definition: QoreProgram.h:981
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:65
QoreProgram::parseCommit
DLLEXPORT void parseCommit(ExceptionSink *xsink, ExceptionSink *warn_sink=0, int warn_mask=QP_WARN_ALL)
commits pending changes to the program
QoreProgram::getStatementId
DLLEXPORT unsigned long getStatementId(const AbstractStatement *statement) const
get the statement id
QoreProgram::getQoreNS
DLLEXPORT QoreNamespace * getQoreNS() const
returns a pointer to the "Qore" namespace
QoreProgram::setWarningMask
DLLEXPORT int setWarningMask(int wm)
sets the warning mask
QoreBreakpoint::getThreadIds
DLLEXPORT void getThreadIds(TidList_t &tidList, ExceptionSink *xsink)
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::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::setExternalData
DLLEXPORT void setExternalData(const char *owner, AbstractQoreProgramExternalData *pud)
sets a pointer to external data in the Program
QoreProgram::setScriptPath
DLLEXPORT void setScriptPath(const char *path)
sets the script path
QoreValue
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:267
QoreBreakpoint::unassignStatement
DLLEXPORT void unassignStatement(AbstractStatement *statement, ExceptionSink *xsink)
QoreProgram
supports parsing and executing Qore-language code, reference counted, dynamically-allocated only ...
Definition: QoreProgram.h:127
QoreProgram::getSourceLabels
DLLEXPORT QoreHashNode * getSourceLabels(ExceptionSink *xsink) const
get list of labels which appears in a statement
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::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::getQoreObject
static DLLEXPORT QoreObject * getQoreObject(QoreProgram *pgm)
get QoreObject of QoreProgram
QoreObject
the implementation of Qore&#39;s object data type, reference counted, dynamically-allocated only ...
Definition: QoreObject.h:60
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::parseDefine
DLLEXPORT void parseDefine(const char *str, QoreValue val)
defines a parse-time variable; call only at parse time (or before parsing)
ExceptionSink
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:48
QoreProgram::getScriptPath
DLLEXPORT QoreStringNode * getScriptPath() const
returns the script path (directory and name), if known (0 if not)
QoreProgram::findStatement
DLLEXPORT AbstractStatement * findStatement(const char *fileName, int line) const
QoreProgram::runClass
DLLEXPORT void runClass(const char *classname, ExceptionSink *xsink)
instantiates the class given and runs its constructor
QoreProgram::getLocalVariableVal
DLLEXPORT QoreValue getLocalVariableVal(const char *var, bool &found) const
QoreBreakpoint::getBreakpointId
DLLEXPORT unsigned getBreakpointId() const
get the breakpoint id
QoreProgram::getScriptName
DLLEXPORT QoreStringNode * getScriptName() const
returns the script file name, if known (0 if not)
QoreProgram::getAllQoreObjects
static DLLEXPORT QoreListNode * getAllQoreObjects(ExceptionSink *xsink)
list all programs as QoreObject list
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::checkAllowDebugging
DLLEXPORT bool checkAllowDebugging(ExceptionSink *xsink)
check if program can provide debugging stuff
QoreProgram::findFunctionStatement
DLLEXPORT AbstractStatement * findFunctionStatement(const char *functionName, const QoreListNode *params, ExceptionSink *xsink) const
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
QoreProgram::QoreProgram
DLLEXPORT QoreProgram()
creates the object
QoreProgram::disableWarning
DLLEXPORT int disableWarning(int code)
disables a warning by its code
QoreProgram::getThreadData
DLLEXPORT QoreHashNode * getThreadData()
returns the thread-local data for the current thread and the Program object
QoreProgram::getGlobalVars
DLLEXPORT QoreHashNode * getGlobalVars() const
retrieves a hash of global variables and their values
TypedHashDecl
typed hash declaration
Definition: TypedHashDecl.h:44
QoreExternalProgramCallContextHelper::QoreExternalProgramCallContextHelper
DLLEXPORT QoreExternalProgramCallContextHelper(QoreProgram *pgm)
sets the call context to the given program
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::getExternalData
DLLEXPORT AbstractQoreProgramExternalData * getExternalData(const char *owner) const
retrieves the external data pointer
QoreProgram::parseDisableParseOptions
DLLEXPORT void parseDisableParseOptions(int64 po)
disables the parse options given to the parse option mask
QoreBreakpoint::getStatements
DLLEXPORT void getStatements(AbstractStatementList_t &statList, ExceptionSink *xsink)
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::registerQoreObject
DLLEXPORT void registerQoreObject(QoreObject *o, ExceptionSink *xsink) const
register link to Qore script object
QoreProgramHelper::operator->
DLLEXPORT QoreProgram * operator->()
returns the QoreProgram object being managed
QoreThreadLock
provides a mutually-exclusive thread lock
Definition: QoreThreadLock.h:49
QoreRWLock
provides a simple POSIX-threads-based read-write lock
Definition: QoreRWLock.h:47
QoreProgram::getBreakpoints
DLLEXPORT void getBreakpoints(QoreBreakpointList_t &bkptList)
QoreProgramHelper::QoreProgramHelper
DLLEXPORT QoreProgramHelper(ExceptionSink &xs)
creates the QoreProgram object: DEPRECATED: use QoreProgramHelper(int64, ExceptionSink&) instead ...
QoreBreakpoint::isThreadId
DLLEXPORT bool isThreadId(int tid, ExceptionSink *xsink)
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...
QoreBreakpoint::removeThreadId
DLLEXPORT void removeThreadId(int tid, ExceptionSink *xsink)
QoreProgram::parseRollback
DLLEXPORT int parseRollback(ExceptionSink *xsink)
rolls back changes to the program object that were added with QoreProgram::parsePending() ...
QoreProgram::runTopLevel
DLLEXPORT QoreValue runTopLevel(ExceptionSink *xsink)
tuns the top level code and returns any return value
QoreBreakpoint::addThreadId
DLLEXPORT void addThreadId(int tid, ExceptionSink *xsink)
QoreProgram::parseFileAndRunClass
DLLEXPORT void parseFileAndRunClass(const char *filename, const char *classname)
parses the given filename and runs the program by instantiating the class given
QoreBreakpoint::clearThreadIds
DLLEXPORT void clearThreadIds(ExceptionSink *xsink)
QoreProgram::removeExternalData
DLLEXPORT AbstractQoreProgramExternalData * removeExternalData(const char *owner)
removes a pointer to external data in the Program; does not dereference the data
QoreProgram::checkFeature
DLLEXPORT bool checkFeature(const char *f) const
returns true if the given feature is present in the program object
QoreProgram::getSourceFileNames
DLLEXPORT QoreHashNode * getSourceFileNames(ExceptionSink *xsink) const
get list of files which appears in a statement
QoreProgram::resolveStatementId
DLLEXPORT AbstractStatement * resolveStatementId(unsigned long statementId) const
get the statement from statement id
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::runtimeFindCall
DLLEXPORT const AbstractQoreFunctionVariant * runtimeFindCall(const char *name, const QoreListNode *params, ExceptionSink *xsink) const
AbstractQoreProgramExternalData::doDeref
virtual void doDeref()=0
For non-reference counted classes, deletes the object immediately.
QoreProgram::getParseOptions64
DLLEXPORT int64 getParseOptions64() const
returns the parse options currently set for this program
QoreExternalProgramCallContextHelper::~QoreExternalProgramCallContextHelper
DLLEXPORT ~QoreExternalProgramCallContextHelper()
resets the call context to the original state
QoreExternalProgramContextHelper::~QoreExternalProgramContextHelper
DLLEXPORT ~QoreExternalProgramContextHelper()
destroys the object and releases the program to be destroyed if it was successfully acquired in the c...
currentTZ
DLLEXPORT const AbstractQoreZoneInfo * currentTZ()
returns the current local time zone, note that if 0 = UTC