diff options
Diffstat (limited to 'core/variant.h')
-rw-r--r-- | core/variant.h | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/core/variant.h b/core/variant.h index 50b7a21eda..1f3ee8ec74 100644 --- a/core/variant.h +++ b/core/variant.h @@ -120,6 +120,7 @@ public: private: friend struct _VariantCall; + friend class VariantInternal; // Variant takes 20 bytes when real_t is float, and 36 if double // it only allocates extra memory for aabb/matrix. @@ -245,7 +246,7 @@ public: operator ObjectID() const; - operator CharType() const; + operator char32_t() const; operator float() const; operator double() const; operator String() const; @@ -322,7 +323,7 @@ public: Variant(const String &p_string); Variant(const StringName &p_string); Variant(const char *const p_cstring); - Variant(const CharType *p_wstring); + Variant(const char32_t *p_wstring); Variant(const Vector2 &p_vector2); Variant(const Vector2i &p_vector2i); Variant(const Rect2 &p_rect2); @@ -413,6 +414,34 @@ public: static void blend(const Variant &a, const Variant &b, float c, Variant &r_dst); static void interpolate(const Variant &a, const Variant &b, float c, Variant &r_dst); + class InternalMethod { + public: + enum Flags { + FLAG_IS_CONST = 1, + FLAG_RETURNS_VARIANT = 2, + FLAG_NO_PTRCALL = 4, + FLAG_VARARGS = 8 + }; + + virtual int get_argument_count() const = 0; + virtual Type get_argument_type(int p_arg) const = 0; + virtual Type get_return_type() const = 0; + virtual uint32_t get_flags() const = 0; + +#ifdef DEBUG_ENABLED + virtual String get_argument_name(int p_arg) const = 0; +#endif + virtual Vector<Variant> get_default_arguments() const = 0; + virtual void call(Variant *base, const Variant **p_args, int p_argcount, Variant &r_ret, Callable::CallError &r_error) = 0; + virtual void validated_call(Variant *base, const Variant **p_args, Variant *r_ret) = 0; +#ifdef PTRCALL_ENABLED + virtual void ptrcall(void *p_base, const void **p_args, void *r_ret) = 0; +#endif + virtual ~InternalMethod() {} + }; + + static InternalMethod *get_internal_method(Type p_type, const StringName &p_method_name); + void call_ptr(const StringName &p_method, const Variant **p_args, int p_argcount, Variant *r_ret, Callable::CallError &r_error); Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error); Variant call(const StringName &p_method, const Variant &p_arg1 = Variant(), const Variant &p_arg2 = Variant(), const Variant &p_arg3 = Variant(), const Variant &p_arg4 = Variant(), const Variant &p_arg5 = Variant()); |