|
@@ -52,6 +52,7 @@ enum MethodFlags {
|
|
|
METHOD_FLAG_REVERSE=16, // used for events
|
|
|
METHOD_FLAG_VIRTUAL=32,
|
|
|
METHOD_FLAG_FROM_SCRIPT=64,
|
|
|
+ METHOD_FLAG_VARARG=128,
|
|
|
METHOD_FLAGS_DEFAULT=METHOD_FLAG_NORMAL,
|
|
|
};
|
|
|
|
|
@@ -229,7 +230,7 @@ public:
|
|
|
Vector<StringName> get_argument_names() const;
|
|
|
#endif
|
|
|
void set_hint_flags(uint32_t p_hint) { hint_flags=p_hint; }
|
|
|
- uint32_t get_hint_flags() const { return hint_flags|(is_const()?METHOD_FLAG_CONST:0); }
|
|
|
+ uint32_t get_hint_flags() const { return hint_flags|(is_const()?METHOD_FLAG_CONST:0)|(is_vararg()?METHOD_FLAG_VARARG:0); }
|
|
|
virtual String get_instance_type() const=0;
|
|
|
|
|
|
_FORCE_INLINE_ int get_argument_count() const { return argument_count; };
|
|
@@ -267,7 +268,7 @@ public:
|
|
|
_FORCE_INLINE_ int get_method_id() const { return method_id; }
|
|
|
_FORCE_INLINE_ bool is_const() const { return _const; }
|
|
|
_FORCE_INLINE_ bool has_return() const { return _returns; }
|
|
|
-
|
|
|
+ virtual bool is_vararg() const { return false; }
|
|
|
|
|
|
void set_default_arguments(const Vector<Variant>& p_defargs);
|
|
|
|
|
@@ -277,7 +278,7 @@ public:
|
|
|
|
|
|
|
|
|
template<class T>
|
|
|
-class MethodBindNative : public MethodBind {
|
|
|
+class MethodBindVarArg : public MethodBind {
|
|
|
public:
|
|
|
typedef Variant (T::*NativeCall)(const Variant**,int ,Variant::CallError &);
|
|
|
protected:
|
|
@@ -319,7 +320,9 @@ public:
|
|
|
}
|
|
|
|
|
|
#ifdef PTRCALL_ENABLED
|
|
|
- virtual void ptrcall(Object* p_object,const void** p_args,void* r_ret) {} //todo
|
|
|
+ virtual void ptrcall(Object* p_object,const void** p_args,void* r_ret) {
|
|
|
+ ERR_FAIL(); //can't call
|
|
|
+ } //todo
|
|
|
#endif
|
|
|
|
|
|
|
|
@@ -327,14 +330,16 @@ public:
|
|
|
virtual bool is_const() const { return false; }
|
|
|
virtual String get_instance_type() const { return T::get_type_static(); }
|
|
|
|
|
|
- MethodBindNative() { call_method=NULL; _set_returns(true);}
|
|
|
+ virtual bool is_vararg() const { return true; }
|
|
|
+
|
|
|
+ MethodBindVarArg() { call_method=NULL; _set_returns(true);}
|
|
|
};
|
|
|
|
|
|
|
|
|
template<class T >
|
|
|
-MethodBind* create_native_method_bind( Variant (T::*p_method)(const Variant**,int ,Variant::CallError &), const MethodInfo& p_info ) {
|
|
|
+MethodBind* create_vararg_method_bind( Variant (T::*p_method)(const Variant**,int ,Variant::CallError &), const MethodInfo& p_info ) {
|
|
|
|
|
|
- MethodBindNative<T > * a = memnew( (MethodBindNative<T >) );
|
|
|
+ MethodBindVarArg<T > * a = memnew( (MethodBindVarArg<T >) );
|
|
|
a->set_method(p_method);
|
|
|
a->set_method_info(p_info);
|
|
|
return a;
|