|
@@ -64,18 +64,16 @@ class MethodBind {
|
|
|
bool _returns = false;
|
|
|
|
|
|
protected:
|
|
|
-#ifdef DEBUG_METHODS_ENABLED
|
|
|
Variant::Type *argument_types = nullptr;
|
|
|
+#ifdef DEBUG_METHODS_ENABLED
|
|
|
Vector<StringName> arg_names;
|
|
|
#endif
|
|
|
void _set_const(bool p_const);
|
|
|
void _set_returns(bool p_returns);
|
|
|
-#ifdef DEBUG_METHODS_ENABLED
|
|
|
virtual Variant::Type _gen_argument_type(int p_arg) const = 0;
|
|
|
virtual PropertyInfo _gen_argument_type_info(int p_arg) const = 0;
|
|
|
void _generate_argument_types(int p_count);
|
|
|
|
|
|
-#endif
|
|
|
void set_argument_count(int p_count) { argument_count = p_count; }
|
|
|
|
|
|
public:
|
|
@@ -102,7 +100,6 @@ public:
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-#ifdef DEBUG_METHODS_ENABLED
|
|
|
_FORCE_INLINE_ Variant::Type get_argument_type(int p_argument) const {
|
|
|
ERR_FAIL_COND_V(p_argument < -1 || p_argument > argument_count, Variant::NIL);
|
|
|
return argument_types[p_argument + 1];
|
|
@@ -111,6 +108,7 @@ public:
|
|
|
PropertyInfo get_argument_info(int p_argument) const;
|
|
|
PropertyInfo get_return_info() const;
|
|
|
|
|
|
+#ifdef DEBUG_METHODS_ENABLED
|
|
|
void set_argument_names(const Vector<StringName> &p_names); // Set by ClassDB, can't be inferred otherwise.
|
|
|
Vector<StringName> get_argument_names() const;
|
|
|
|
|
@@ -149,12 +147,9 @@ public:
|
|
|
|
|
|
protected:
|
|
|
NativeCall call_method = nullptr;
|
|
|
-#ifdef DEBUG_METHODS_ENABLED
|
|
|
MethodInfo arguments;
|
|
|
-#endif
|
|
|
|
|
|
public:
|
|
|
-#ifdef DEBUG_METHODS_ENABLED
|
|
|
virtual PropertyInfo _gen_argument_type_info(int p_arg) const {
|
|
|
if (p_arg < 0) {
|
|
|
return arguments.return_val;
|
|
@@ -169,13 +164,10 @@ public:
|
|
|
return _gen_argument_type_info(p_arg).type;
|
|
|
}
|
|
|
|
|
|
+#ifdef DEBUG_METHODS_ENABLED
|
|
|
virtual GodotTypeInfo::Metadata get_argument_meta(int) const {
|
|
|
return GodotTypeInfo::METADATA_NONE;
|
|
|
}
|
|
|
-#else
|
|
|
- virtual Variant::Type _gen_argument_type(int p_arg) const {
|
|
|
- return Variant::NIL;
|
|
|
- }
|
|
|
#endif
|
|
|
|
|
|
virtual Variant call(Object *p_object, const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
|
|
@@ -185,25 +177,29 @@ public:
|
|
|
|
|
|
void set_method_info(const MethodInfo &p_info, bool p_return_nil_is_variant) {
|
|
|
set_argument_count(p_info.arguments.size());
|
|
|
-#ifdef DEBUG_METHODS_ENABLED
|
|
|
Variant::Type *at = memnew_arr(Variant::Type, p_info.arguments.size() + 1);
|
|
|
at[0] = p_info.return_val.type;
|
|
|
if (p_info.arguments.size()) {
|
|
|
+#ifdef DEBUG_METHODS_ENABLED
|
|
|
Vector<StringName> names;
|
|
|
names.resize(p_info.arguments.size());
|
|
|
+#endif
|
|
|
for (int i = 0; i < p_info.arguments.size(); i++) {
|
|
|
at[i + 1] = p_info.arguments[i].type;
|
|
|
+#ifdef DEBUG_METHODS_ENABLED
|
|
|
names.write[i] = p_info.arguments[i].name;
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
+#ifdef DEBUG_METHODS_ENABLED
|
|
|
set_argument_names(names);
|
|
|
+#endif
|
|
|
}
|
|
|
argument_types = at;
|
|
|
arguments = p_info;
|
|
|
if (p_return_nil_is_variant) {
|
|
|
arguments.return_val.usage |= PROPERTY_USAGE_NIL_IS_VARIANT;
|
|
|
}
|
|
|
-#endif
|
|
|
}
|
|
|
|
|
|
virtual void ptrcall(Object *p_object, const void **p_args, void *r_ret) {
|
|
@@ -248,7 +244,6 @@ class MethodBindT : public MethodBind {
|
|
|
void (MB_T::*method)(P...);
|
|
|
|
|
|
protected:
|
|
|
-#ifdef DEBUG_METHODS_ENABLED
|
|
|
// GCC raises warnings in the case P = {} as the comparison is always false...
|
|
|
#if defined(__GNUC__) && !defined(__clang__)
|
|
|
#pragma GCC diagnostic push
|
|
@@ -270,7 +265,6 @@ protected:
|
|
|
call_get_argument_type_info<P...>(p_arg, pi);
|
|
|
return pi;
|
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
public:
|
|
|
#ifdef DEBUG_METHODS_ENABLED
|
|
@@ -298,9 +292,7 @@ public:
|
|
|
|
|
|
MethodBindT(void (MB_T::*p_method)(P...)) {
|
|
|
method = p_method;
|
|
|
-#ifdef DEBUG_METHODS_ENABLED
|
|
|
_generate_argument_types(sizeof...(P));
|
|
|
-#endif
|
|
|
set_argument_count(sizeof...(P));
|
|
|
}
|
|
|
};
|
|
@@ -327,7 +319,6 @@ class MethodBindTC : public MethodBind {
|
|
|
void (MB_T::*method)(P...) const;
|
|
|
|
|
|
protected:
|
|
|
-#ifdef DEBUG_METHODS_ENABLED
|
|
|
// GCC raises warnings in the case P = {} as the comparison is always false...
|
|
|
#if defined(__GNUC__) && !defined(__clang__)
|
|
|
#pragma GCC diagnostic push
|
|
@@ -349,7 +340,6 @@ protected:
|
|
|
call_get_argument_type_info<P...>(p_arg, pi);
|
|
|
return pi;
|
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
public:
|
|
|
#ifdef DEBUG_METHODS_ENABLED
|
|
@@ -378,9 +368,7 @@ public:
|
|
|
MethodBindTC(void (MB_T::*p_method)(P...) const) {
|
|
|
method = p_method;
|
|
|
_set_const(true);
|
|
|
-#ifdef DEBUG_METHODS_ENABLED
|
|
|
_generate_argument_types(sizeof...(P));
|
|
|
-#endif
|
|
|
set_argument_count(sizeof...(P));
|
|
|
}
|
|
|
};
|
|
@@ -408,7 +396,6 @@ class MethodBindTR : public MethodBind {
|
|
|
(P...);
|
|
|
|
|
|
protected:
|
|
|
-#ifdef DEBUG_METHODS_ENABLED
|
|
|
// GCC raises warnings in the case P = {} as the comparison is always false...
|
|
|
#if defined(__GNUC__) && !defined(__clang__)
|
|
|
#pragma GCC diagnostic push
|
|
@@ -434,7 +421,6 @@ protected:
|
|
|
#if defined(__GNUC__) && !defined(__clang__)
|
|
|
#pragma GCC diagnostic pop
|
|
|
#endif
|
|
|
-#endif
|
|
|
|
|
|
public:
|
|
|
#ifdef DEBUG_METHODS_ENABLED
|
|
@@ -468,9 +454,7 @@ public:
|
|
|
MethodBindTR(R (MB_T::*p_method)(P...)) {
|
|
|
method = p_method;
|
|
|
_set_returns(true);
|
|
|
-#ifdef DEBUG_METHODS_ENABLED
|
|
|
_generate_argument_types(sizeof...(P));
|
|
|
-#endif
|
|
|
set_argument_count(sizeof...(P));
|
|
|
}
|
|
|
};
|
|
@@ -499,7 +483,6 @@ class MethodBindTRC : public MethodBind {
|
|
|
(P...) const;
|
|
|
|
|
|
protected:
|
|
|
-#ifdef DEBUG_METHODS_ENABLED
|
|
|
// GCC raises warnings in the case P = {} as the comparison is always false...
|
|
|
#if defined(__GNUC__) && !defined(__clang__)
|
|
|
#pragma GCC diagnostic push
|
|
@@ -525,7 +508,6 @@ protected:
|
|
|
#if defined(__GNUC__) && !defined(__clang__)
|
|
|
#pragma GCC diagnostic pop
|
|
|
#endif
|
|
|
-#endif
|
|
|
|
|
|
public:
|
|
|
#ifdef DEBUG_METHODS_ENABLED
|
|
@@ -560,9 +542,7 @@ public:
|
|
|
method = p_method;
|
|
|
_set_returns(true);
|
|
|
_set_const(true);
|
|
|
-#ifdef DEBUG_METHODS_ENABLED
|
|
|
_generate_argument_types(sizeof...(P));
|
|
|
-#endif
|
|
|
set_argument_count(sizeof...(P));
|
|
|
}
|
|
|
};
|