diff options
Diffstat (limited to 'core/method_bind.h')
| -rw-r--r-- | core/method_bind.h | 19 | 
1 files changed, 12 insertions, 7 deletions
diff --git a/core/method_bind.h b/core/method_bind.h index 072953743c..04ff5c22c6 100644 --- a/core/method_bind.h +++ b/core/method_bind.h @@ -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;  |