Qore Programming Language  0.9.4.6
QoreReflection.h
Go to the documentation of this file.
1 /* -*- mode: c++; indent-tabs-mode: nil -*- */
3 /*
4  Qore Programming Language
5 
6  Copyright (C) 2003 - 2019 Qore Technologies, s.r.o.
7 
8  Permission is hereby granted, free of charge, to any person obtaining a
9  copy of this software and associated documentation files (the "Software"),
10  to deal in the Software without restriction, including without limitation
11  the rights to use, copy, modify, merge, publish, distribute, sublicense,
12  and/or sell copies of the Software, and to permit persons to whom the
13  Software is furnished to do so, subject to the following conditions:
14 
15  The above copyright notice and this permission notice shall be included in
16  all copies or substantial portions of the Software.
17 
18  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24  DEALINGS IN THE SOFTWARE.
25 
26  Note that the Qore library is released under a choice of three open-source
27  licenses: MIT (as above), LGPL 2+, or GPL 2+; see README-LICENSE for more
28  information.
29 */
30 
31 #ifndef _QORE_QOREREFLECTION_H
32 
33 #define _QORE_QOREREFLECTION_H
34 
36 
39 public:
41  DLLEXPORT const QoreClass* getClass() const;
42 
44  DLLEXPORT const char* getSignatureText() const;
45 
47  DLLEXPORT int64 getCodeFlags() const;
48 
50  DLLEXPORT bool isModulePublic() const;
51 
53  DLLEXPORT bool isSynchronized() const;
54 
56  DLLEXPORT bool isBuiltin() const;
57 
59  DLLEXPORT bool hasBody() const;
60 
62  DLLEXPORT int64 getDomain() const;
63 
65  DLLEXPORT unsigned numParams() const;
66 
68  DLLEXPORT const QoreTypeInfo* getReturnTypeInfo() const;
69 
71  DLLEXPORT const type_vec_t& getParamTypeList() const;
72 
74  DLLEXPORT const arg_vec_t& getDefaultArgList() const;
75 
77  DLLEXPORT const name_vec_t& getParamNames() const;
78 
80  DLLEXPORT const QoreExternalProgramLocation* getSourceLocation() const;
81 
82 private:
84  DLLLOCAL QoreExternalVariant();
85 };
86 
88 
91 public:
93  DLLEXPORT const QoreMethod* getMethod() const;
94 
96  DLLEXPORT bool isAbstract() const;
97 
99  DLLEXPORT bool isFinal() const;
100 
102  DLLEXPORT bool isStatic() const;
103 
105  DLLEXPORT ClassAccess getAccess() const;
106 
108  DLLEXPORT const char* getAccessString() const;
109 
110 private:
112  DLLLOCAL QoreExternalMethodVariant();
113 };
114 
116 
119 public:
121  DLLEXPORT const QoreTypeInfo* getTypeInfo() const;
122 
124  DLLEXPORT QoreValue getDefaultValue(ExceptionSink* xsink) const;
125 
127  DLLEXPORT const QoreExternalProgramLocation* getSourceLocation() const;
128 
129 private:
131  DLLLOCAL QoreExternalMemberBase();
132 };
133 
135 
138 public:
140  DLLEXPORT ClassAccess getAccess() const;
141 
143  DLLEXPORT const char* getAccessString() const;
144 
145 private:
147  DLLLOCAL QoreExternalMemberVarBase();
148 };
149 
151 
154 public:
156  DLLEXPORT QoreValue getValue() const;
157 
159 
164  DLLEXPORT int setValue(const QoreValue val, ExceptionSink* xsink) const;
165 
166 private:
168  DLLLOCAL QoreExternalStaticMember();
169 };
170 
172 
175 public:
177  DLLEXPORT bool isTransient() const;
178 
179 private:
181  DLLLOCAL QoreExternalNormalMember();
182 };
183 
185 
188 public:
190  DLLEXPORT QoreHashNode* getHash() const;
191 
192 private:
194  DLLLOCAL QoreExternalProgramLocation();
195 };
196 
198 
201 public:
203  DLLEXPORT const char* getName() const;
204 
206  DLLEXPORT bool isModulePublic() const;
207 
209  DLLEXPORT bool isBuiltin() const;
210 
212  DLLEXPORT const QoreTypeInfo* getTypeInfo() const;
213 
215  DLLEXPORT QoreValue getReferencedValue() const;
216 
218  DLLEXPORT const QoreExternalProgramLocation* getSourceLocation() const;
219 
221  DLLEXPORT ClassAccess getAccess() const;
222 
223 private:
225  DLLLOCAL QoreExternalConstant();
226 };
227 
228 class QoreExternalFunction {
229 public:
231  DLLEXPORT const char* getName() const;
232 
234  DLLEXPORT const QoreClass* getClass() const;
235 
237  DLLEXPORT const QoreExternalVariant* findVariant(const type_vec_t& type_vec, ExceptionSink* xsink) const;
238 
240  DLLEXPORT bool isBuiltin() const;
241 
243  DLLEXPORT bool isInjected() const;
244 
246  DLLEXPORT unsigned numVariants() const;
247 
249  DLLEXPORT QoreValue evalFunction(const QoreExternalVariant* variant, const QoreListNode* args, QoreProgram* pgm, ExceptionSink* xsink) const;
250 
252  DLLEXPORT const QoreExternalVariant* getFirstVariant() const;
253 
254 private:
256  DLLLOCAL QoreExternalFunction();
257 };
258 
259 class QoreExternalFunctionIterator {
260 public:
261  DLLEXPORT QoreExternalFunctionIterator(const QoreExternalFunction& f);
262 
263  DLLEXPORT ~QoreExternalFunctionIterator();
264 
265  DLLEXPORT bool next();
266 
267  DLLEXPORT const QoreExternalVariant* getVariant();
268 
269 private:
270  class qore_external_function_iterator_private* priv;
271 };
272 
273 class QoreExternalMethodFunction : public QoreExternalFunction {
274 public:
276  DLLEXPORT const QoreMethod* getMethod() const;
277 
279  DLLEXPORT bool isStatic() const;
280 
281 private:
283  DLLLOCAL QoreExternalMethodFunction();
284 };
285 
286 class QoreExternalGlobalVar {
287 public:
289  DLLEXPORT const char* getName() const;
290 
292  DLLEXPORT bool isModulePublic() const;
293 
295  DLLEXPORT bool isBuiltin() const;
296 
298  DLLEXPORT const QoreTypeInfo* getTypeInfo() const;
299 
301  DLLEXPORT QoreValue getReferencedValue() const;
302 
304  DLLEXPORT const QoreExternalProgramLocation* getSourceLocation() const;
305 
307 
312  DLLEXPORT int setValue(const QoreValue val, ExceptionSink* xsink) const;
313 
314 private:
316  DLLLOCAL QoreExternalGlobalVar();
317 };
318 
320 DLLEXPORT const char* qore_type_get_name(const QoreTypeInfo* ti);
321 
323 DLLEXPORT bool qore_type_equal(const QoreTypeInfo* ti1, const QoreTypeInfo* ti2);
324 
326 DLLEXPORT bool qore_type_is_output_compatible(const QoreTypeInfo* ti1, const QoreTypeInfo* ti2);
327 
329 
338 DLLEXPORT bool qore_type_is_assignable_from(const QoreTypeInfo* ti1, const QoreTypeInfo* ti2);
339 
341 
352 DLLEXPORT bool qore_type_is_assignable_from(const QoreTypeInfo* ti1, const QoreTypeInfo* ti2, bool& may_not_match);
353 
355 
364 DLLEXPORT int qore_type_is_assignable_from(const QoreTypeInfo* t, QoreValue value);
365 
367 
370 DLLEXPORT QoreValue qore_type_assign_value(const QoreTypeInfo* t, const QoreValue value, ExceptionSink* xsink);
371 
373 
376 DLLEXPORT qore_type_t qore_type_get_base_type(const QoreTypeInfo* t);
377 
379 
381 DLLEXPORT QoreHashNode* qore_type_get_accept_types(const QoreTypeInfo* t);
382 
384 
386 DLLEXPORT QoreHashNode* qore_type_get_return_types(const QoreTypeInfo* t);
387 
389 DLLEXPORT bool qore_type_can_convert_to_scalar(const QoreTypeInfo* ti);
390 
392 DLLEXPORT bool qore_type_has_default_value(const QoreTypeInfo* ti);
393 
395 DLLEXPORT QoreValue qore_type_get_default_value(const QoreTypeInfo* ti);
396 
398 DLLEXPORT bool qore_type_is_input_output_compatible(const QoreTypeInfo* ti1, const QoreTypeInfo* ti2);
399 
400 #endif
DLLEXPORT const char * qore_type_get_name(const QoreTypeInfo *ti)
returns the name of the type; the argument may be nullptr meaning no type restrictions ...
DLLEXPORT bool qore_type_has_default_value(const QoreTypeInfo *ti)
returns true if the type has a default value; the argument may be nullptr meaning no type restriction...
external wrapper base class for class normal members
Definition: QoreReflection.h:174
DLLEXPORT const type_vec_t & getParamTypeList() const
returns the parameter types for the variant
external wrapper class for constants
Definition: QoreReflection.h:200
This is the hash or associative list container type in Qore, dynamically allocated only...
Definition: QoreHashNode.h:50
DLLEXPORT bool isBuiltin() const
returns true if the variant is builtin
DLLEXPORT bool qore_type_is_assignable_from(const QoreTypeInfo *ti1, const QoreTypeInfo *ti2)
returns true if ti2's return type is compatible with ti1 input (i.e. ti1 is assignable from ti2) ...
external wrapper base class for class static members
Definition: QoreReflection.h:153
external wrapper class for function and call variants
Definition: QoreReflection.h:38
DLLEXPORT bool isSynchronized() const
returns true if the variant has the synchronized flag set
DLLEXPORT unsigned numParams() const
returns the number of parameters
DLLEXPORT const name_vec_t & getParamNames() const
returns a list of parameter names for the variant
DLLEXPORT bool hasBody() const
returns true if the variant has a function body
external wrapper base class for class and hashdecl members
Definition: QoreReflection.h:118
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:52
external wrapper base class for class members
Definition: QoreReflection.h:137
DLLEXPORT const QoreExternalProgramLocation * getSourceLocation() const
returns the source location of the variant
DLLEXPORT bool qore_type_is_output_compatible(const QoreTypeInfo *ti1, const QoreTypeInfo *ti2)
returns true if ti2's return type is compatible with ti1's; either argument may be nullptr meaning no...
defines a Qore-language class
Definition: QoreClass.h:239
DLLEXPORT int64 getCodeFlags() const
returns binary-or-combined code flags
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:262
supports parsing and executing Qore-language code, reference counted, dynamically-allocated only ...
Definition: QoreProgram.h:126
DLLEXPORT QoreHashNode * qore_type_get_accept_types(const QoreTypeInfo *t)
returns a hash of base types accepted by the type
external wrapper class for method variants
Definition: QoreReflection.h:90
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:46
DLLEXPORT bool isModulePublic() const
returns true if the variant has the module public flag set
DLLEXPORT bool qore_type_is_input_output_compatible(const QoreTypeInfo *ti1, const QoreTypeInfo *ti2)
returns true if the types are compatible with inputs and outputs
std::vector< std::string > name_vec_t
vector of parameter names for parameter lists
Definition: common.h:257
external wrapper class for source code location information
Definition: QoreReflection.h:187
DLLEXPORT const arg_vec_t & getDefaultArgList() const
returns a list of default arguments for the variant
DLLEXPORT qore_type_t qore_type_get_base_type(const QoreTypeInfo *t)
returns the base type code for the type or NT_ALL for those that don&#39;t have types ...
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
std::vector< QoreValue > arg_vec_t
vector of value information for default argument lists
Definition: common.h:254
DLLEXPORT QoreHashNode * qore_type_get_return_types(const QoreTypeInfo *t)
returns a hash of base types returned by the type
DLLEXPORT const QoreClass * getClass() const
returns the class for a method variant or nullptr for a normal variant
DLLEXPORT bool qore_type_equal(const QoreTypeInfo *ti1, const QoreTypeInfo *ti2)
returns true if the types are equal; either argument may be nullptr meaning no type restrictions ...
int16_t qore_type_t
used to identify unique Qore data and parse types (descendents of AbstractQoreNode) ...
Definition: common.h:70
DLLEXPORT const QoreTypeInfo * getReturnTypeInfo() const
returns the return type
DLLEXPORT bool qore_type_can_convert_to_scalar(const QoreTypeInfo *ti)
returns true if the type&#39;s value can be converted to a scalar; the argument may be nullptr meaning no...
std::vector< const QoreTypeInfo * > type_vec_t
vector of type information for parameter lists
Definition: common.h:251
a method in a QoreClass
Definition: QoreClass.h:125
DLLEXPORT QoreValue qore_type_assign_value(const QoreTypeInfo *t, const QoreValue value, ExceptionSink *xsink)
processes the given value by the given type and returns the result; a Qore-language exception is thro...
DLLEXPORT QoreValue qore_type_get_default_value(const QoreTypeInfo *ti)
returns the default value of the type (if any); the caller owns any reference returned; the argument ...
DLLEXPORT const char * getSignatureText() const
returns the signature for the variant
DLLEXPORT int64 getDomain() const
returns the functional domain of the variant