diff options
| author | Pedro J. Estébanez <pedrojrulez@gmail.com> | 2023-01-18 22:04:09 +0100 |
|---|---|---|
| committer | Pedro J. Estébanez <pedrojrulez@gmail.com> | 2023-04-12 18:12:19 +0200 |
| commit | 33f674d0f7e94b768cd957a920fed8a215760ee2 (patch) | |
| tree | 6168ce65a1292dcdf1790a8e13d83b185b04f0f9 /core/variant | |
| parent | d4dad2b2f88968ff329145f3dab5290478bae886 (diff) | |
| download | redot-engine-33f674d0f7e94b768cd957a920fed8a215760ee2.tar.gz | |
Complete support of callables of static methods
Diffstat (limited to 'core/variant')
| -rw-r--r-- | core/variant/callable.cpp | 11 | ||||
| -rw-r--r-- | core/variant/callable.h | 3 | ||||
| -rw-r--r-- | core/variant/callable_bind.cpp | 8 | ||||
| -rw-r--r-- | core/variant/callable_bind.h | 6 |
4 files changed, 24 insertions, 4 deletions
diff --git a/core/variant/callable.cpp b/core/variant/callable.cpp index 2f2acc55a6..630873ec2e 100644 --- a/core/variant/callable.cpp +++ b/core/variant/callable.cpp @@ -122,7 +122,11 @@ Callable Callable::unbind(int p_argcount) const { } bool Callable::is_valid() const { - return get_object() && (is_custom() || get_object()->has_method(get_method())); + if (is_custom()) { + return get_custom()->is_valid(); + } else { + return get_object() && get_object()->has_method(get_method()); + } } Object *Callable::get_object() const { @@ -373,6 +377,11 @@ Callable::~Callable() { } } +bool CallableCustom::is_valid() const { + // Sensible default implementation so most custom callables don't need their own. + return ObjectDB::get_instance(get_object()); +} + StringName CallableCustom::get_method() const { ERR_FAIL_V_MSG(StringName(), vformat("Can't get method on CallableCustom \"%s\".", get_as_text())); } diff --git a/core/variant/callable.h b/core/variant/callable.h index 0abbb64c0b..086e5d2a00 100644 --- a/core/variant/callable.h +++ b/core/variant/callable.h @@ -145,8 +145,9 @@ public: virtual String get_as_text() const = 0; virtual CompareEqualFunc get_compare_equal_func() const = 0; virtual CompareLessFunc get_compare_less_func() const = 0; + virtual bool is_valid() const; virtual StringName get_method() const; - virtual ObjectID get_object() const = 0; //must always be able to provide an object + virtual ObjectID get_object() const = 0; virtual void call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, Callable::CallError &r_call_error) const = 0; virtual Error rpc(int p_peer_id, const Variant **p_arguments, int p_argcount, Callable::CallError &r_call_error) const; virtual const Callable *get_base_comparator() const; diff --git a/core/variant/callable_bind.cpp b/core/variant/callable_bind.cpp index 5be91c6e11..378d1ff618 100644 --- a/core/variant/callable_bind.cpp +++ b/core/variant/callable_bind.cpp @@ -75,6 +75,10 @@ CallableCustom::CompareLessFunc CallableCustomBind::get_compare_less_func() cons return _less_func; } +bool CallableCustomBind::is_valid() const { + return callable.is_valid(); +} + StringName CallableCustomBind::get_method() const { return callable.get_method(); } @@ -193,6 +197,10 @@ CallableCustom::CompareLessFunc CallableCustomUnbind::get_compare_less_func() co return _less_func; } +bool CallableCustomUnbind::is_valid() const { + return callable.is_valid(); +} + StringName CallableCustomUnbind::get_method() const { return callable.get_method(); } diff --git a/core/variant/callable_bind.h b/core/variant/callable_bind.h index 278ed335d0..b51076ad0f 100644 --- a/core/variant/callable_bind.h +++ b/core/variant/callable_bind.h @@ -47,8 +47,9 @@ public: virtual String get_as_text() const override; virtual CompareEqualFunc get_compare_equal_func() const override; virtual CompareLessFunc get_compare_less_func() const override; + virtual bool is_valid() const override; virtual StringName get_method() const override; - virtual ObjectID get_object() const override; //must always be able to provide an object + virtual ObjectID get_object() const override; virtual void call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, Callable::CallError &r_call_error) const override; virtual const Callable *get_base_comparator() const override; virtual int get_bound_arguments_count() const override; @@ -73,8 +74,9 @@ public: virtual String get_as_text() const override; virtual CompareEqualFunc get_compare_equal_func() const override; virtual CompareLessFunc get_compare_less_func() const override; + virtual bool is_valid() const override; virtual StringName get_method() const override; - virtual ObjectID get_object() const override; //must always be able to provide an object + virtual ObjectID get_object() const override; virtual void call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, Callable::CallError &r_call_error) const override; virtual const Callable *get_base_comparator() const override; virtual int get_bound_arguments_count() const override; |
