32 #ifndef _QORE_BUILTINFUNCTION_H 34 #define _QORE_BUILTINFUNCTION_H 42 class BuiltinSignature :
public AbstractFunctionSignature {
44 DLLLOCAL BuiltinSignature(
bool extra_args,
const QoreTypeInfo* n_returnTypeInfo,
const type_vec_t& n_typeList,
const arg_vec_t& n_defaultArgList,
const name_vec_t& n_names) : AbstractFunctionSignature(n_returnTypeInfo, n_typeList, n_defaultArgList, n_names) {
45 for (
unsigned i = 0; i < typeList.size(); ++i) {
46 bool hasDefaultArg = i < defaultArgList.size() && defaultArgList[i];
53 QoreTypeInfo::concatName(typeList[i], str);
54 if (names.size() > i && !names[i].empty()) {
60 addDefaultArgument(defaultArgList[i]);
63 if (i != (typeList.size() - 1))
67 if (!typeList.empty())
73 DLLLOCAL
virtual ~BuiltinSignature() {
76 DLLLOCAL
virtual const QoreTypeInfo* parseGetReturnTypeInfo()
const {
77 return returnTypeInfo;
80 DLLLOCAL
virtual const QoreParseTypeInfo* getParseParamTypeInfo(
unsigned num)
const {
86 #define COMMON_BUILTIN_VARIANT_FUNCTIONS DLLLOCAL virtual int64 getFunctionality() const { return functionality; } \ 87 DLLLOCAL virtual AbstractFunctionSignature* getSignature() const { return const_cast<BuiltinSignature*>(&signature); } \ 88 DLLLOCAL virtual const QoreTypeInfo* parseGetReturnTypeInfo() const { return signature.getReturnTypeInfo(); } 90 class BuiltinFunctionVariantBase {
92 BuiltinSignature signature;
97 signature(n_functionality & QCF_USES_EXTRA_ARGS, n_returnTypeInfo, n_typeList, n_defaultArgList, n_names), functionality(n_functionality) {
102 class BuiltinFunctionValueVariant :
public AbstractQoreFunctionVariant,
public BuiltinFunctionVariantBase {
108 AbstractQoreFunctionVariant(n_flags), BuiltinFunctionVariantBase(n_functionality, n_returnTypeInfo, n_typeList, n_defaultArgList, n_names), func(m) {
112 COMMON_BUILTIN_VARIANT_FUNCTIONS
114 DLLLOCAL
virtual QoreValue evalFunction(
const char* name, CodeEvaluationHelper& ceh,
ExceptionSink* xsink)
const {
115 CodeContextHelper cch(xsink, CT_BUILTIN, name);
117 return func(ceh.getArgs(), ceh.getRuntimeFlags(), xsink);
121 #endif // _QORE_BUILTIN_FUNCTION The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:262
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:46
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
std::vector< const QoreTypeInfo * > type_vec_t
vector of type information for parameter lists
Definition: common.h:251
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
#define QDOM_DEFAULT
the default domain (no domain)
Definition: Restrictions.h:155