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
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;
104 class QoreBreakpoint;
105 class AbstractQoreFunctionVariant;
106 class QoreRWLock;
107 class QoreExternalFunction;
108 class QoreExternalGlobalVar;
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 
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 
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 
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 
936 public:
939 
942 
944  DLLEXPORT operator bool() const;
945 
946 private:
947  bool valid = true;
948 
949  // not implemented
951  void* operator new(size_t) = delete;
952 };
953 
955 
958 public:
960  DLLEXPORT QoreProgramContextHelper(QoreProgram* pgm);
962  DLLEXPORT ~QoreProgramContextHelper();
963 
964 private:
965  QoreProgram* old_pgm;
966 
967  // not implemented
969  void* operator new(size_t) = delete;
970 };
971 
973 
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 
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 
1132 public:
1135 
1138 
1139 private:
1140  class ProgramThreadCountContextHelper* priv;
1141 };
1142 
1144 
1147 public:
1150 
1153 
1154 private:
1155  class QoreExternalProgramCallContextHelperPriv* priv;
1156 };
1157 
1158 #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:935
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 ...
allows the program call context to be set by external modules
Definition: QoreProgram.h:1146
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:1131
DLLEXPORT void waitForTerminationAndDeref(ExceptionSink *xsink)
this call blocks until the program&#39;s last thread terminates, and then calls QoreProgram::deref() ...
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:1020
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
virtual DLLEXPORT ~AbstractQoreProgramExternalData()
Destroys the object.
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:65
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
virtual void init()
Called after copy() on the new object.
allows for external modules to set the current Program context explicitly
Definition: QoreProgram.h:957
DLLEXPORT ~CurrentProgramRuntimeExternalParseContextHelper()
releases the parse lock for the current program
DLLEXPORT void assignStatement(AbstractStatement *statement, ExceptionSink *xsink)
BreakpointPolicy policy
Definition: QoreProgram.h:1047
DLLEXPORT void setThreadIds(TidList_t tidList, ExceptionSink *xsink)
DLLEXPORT void setParseOptions(int64 po, ExceptionSink *xsink)
sets the parse options and adds Qore-language exception information if an error occurs ...
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:908
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:337
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 void parseSetParseOptions(int64 po)
adds the parse options given to the parse option mask
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 void disableParseOptions(int64 po, ExceptionSink *xsink)
turns off the parse options given in the passed mask and adds Qore-language exception information if ...
DLLEXPORT bool checkWarning(int code) const
returns true if the warning code is set
defines a Qore-language class
Definition: QoreClass.h:239
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:981
virtual DLLLOCAL void deref()
decrements the reference count of the object without the possibility of throwing a Qore-language exce...
Definition: AbstractPrivateData.h:65
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:267
DLLEXPORT void unassignStatement(AbstractStatement *statement, ExceptionSink *xsink)
supports parsing and executing Qore-language code, reference counted, dynamically-allocated only ...
Definition: QoreProgram.h:127
DLLEXPORT QoreHashNode * getSourceLabels(ExceptionSink *xsink) const
get list of labels which appears in a statement
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:60
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)
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:48
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 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...
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
typed hash declaration
Definition: TypedHashDecl.h:44
DLLEXPORT QoreExternalProgramCallContextHelper(QoreProgram *pgm)
sets the call context to the given program
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:49
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 int parseRollback(ExceptionSink *xsink)
rolls back changes to the program object that were added with QoreProgram::parsePending() ...
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 AbstractQoreProgramExternalData * removeExternalData(const char *owner)
removes a pointer to external data in the Program; does not dereference the data
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 ~QoreExternalProgramCallContextHelper()
resets the call context to the original state
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