Qore Programming Language 1.19.5
Loading...
Searching...
No Matches
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 - 2023 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
39public:
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
81
82private:
84 DLLLOCAL QoreExternalVariant();
85};
86
88
91public:
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
110private:
112 DLLLOCAL QoreExternalMethodVariant();
113};
114
116
119public:
121 DLLEXPORT const QoreTypeInfo* getTypeInfo() const;
122
124 DLLEXPORT QoreValue getDefaultValue(ExceptionSink* xsink) const;
125
128
129private:
131 DLLLOCAL QoreExternalMemberBase();
132};
133
135
138public:
140 DLLEXPORT ClassAccess getAccess() const;
141
143 DLLEXPORT const char* getAccessString() const;
144
145private:
147 DLLLOCAL QoreExternalMemberVarBase();
148};
149
151
154public:
156 DLLEXPORT QoreValue getValue() const;
157
159
164 DLLEXPORT int setValue(const QoreValue val, ExceptionSink* xsink) const;
165
166private:
168 DLLLOCAL QoreExternalStaticMember();
169};
170
172
175public:
177 DLLEXPORT bool isTransient() const;
178
179private:
181 DLLLOCAL QoreExternalNormalMember();
182};
183
185
188public:
190 DLLEXPORT QoreHashNode* getHash() const;
191
192private:
195};
196
198
201public:
203 DLLEXPORT const char* getName() const;
204
206
208 DLLEXPORT const char* getModuleName() const;
209
211 DLLEXPORT bool isModulePublic() const;
212
214 DLLEXPORT bool isBuiltin() const;
215
217 DLLEXPORT const QoreTypeInfo* getTypeInfo() const;
218
220 DLLEXPORT QoreValue getReferencedValue() const;
221
223 DLLEXPORT const QoreValue getValue() const;
224
227
229 DLLEXPORT ClassAccess getAccess() const;
230
231private:
233 DLLLOCAL QoreExternalConstant();
234};
235
236class QoreExternalFunction {
237public:
239 DLLEXPORT const char* getName() const;
240
242
244 DLLEXPORT const char* getModuleName() const;
245
247 DLLEXPORT const QoreClass* getClass() const;
248
250 DLLEXPORT const QoreExternalVariant* findVariant(const type_vec_t& type_vec, ExceptionSink* xsink) const;
251
253 DLLEXPORT bool isBuiltin() const;
254
256 DLLEXPORT bool isInjected() const;
257
259 DLLEXPORT unsigned numVariants() const;
260
262
264 DLLEXPORT QoreValue evalFunction(const QoreExternalVariant* variant, const QoreListNode* args, QoreProgram* pgm,
265 ExceptionSink* xsink) const;
266
268 DLLEXPORT const QoreExternalVariant* getFirstVariant() const;
269
271
275 DLLEXPORT int64 getDomain() const;
276
278
282 DLLEXPORT int64 getCodeFlags() const;
283
284private:
286 DLLLOCAL QoreExternalFunction();
287};
288
289class QoreExternalFunctionIterator {
290public:
291 DLLEXPORT QoreExternalFunctionIterator(const QoreExternalFunction& f);
292
293 DLLEXPORT ~QoreExternalFunctionIterator();
294
295 DLLEXPORT bool next();
296
297 DLLEXPORT const QoreExternalVariant* getVariant();
298
299private:
300 class qore_external_function_iterator_private* priv;
301};
302
303class QoreExternalMethodFunction : public QoreExternalFunction {
304public:
306 DLLEXPORT const QoreMethod* getMethod() const;
307
309 DLLEXPORT QoreValue evalNormalMethod(QoreObject* obj, const QoreExternalMethodVariant* variant,
310 const QoreListNode* args, QoreProgram* pgm, ExceptionSink* xsink) const;
311
313 DLLEXPORT QoreValue evalStaticMethod(const QoreExternalMethodVariant* variant, const QoreListNode* args,
314 QoreProgram* pgm, ExceptionSink* xsink) const;
315
317 DLLEXPORT bool isStatic() const;
318
319private:
321 DLLLOCAL QoreExternalMethodFunction();
322};
323
324class QoreExternalGlobalVar {
325public:
327 DLLEXPORT const char* getName() const;
328
330 DLLEXPORT bool isModulePublic() const;
331
333 DLLEXPORT bool isBuiltin() const;
334
336 DLLEXPORT const QoreTypeInfo* getTypeInfo() const;
337
339 DLLEXPORT QoreValue getReferencedValue() const;
340
342 DLLEXPORT const QoreExternalProgramLocation* getSourceLocation() const;
343
345
350 DLLEXPORT int setValue(const QoreValue val, ExceptionSink* xsink) const;
351
352private:
354 DLLLOCAL QoreExternalGlobalVar();
355};
356
358DLLEXPORT const char* qore_type_get_name(const QoreTypeInfo* ti);
359
361
363DLLEXPORT const char* qore_type_get_path(const QoreTypeInfo* ti);
364
366DLLEXPORT bool qore_type_equal(const QoreTypeInfo* ti1, const QoreTypeInfo* ti2);
367
369DLLEXPORT bool qore_type_is_output_compatible(const QoreTypeInfo* ti1, const QoreTypeInfo* ti2);
370
372
381DLLEXPORT bool qore_type_is_assignable_from(const QoreTypeInfo* ti1, const QoreTypeInfo* ti2);
382
384
395DLLEXPORT bool qore_type_is_assignable_from(const QoreTypeInfo* ti1, const QoreTypeInfo* ti2, bool& may_not_match);
396
398
407DLLEXPORT int qore_type_is_assignable_from(const QoreTypeInfo* t, QoreValue value);
408
410
413DLLEXPORT QoreValue qore_type_assign_value(const QoreTypeInfo* t, const QoreValue value, ExceptionSink* xsink);
414
416
419DLLEXPORT qore_type_t qore_type_get_base_type(const QoreTypeInfo* t);
420
422
424DLLEXPORT QoreHashNode* qore_type_get_accept_types(const QoreTypeInfo* t);
425
427
429DLLEXPORT QoreHashNode* qore_type_get_return_types(const QoreTypeInfo* t);
430
432DLLEXPORT bool qore_type_can_convert_to_scalar(const QoreTypeInfo* ti);
433
435DLLEXPORT bool qore_type_has_default_value(const QoreTypeInfo* ti);
436
438DLLEXPORT QoreValue qore_type_get_default_value(const QoreTypeInfo* ti);
439
441DLLEXPORT bool qore_type_is_input_output_compatible(const QoreTypeInfo* ti1, const QoreTypeInfo* ti2);
442
443#endif
DLLEXPORT bool qore_type_can_convert_to_scalar(const QoreTypeInfo *ti)
returns true if the type's value can be converted to a scalar; the argument may be nullptr meaning no...
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_is_input_output_compatible(const QoreTypeInfo *ti1, const QoreTypeInfo *ti2)
returns true if the types are compatible with inputs and outputs
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't have types
DLLEXPORT QoreHashNode * qore_type_get_return_types(const QoreTypeInfo *t)
returns a hash of base types returned by the type
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
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)
DLLEXPORT QoreHashNode * qore_type_get_accept_types(const QoreTypeInfo *t)
returns a hash of base types accepted by the type
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...
DLLEXPORT const char * qore_type_get_path(const QoreTypeInfo *ti)
returns the full namespace path of the type; the argument may be nullptr meaning no type restrictions
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 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...
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:50
defines a Qore-language class
Definition: QoreClass.h:257
external wrapper class for constants
Definition: QoreReflection.h:200
DLLEXPORT const char * getName() const
returns the constant name
DLLEXPORT const QoreTypeInfo * getTypeInfo() const
returns the type info for the constant
DLLEXPORT bool isModulePublic() const
returns true if the constant has the module public flag set
DLLEXPORT const char * getModuleName() const
returns the module name, if any, otherwise returns nullptr
DLLEXPORT QoreValue getReferencedValue() const
returns the value of the constant; caller owns any reference returned
DLLEXPORT bool isBuiltin() const
returns true if the constant is builtin
DLLEXPORT const QoreValue getValue() const
returns the value of the constant
DLLEXPORT const QoreExternalProgramLocation * getSourceLocation() const
returns the source code location of the constant's definition
DLLEXPORT ClassAccess getAccess() const
returns the access info for the constant
external wrapper base class for class and hashdecl members
Definition: QoreReflection.h:118
DLLEXPORT const QoreTypeInfo * getTypeInfo() const
returns the type info for the member
DLLEXPORT const QoreExternalProgramLocation * getSourceLocation() const
returns the source location of the member's declaration
DLLEXPORT QoreValue getDefaultValue(ExceptionSink *xsink) const
evaluates the initialization expression for the member and returns the referenced value
external wrapper base class for class members
Definition: QoreReflection.h:137
DLLEXPORT const char * getAccessString() const
returns a string for the access info for the member
DLLEXPORT ClassAccess getAccess() const
returns the access info for the member
external wrapper class for method variants
Definition: QoreReflection.h:90
DLLEXPORT const QoreMethod * getMethod() const
returns the method for a method variant
DLLEXPORT const char * getAccessString() const
returns a string for the access info for the member
DLLEXPORT bool isAbstract() const
returns true if the method variant is abstract
DLLEXPORT ClassAccess getAccess() const
returns the access info for the member
DLLEXPORT bool isFinal() const
returns true if the method variant is final
DLLEXPORT bool isStatic() const
returns true if the method variant is static
external wrapper base class for class normal members
Definition: QoreReflection.h:174
DLLEXPORT bool isTransient() const
returns true if the member is transient (i.e. will not be serialized)
external wrapper class for source code location information
Definition: QoreReflection.h:187
DLLEXPORT QoreHashNode * getHash() const
returns a hash of the given source location
external wrapper base class for class static members
Definition: QoreReflection.h:153
DLLEXPORT int setValue(const QoreValue val, ExceptionSink *xsink) const
sets the value of the member
DLLEXPORT QoreValue getValue() const
returns the current value of the member; caller owns an reference returned
external wrapper class for function and call variants
Definition: QoreReflection.h:38
DLLEXPORT const QoreExternalProgramLocation * getSourceLocation() const
returns the source location of the variant
DLLEXPORT int64 getCodeFlags() const
returns binary-or-combined code flags
DLLEXPORT const arg_vec_t & getDefaultArgList() const
returns a list of default arguments for the variant
DLLEXPORT bool isSynchronized() const
returns true if the variant has the synchronized flag set
DLLEXPORT int64 getDomain() const
returns the functional domain of the variant
DLLEXPORT unsigned numParams() const
returns the number of parameters
DLLEXPORT bool isModulePublic() const
returns true if the variant has the module public flag set
DLLEXPORT const QoreClass * getClass() const
returns the class for a method variant or nullptr for a normal variant
DLLEXPORT const name_vec_t & getParamNames() const
returns a list of parameter names for the variant
DLLEXPORT bool isBuiltin() const
returns true if the variant is builtin
DLLEXPORT const type_vec_t & getParamTypeList() const
returns the parameter types for the variant
DLLEXPORT bool hasBody() const
returns true if the variant has a function body
DLLEXPORT const char * getSignatureText() const
returns the signature for the variant
DLLEXPORT const QoreTypeInfo * getReturnTypeInfo() const
returns the return type
This is the hash or associative list container type in Qore, dynamically allocated only,...
Definition: QoreHashNode.h:52
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:52
a method in a QoreClass
Definition: QoreClass.h:143
the implementation of Qore's object data type, reference counted, dynamically-allocated only
Definition: QoreObject.h:62
supports parsing and executing Qore-language code, reference counted, dynamically-allocated only
Definition: QoreProgram.h:128
int16_t qore_type_t
used to identify unique Qore data and parse types (descendents of AbstractQoreNode)
Definition: common.h:70
std::vector< const QoreTypeInfo * > type_vec_t
vector of type information for parameter lists
Definition: common.h:251
std::vector< std::string > name_vec_t
vector of parameter names for parameter lists
Definition: common.h:257
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
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:279