32#ifndef _QORE_BUILTINFUNCTION_H
34#define _QORE_BUILTINFUNCTION_H
42class BuiltinSignature :
public AbstractFunctionSignature {
44 DLLLOCAL BuiltinSignature(
bool extra_args,
const QoreTypeInfo* n_returnTypeInfo,
const type_vec_t& n_typeList,
46 : AbstractFunctionSignature(n_returnTypeInfo, n_typeList, n_defaultArgList, n_names, extra_args) {
47 for (
unsigned i = 0; i < typeList.size(); ++i) {
48 bool hasDefaultArg = i < defaultArgList.size() && defaultArgList[i];
49 if (QoreTypeInfo::hasType(typeList[i])) {
56 str.append(QoreTypeInfo::getPath(typeList[i]));
57 if (names.size() > i && !names[i].empty()) {
63 addDefaultArgument(str, defaultArgList[i]);
67 if (i != (typeList.size() - 1)) {
72 if (!typeList.empty()) {
79 DLLLOCAL
virtual ~BuiltinSignature() {
82 DLLLOCAL
virtual const QoreTypeInfo* parseGetReturnTypeInfo(
int& err)
const {
83 return returnTypeInfo;
86 DLLLOCAL
virtual const QoreParseTypeInfo* getParseParamTypeInfo(
unsigned num)
const {
92#define COMMON_BUILTIN_VARIANT_FUNCTIONS DLLLOCAL virtual int64 getFunctionality() const { return functionality; } \
93 DLLLOCAL virtual AbstractFunctionSignature* getSignature() const { return const_cast<BuiltinSignature*>(&signature); } \
94 DLLLOCAL virtual const QoreTypeInfo* parseGetReturnTypeInfo(int& err) const { return signature.getReturnTypeInfo(); }
96class BuiltinFunctionVariantBase {
98 BuiltinSignature signature;
105 signature(flags & QCF_USES_EXTRA_ARGS, returnTypeInfo, typeList, defaultArgList, names),
106 functionality(functionality) {
111class BuiltinFunctionValueVariant :
public AbstractQoreFunctionVariant,
public BuiltinFunctionVariantBase {
119 AbstractQoreFunctionVariant(n_flags), BuiltinFunctionVariantBase(n_flags, n_functionality,
120 n_returnTypeInfo, n_typeList, n_defaultArgList, n_names), func(m) {
124 COMMON_BUILTIN_VARIANT_FUNCTIONS
126 DLLLOCAL
virtual QoreValue evalFunction(
const char* name, CodeEvaluationHelper& ceh,
ExceptionSink* xsink)
const {
127 CodeContextHelper cch(xsink, CT_BUILTIN, name);
129 return func(ceh.getArgs(), ceh.getRuntimeFlags(), xsink);
145 AbstractQoreFunctionVariant(n_flags), BuiltinFunctionVariantBase(n_flags, n_functionality, n_returnTypeInfo,
146 n_typeList, n_defaultArgList, n_names), func(m), ptr(ptr) {
150 COMMON_BUILTIN_VARIANT_FUNCTIONS
152 DLLLOCAL
virtual QoreValue evalFunction(
const char* name, CodeEvaluationHelper& ceh,
ExceptionSink* xsink)
const {
153 CodeContextHelper cch(xsink, CT_BUILTIN, name);
155 return func(ptr, ceh.getArgs(), ceh.getRuntimeFlags(), xsink);
#define QDOM_DEFAULT
the default domain (no domain)
Definition: Restrictions.h:170
External function variable.
Definition: BuiltinFunction.h:136
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:50
QoreValue(* q_func_n_t)(const QoreListNode *args, q_rt_flags_t flags, ExceptionSink *xsink)
the type used for builtin function signatures
Definition: common.h:307
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
QoreValue(* q_external_func_t)(const void *ptr, const QoreListNode *args, q_rt_flags_t flags, ExceptionSink *xsink)
the type used for builtin function signatures for external functions
Definition: common.h:319
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:276