Qore Programming Language  0.9.1
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 - 2019 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
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;
95 class Var;
96 class LVList;
97 class UserFunctionVariant;
98 class QoreParseTypeInfo;
99 class ParamList;
100 class AbstractQoreZoneInfo;
101 class qore_program_private;
103 class QoreBreakpoint;
104 class AbstractQoreFunctionVariant;
105 class QoreRWLock;
106 class QoreExternalFunction;
107 class QoreExternalGlobalVar;
109 
110 typedef std::list<QoreBreakpoint*> bkp_list_t;
111 
112 hashdecl 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 
127  friend class qore_program_private_base;
128  friend class qore_program_private;
129  friend class qore_debug_program_private;
130  friend hashdecl 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 
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 QoreHashNode* getGlobalVars() const;
660 
662 
670  DLLEXPORT int setGlobalVarValue(const char* name, QoreValue val, ExceptionSink* xsink);
671 
672  // finds a function or class method variant if possible
681  DLLEXPORT const AbstractQoreFunctionVariant* runtimeFindCall(const char* name, const QoreListNode* params, ExceptionSink* xsink) const;
682 
683  // finds all variants of a function or class method and returns a list of the results
695  DLLEXPORT QoreListNode* runtimeFindCallVariants(const char* name, ExceptionSink* xsink) const;
696 
698 
702  DLLEXPORT QoreListNode* getThreadList() const;
703 
705 
707  DLLEXPORT const QoreClass* findClass(const char* path, ExceptionSink* xsink) const;
708 
710 
712  DLLEXPORT class_vec_t findAllClassesRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
713 
715 
717  DLLEXPORT hashdecl_vec_t findAllHashDeclsRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
718 
720 
722  DLLEXPORT func_vec_t findAllFunctionsRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
723 
725 
727  DLLEXPORT ns_vec_t findAllNamespacesRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
728 
730 
732  DLLEXPORT gvar_vec_t findAllGlobalVarsRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
733 
735 
737  DLLEXPORT const_vec_t findAllNamespaceConstantsRegex(const QoreString& pattern, int re_opts, ExceptionSink* xsink) const;
738 
740 
742  DLLEXPORT const QoreExternalFunction* findFunction(const char* path) const;
743 
745 
747  DLLEXPORT const TypedHashDecl* findHashDecl(const char* path, const QoreNamespace*& pns) const;
748 
750 
755  DLLEXPORT QoreNamespace* findNamespace(const QoreString& path);
756 
758 
760  DLLEXPORT const QoreNamespace* findNamespace(const QoreString& path) const;
761 
763 
765  DLLEXPORT const QoreExternalGlobalVar* findGlobalVar(const char* path, const QoreNamespace*& pns) const;
766 
768 
770  DLLEXPORT const QoreExternalConstant* findNamespaceConstant(const char* path, const QoreNamespace*& pns) const;
771 
773 
775  DLLEXPORT void depRef();
776 
778 
780  DLLEXPORT void depDeref();
781 
783 
787  DLLEXPORT QoreHashNode* getThreadData();
788 
789  DLLLOCAL QoreProgram(QoreProgram* pgm, int64 po, bool ec = false, const char* ecn = nullptr);
790 
791  DLLLOCAL LocalVar *createLocalVar(const char* name, const QoreTypeInfo *typeInfo);
792 
793  // returns 0 if a "requires" exception has already occurred
794  DLLLOCAL ExceptionSink* getParseExceptionSink();
795 
796  DLLLOCAL void addFile(char* f);
797  DLLLOCAL QoreListNode* getVarList();
798  DLLLOCAL void parseSetIncludePath(const char* path);
799  DLLLOCAL const char* parseGetIncludePath() const;
800 
801  /* for run-time module loading; the parse lock must be grabbed
802  before loading new modules - note this should only be assigned
803  to an AutoLock or SafeLocker object!
804  */
805  DLLLOCAL QoreThreadLock *getParseLock();
806  DLLLOCAL const LVList* getTopLevelLVList() const;
807 
809 
811  DLLLOCAL const char* parseGetScriptDir() const;
812 
813  // can only be called while parsing from the same thread doing the parsing
814  DLLLOCAL bool parseExceptionRaised() const;
815 
816  // TODO: implement !
824  DLLEXPORT QoreValue getLocalVariableVal(const char* var, bool &found) const;
825 
828  DLLEXPORT void assignBreakpoint(QoreBreakpoint *bkpt, ExceptionSink *xsink);
829 
832  DLLEXPORT void deleteAllBreakpoints();
833 
836  DLLEXPORT void getBreakpoints(QoreBreakpointList_t &bkptList);
837 
840  DLLEXPORT void getStatementBreakpoints(const AbstractStatement* statement, QoreBreakpointList_t &bkptList);
841 
844  DLLEXPORT AbstractStatement* findStatement(const char* fileName, int line) const;
845 
848  DLLEXPORT AbstractStatement* findFunctionStatement(const char* functionName, const QoreListNode* params, ExceptionSink* xsink) const;
849 
851 
855  DLLEXPORT unsigned long getStatementId(const AbstractStatement* statement) const;
856 
858 
863  DLLEXPORT AbstractStatement* resolveStatementId(unsigned long statementId) const;
864 
866 
869  DLLEXPORT QoreHashNode* getSourceFileNames(ExceptionSink* xsink) const;
871 
874  DLLEXPORT QoreHashNode* getSourceLabels(ExceptionSink* xsink) const;
875 
877 
880  DLLEXPORT unsigned getProgramId() const;
881 
883 
888  DLLEXPORT static QoreProgram* resolveProgramId(unsigned programId);
889 
891  DLLEXPORT void registerQoreObject(QoreObject *o, ExceptionSink* xsink) const;
892 
894  DLLEXPORT void unregisterQoreObject(QoreObject *o, ExceptionSink* xsink) const;
895 
897  DLLEXPORT QoreObject* findQoreObject() const;
898 
900  DLLEXPORT static QoreObject* getQoreObject(QoreProgram* pgm);
901 
903  DLLEXPORT static QoreListNode* getAllQoreObjects(ExceptionSink* xsink);
904 
906  DLLEXPORT bool checkAllowDebugging(ExceptionSink* xsink);
907 };
908 
910 
913 private:
914  QoreProgram* pgm;
915  ExceptionSink& xsink;
916 
917 public:
919  DLLEXPORT QoreProgramHelper(ExceptionSink& xs);
920 
922  DLLEXPORT QoreProgramHelper(int64 parse_options, ExceptionSink& xs);
923 
925 
927  DLLEXPORT ~QoreProgramHelper();
928 
930  DLLEXPORT QoreProgram* operator->();
931 
933  DLLEXPORT QoreProgram* operator*();
934 };
935 
937 
940 public:
943 
946 
948  DLLEXPORT operator bool() const;
949 
950 private:
951  bool valid = true;
952 
953  // not implemented
955  void* operator new(size_t) = delete;
956 };
957 
959 
962 public:
964  DLLEXPORT QoreProgramContextHelper(QoreProgram* pgm);
966  DLLEXPORT ~QoreProgramContextHelper();
967 
968 private:
969  QoreProgram* old_pgm;
970 
971  // not implemented
973  void* operator new(size_t) = delete;
974 };
975 
977 
986 public:
987  DLLEXPORT virtual ~AbstractQoreProgramExternalData();
988 
990 
995  virtual AbstractQoreProgramExternalData* copy(QoreProgram* pgm) const = 0;
996 
998  virtual void doDeref() = 0;
999 };
1000 
1001 typedef std::list<AbstractStatement*> AbstractStatementList_t;
1002 typedef std::list<int> TidList_t;
1003 
1005 
1010 private:
1011  qore_program_private* pgm;
1012  AbstractStatementList_t statementList;
1013  typedef std::map<int/*tid*/, int/*count*/> TidMap_t;
1014  TidMap_t tidMap;
1015  QoreObject* qo; // reference to Qore script object, it's private object but we cannot
1016  static QoreRWLock lck_breakpoint; // to protect breakpoint manipulation
1017  static QoreBreakpointList_t breakpointList;
1018  static volatile unsigned breakpointIdCounter; // to generate breakpointId
1019  unsigned breakpointId;
1020 
1021  DLLLOCAL void unassignAllStatements();
1022  DLLLOCAL bool isStatementAssigned(const AbstractStatement *statement) const;
1023  DLLLOCAL bool checkPgm(ExceptionSink* xsink) const;
1024 
1025  friend class qore_program_private;
1026  friend class AbstractStatement;
1027 protected:
1028  DLLLOCAL virtual ~QoreBreakpoint();
1030  DLLLOCAL virtual bool checkBreak() const;
1031 public:
1032  bool enabled;
1036  BreakpointPolicy policy;
1037 
1038  DLLEXPORT QoreBreakpoint();
1042  DLLEXPORT QoreBreakpoint& operator=(const QoreBreakpoint& other);
1048  DLLEXPORT void assignProgram(QoreProgram *new_pgm, ExceptionSink* xsink);
1049  /* Get assigned program to breakpoint
1050  *
1051  */
1052  DLLEXPORT QoreProgram* getProgram() const;
1056  DLLEXPORT void assignStatement(AbstractStatement* statement, ExceptionSink* xsink);
1060  DLLEXPORT void unassignStatement(AbstractStatement* statement, ExceptionSink* xsink);
1064  DLLEXPORT void getStatements(AbstractStatementList_t &statList, ExceptionSink* xsink);
1068  DLLEXPORT QoreListNode* getStatementIds(ExceptionSink* xsink);
1072  DLLEXPORT AbstractStatement* resolveStatementId(unsigned long statementId, ExceptionSink* xsink) const;
1076  DLLEXPORT void getThreadIds(TidList_t &tidList, ExceptionSink* xsink);
1080  DLLEXPORT void setThreadIds(TidList_t tidList, ExceptionSink* xsink);
1084  DLLEXPORT void addThreadId(int tid, ExceptionSink* xsink);
1088  DLLEXPORT void removeThreadId(int tid, ExceptionSink* xsink);
1092  DLLEXPORT bool isThreadId(int tid, ExceptionSink* xsink);
1096  DLLEXPORT void clearThreadIds(ExceptionSink* xsink);
1097 
1099 
1102  DLLEXPORT unsigned getBreakpointId() const;
1103 
1105 
1110  DLLEXPORT static QoreBreakpoint* resolveBreakpointId(unsigned breakpointId);
1111 
1112  DLLEXPORT void setQoreObject(QoreObject* n_qo);
1113 
1114  DLLEXPORT QoreObject* getQoreObject();
1115 };
1116 
1118 
1121 public:
1124 
1127 
1128 private:
1129  class ProgramThreadCountContextHelper* priv;
1130 };
1131 
1132 #endif // _QORE_QOREPROGRAM_H
DLLEXPORT void deleteAllBreakpoints()
DLLEXPORT void waitForTermination()
this call blocks until the program&#39;s last thread terminates
DLLEXPORT QoreListNode * getThreadList() const
returns a list of threads active in this Program object
DLLEXPORT ~QoreProgramHelper()
waits until all background threads in the Qore library have terminated and until the QoreProgram obje...
DLLEXPORT void lockOptions()
locks parse options so they may not be changed
DLLEXPORT int getWarningMask() const
returns the warning mask
DLLEXPORT void depRef()
incremements the weak reference count for the program object
DLLEXPORT QoreListNode * getStatementIds(ExceptionSink *xsink)
DLLEXPORT void unregisterQoreObject(QoreObject *o, ExceptionSink *xsink) const
unregister link to Qore script object
DLLEXPORT void assignProgram(QoreProgram *new_pgm, ExceptionSink *xsink)
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:939
virtual AbstractQoreProgramExternalData * copy(QoreProgram *pgm) const =0
for reference-counted classes, returns the same object with the reference count incremented ...
DLLEXPORT ns_vec_t findAllNamespacesRegex(const QoreString &pattern, int re_opts, ExceptionSink *xsink) const
returns a list of all namespaces that match the pattern
external wrapper class for constants
Definition: QoreReflection.h:200
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...
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...
DLLEXPORT QoreExternalProgramContextHelper(ExceptionSink *xsink, QoreProgram *pgm)
try to attach to the given program, if not possible, then a Qore-language exception is thrown ...
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 QoreNamespace * findNamespace(const QoreString &path)
search for the given namespace in the program; can be a simple namespace name or a namespace-prefixed...
allows a program to be used and guarantees that it will stay valid until the destructor is run if suc...
Definition: QoreProgram.h:1120
DLLEXPORT void waitForTerminationAndDeref(ExceptionSink *xsink)
this call blocks until the program&#39;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 QoreProgramContextHelper(QoreProgram *pgm)
sets the current Program context
DLLEXPORT void setExecClass(const char *ecn=0)
sets the name of the application class to be executed (instantiated) instead of top-level code ...
DLLEXPORT AbstractStatement * resolveStatementId(unsigned long statementId, ExceptionSink *xsink) const
DLLEXPORT QoreValue run(ExceptionSink *xsink)
runs the program (instantiates the program class if a program class has been set) and returns the ret...
DLLEXPORT class_vec_t findAllClassesRegex(const QoreString &pattern, int re_opts, ExceptionSink *xsink) const
returns a list of all classes that match the pattern
Class implementing breakpoint for debugging.
Definition: QoreProgram.h:1009
DLLEXPORT QoreListNode * runtimeFindCallVariants(const char *name, ExceptionSink *xsink) const
DLLEXPORT QoreValue callFunction(const char *name, const QoreListNode *args, ExceptionSink *xsink)
calls a function from the function name and returns the return value
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
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
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...
DLLEXPORT unsigned getProgramId() const
get the program id
DLLEXPORT RootQoreNamespace * getRootNS() const
returns a pointer to the root namespace
DLLEXPORT void getStatementBreakpoints(const AbstractStatement *statement, QoreBreakpointList_t &bkptList)
contains constants, classes, and subnamespaces in QoreProgram objects
Definition: QoreNamespace.h:64
DLLEXPORT QoreProgram * operator*()
returns the QoreProgram object being managed
DLLEXPORT void depDeref()
dereferences a weak reference for the program object
DLLEXPORT ~QoreProgramContextHelper()
restores the previous Program context
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:961
DLLEXPORT ~CurrentProgramRuntimeExternalParseContextHelper()
releases the parse lock for the current program
DLLEXPORT void assignStatement(AbstractStatement *statement, ExceptionSink *xsink)
BreakpointPolicy policy
Definition: QoreProgram.h:1036
DLLEXPORT void setThreadIds(TidList_t tidList, ExceptionSink *xsink)
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
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 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-...
safely manages QoreProgram objects; note the the destructor will block until all background threads i...
Definition: QoreProgram.h:912
DLLEXPORT CurrentProgramRuntimeExternalParseContextHelper()
acquires the parse lock; if already acquired by another thread, then this call blocks until the lock ...
DLLEXPORT void parseSetTimeZone(const char *zone)
sets the time zone during parsing
virtual DLLLOCAL bool checkBreak() const
check if program flow should be interrupted
Qore&#39;s string type supported by the QoreEncoding class.
Definition: QoreString.h:81
Qore&#39;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:286
DLLEXPORT bool existsFunction(const char *name)
returns true if the given function exists as a user function, false if not
DLLEXPORT QoreBreakpoint & operator=(const QoreBreakpoint &other)
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
defines a Qore-language class
Definition: QoreClass.h:237
DLLEXPORT QoreObject * findQoreObject() const
find Qore script object related to QoreProgram instance
static DLLEXPORT QoreBreakpoint * resolveBreakpointId(unsigned breakpointId)
get the breakpoint from breakpoint id
an abstract class for program-specific external data
Definition: QoreProgram.h:985
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 getThreadIds(TidList_t &tidList, ExceptionSink *xsink)
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...
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...
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:262
DLLEXPORT void unassignStatement(AbstractStatement *statement, ExceptionSink *xsink)
supports parsing and executing Qore-language code, reference counted, dynamically-allocated only ...
Definition: QoreProgram.h:126
DLLEXPORT QoreHashNode * getSourceLabels(ExceptionSink *xsink) const
get list of labels which appears in a statement
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&#39;s object data type, reference counted, dynamically-allocated only ...
Definition: QoreObject.h:61
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 void parseDefine(const char *str, QoreValue val)
defines a parse-time variable; call only at parse time (or before parsing)
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:46
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 unsigned getBreakpointId() const
get the breakpoint id
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
DLLEXPORT AbstractStatement * findFunctionStatement(const char *functionName, const QoreListNode *params, ExceptionSink *xsink) const
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
DLLEXPORT QoreProgram()
creates the object
DLLEXPORT int disableWarning(int code)
disables a warning by its code
DLLEXPORT QoreHashNode * getThreadData()
returns the thread-local data for the current thread and the Program object
DLLEXPORT QoreHashNode * getGlobalVars() const
retrieves a hash of global variables and their values
an unresolved call reference, only present temporarily in the parse tree
Definition: CallReferenceNode.h:68
typed hash declaration
Definition: TypedHashDecl.h:44
DLLEXPORT void parseSetParseOptions(int po)
adds the parse options given to the parse option mask; DEPRECATED: use parseSetParseOptions(int64) in...
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
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 getStatements(AbstractStatementList_t &statList, ExceptionSink *xsink)
DLLEXPORT func_vec_t findAllFunctionsRegex(const QoreString &pattern, int re_opts, ExceptionSink *xsink) const
returns a list of all functions that match the pattern
DLLEXPORT void registerQoreObject(QoreObject *o, ExceptionSink *xsink) const
register link to Qore script object
DLLEXPORT QoreProgram * operator->()
returns the QoreProgram object being managed
provides a mutually-exclusive thread lock
Definition: QoreThreadLock.h:47
provides a simple POSIX-threads-based read-write lock
Definition: QoreRWLock.h:47
DLLEXPORT void getBreakpoints(QoreBreakpointList_t &bkptList)
DLLEXPORT QoreProgramHelper(ExceptionSink &xs)
creates the QoreProgram object: DEPRECATED: use QoreProgramHelper(int64, ExceptionSink&) instead ...
DLLEXPORT bool isThreadId(int tid, ExceptionSink *xsink)
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 void removeThreadId(int tid, ExceptionSink *xsink)
DLLEXPORT QoreValue runTopLevel(ExceptionSink *xsink)
tuns the top level code and returns any return value
DLLEXPORT void addThreadId(int tid, ExceptionSink *xsink)
DLLEXPORT void parseFileAndRunClass(const char *filename, const char *classname)
parses the given filename and runs the program by instantiating the class given
DLLEXPORT void clearThreadIds(ExceptionSink *xsink)
DLLEXPORT bool checkFeature(const char *f) const
returns true if the given feature is present in the program object
DLLEXPORT QoreHashNode * getSourceFileNames(ExceptionSink *xsink) const
get list of files which appears in a statement
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 const AbstractQoreFunctionVariant * runtimeFindCall(const char *name, const QoreListNode *params, ExceptionSink *xsink) const
virtual void doDeref()=0
for non-reference counted classes, deletes the object immediately
DLLEXPORT int64 getParseOptions64() const
returns the parse options currently set for this program
DLLEXPORT ~QoreExternalProgramContextHelper()
destroys the object and releases the program to be destroyed if it was successfully acquired in the c...
DLLEXPORT const AbstractQoreZoneInfo * currentTZ()
returns the current local time zone, note that if 0 = UTC