diff options
Diffstat (limited to 'core/variant/callable.cpp')
| -rw-r--r-- | core/variant/callable.cpp | 33 | 
1 files changed, 31 insertions, 2 deletions
diff --git a/core/variant/callable.cpp b/core/variant/callable.cpp index bd51e2dd1e..5c87042f6b 100644 --- a/core/variant/callable.cpp +++ b/core/variant/callable.cpp @@ -50,10 +50,33 @@ void Callable::call(const Variant **p_arguments, int p_argcount, Variant &r_retu  		custom->call(p_arguments, p_argcount, r_return_value, r_call_error);  	} else {  		Object *obj = ObjectDB::get_instance(ObjectID(object)); +#ifdef DEBUG_ENABLED +		if (!obj) { +			r_call_error.error = CallError::CALL_ERROR_INSTANCE_IS_NULL; +			r_call_error.argument = 0; +			r_call_error.expected = 0; +			r_return_value = Variant(); +			return; +		} +#endif  		r_return_value = obj->call(method, p_arguments, p_argcount, r_call_error);  	}  } +void Callable::rpc(int p_id, const Variant **p_arguments, int p_argcount, CallError &r_call_error) const { +	if (is_null()) { +		r_call_error.error = CallError::CALL_ERROR_INSTANCE_IS_NULL; +		r_call_error.argument = 0; +		r_call_error.expected = 0; +	} else if (!is_custom()) { +		r_call_error.error = CallError::CALL_ERROR_INVALID_METHOD; +		r_call_error.argument = 0; +		r_call_error.expected = 0; +	} else { +		custom->rpc(p_id, p_arguments, p_argcount, r_call_error); +	} +} +  Callable Callable::bind(const Variant **p_arguments, int p_argcount) const {  	Vector<Variant> args;  	args.resize(p_argcount); @@ -126,7 +149,7 @@ bool Callable::operator==(const Callable &p_callable) const {  	if (custom_a == custom_b) {  		if (custom_a) {  			if (custom == p_callable.custom) { -				return true; //same pointer, dont even compare +				return true; //same pointer, don't even compare  			}  			CallableCustom::CompareEqualFunc eq_a = custom->get_compare_equal_func(); @@ -155,7 +178,7 @@ bool Callable::operator<(const Callable &p_callable) const {  	if (custom_a == custom_b) {  		if (custom_a) {  			if (custom == p_callable.custom) { -				return false; //same pointer, dont even compare +				return false; //same pointer, don't even compare  			}  			CallableCustom::CompareLessFunc less_a = custom->get_compare_less_func(); @@ -283,6 +306,12 @@ Callable::~Callable() {  	}  } +void CallableCustom::rpc(int p_peer_id, const Variant **p_arguments, int p_argcount, Callable::CallError &r_call_error) const { +	r_call_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD; +	r_call_error.argument = 0; +	r_call_error.expected = 0; +} +  const Callable *CallableCustom::get_base_comparator() const {  	return nullptr;  }  |