4848namespace godot {
4949
5050class MethodBind {
51+ uint32_t hint_flags = METHOD_FLAGS_DEFAULT;
5152 StringName name;
5253 StringName instance_class;
5354 int argument_count = 0 ;
54- uint32_t hint_flags = METHOD_FLAGS_DEFAULT;
5555
5656 bool _static = false ;
57- bool _is_const = false ;
58- bool _has_return = false ;
57+ bool _const = false ;
58+ bool _returns = false ;
5959 bool _vararg = false ;
6060
6161 std::vector<StringName> argument_names;
6262 GDExtensionVariantType *argument_types = nullptr ;
6363 std::vector<Variant> default_arguments;
6464
6565protected:
66+ void _set_const (bool p_const);
67+ void _set_static (bool p_static);
68+ void _set_returns (bool p_returns);
69+ void _set_vararg (bool p_vararg);
6670 virtual GDExtensionVariantType gen_argument_type (int p_arg) const = 0;
6771 virtual PropertyInfo gen_argument_type_info (int p_arg) const = 0;
68- void generate_argument_types (int p_count);
69- void set_const (bool p_const);
70- void set_return (bool p_return);
71- void set_static (bool p_static);
72- void set_vararg (bool p_vararg);
73- void set_argument_count (int p_count);
72+ void _generate_argument_types (int p_count);
73+
74+ void set_argument_count (int p_count) { argument_count = p_count; }
7475
7576public:
76- StringName get_name () const ;
77- void set_name (const StringName &p_name);
78- _FORCE_INLINE_ int get_default_argument_count () const { return (int )default_arguments.size (); }
7977 _FORCE_INLINE_ const std::vector<Variant> &get_default_arguments () const { return default_arguments; }
78+ _FORCE_INLINE_ int get_default_argument_count () const { return (int )default_arguments.size (); }
79+
8080 _FORCE_INLINE_ Variant has_default_argument (int p_arg) const {
8181 const int num_default_args = (int )(default_arguments.size ());
8282 const int idx = p_arg - (argument_count - num_default_args);
@@ -97,27 +97,13 @@ class MethodBind {
9797 return default_arguments[idx];
9898 }
9999 }
100- _FORCE_INLINE_ StringName get_instance_class () const { return instance_class; }
101- _FORCE_INLINE_ void set_instance_class (StringName p_class) { instance_class = p_class; }
102-
103- _FORCE_INLINE_ int get_argument_count () const { return argument_count; }
104- _FORCE_INLINE_ bool is_const () const { return _is_const; }
105- _FORCE_INLINE_ bool is_static () const { return _static; }
106- _FORCE_INLINE_ bool is_vararg () const { return _vararg; }
107- _FORCE_INLINE_ bool has_return () const { return _has_return; }
108- _FORCE_INLINE_ uint32_t get_hint_flags () const { return hint_flags | (is_const () ? GDEXTENSION_METHOD_FLAG_CONST : 0 ) | (is_vararg () ? GDEXTENSION_METHOD_FLAG_VARARG : 0 ) | (is_static () ? GDEXTENSION_METHOD_FLAG_STATIC : 0 ); }
109- _FORCE_INLINE_ void set_hint_flags (uint32_t p_hint_flags) { hint_flags = p_hint_flags; }
110- void set_argument_names (const std::vector<StringName> &p_names);
111- std::vector<StringName> get_argument_names () const ;
112- void set_default_arguments (const std::vector<Variant> &p_default_arguments) { default_arguments = p_default_arguments; }
113100
114101 _FORCE_INLINE_ GDExtensionVariantType get_argument_type (int p_argument) const {
115102 ERR_FAIL_COND_V (p_argument < -1 || p_argument > argument_count, GDEXTENSION_VARIANT_TYPE_NIL);
116103 return argument_types[p_argument + 1 ];
117104 }
118105
119106 PropertyInfo get_argument_info (int p_argument) const ;
120- virtual GDExtensionClassMethodArgumentMetadata get_argument_metadata (int p_argument) const = 0;
121107
122108 std::vector<PropertyInfo> get_arguments_info_list () const {
123109 std::vector<PropertyInfo> vec;
@@ -128,6 +114,31 @@ class MethodBind {
128114 }
129115 return vec;
130116 }
117+
118+ void set_argument_names (const std::vector<StringName> &p_names);
119+ std::vector<StringName> get_argument_names () const ;
120+
121+ virtual GDExtensionClassMethodArgumentMetadata get_argument_metadata (int p_argument) const = 0;
122+
123+ _FORCE_INLINE_ void set_hint_flags (uint32_t p_hint_flags) { hint_flags = p_hint_flags; }
124+ _FORCE_INLINE_ uint32_t get_hint_flags () const { return hint_flags | (is_const () ? GDEXTENSION_METHOD_FLAG_CONST : 0 ) | (is_vararg () ? GDEXTENSION_METHOD_FLAG_VARARG : 0 ) | (is_static () ? GDEXTENSION_METHOD_FLAG_STATIC : 0 ); }
125+ _FORCE_INLINE_ StringName get_instance_class () const { return instance_class; }
126+ _FORCE_INLINE_ void set_instance_class (StringName p_class) { instance_class = p_class; }
127+
128+ _FORCE_INLINE_ int get_argument_count () const { return argument_count; }
129+
130+ virtual Variant call (GDExtensionClassInstancePtr p_instance, const GDExtensionConstVariantPtr *p_args, GDExtensionInt p_argument_count, GDExtensionCallError &r_error) const = 0;
131+ virtual void ptrcall (GDExtensionClassInstancePtr p_instance, const GDExtensionConstTypePtr *p_args, GDExtensionTypePtr r_return) const = 0;
132+
133+ StringName get_name () const ;
134+ void set_name (const StringName &p_name);
135+ _FORCE_INLINE_ bool is_const () const { return _const; }
136+ _FORCE_INLINE_ bool is_static () const { return _static; }
137+ _FORCE_INLINE_ bool is_vararg () const { return _vararg; }
138+ _FORCE_INLINE_ bool has_return () const { return _returns; }
139+
140+ void set_default_arguments (const std::vector<Variant> &p_default_arguments) { default_arguments = p_default_arguments; }
141+
131142 std::vector<GDExtensionClassMethodArgumentMetadata> get_arguments_metadata_list () const {
132143 std::vector<GDExtensionClassMethodArgumentMetadata> vec;
133144 // First element is return value
@@ -138,9 +149,6 @@ class MethodBind {
138149 return vec;
139150 }
140151
141- virtual Variant call (GDExtensionClassInstancePtr p_instance, const GDExtensionConstVariantPtr *p_args, GDExtensionInt p_argument_count, GDExtensionCallError &r_error) const = 0;
142- virtual void ptrcall (GDExtensionClassInstancePtr p_instance, const GDExtensionConstTypePtr *p_args, GDExtensionTypePtr r_return) const = 0;
143-
144152 static void bind_call (void *p_method_userdata, GDExtensionClassInstancePtr p_instance, const GDExtensionConstVariantPtr *p_args, GDExtensionInt p_argument_count, GDExtensionVariantPtr r_return, GDExtensionCallError *r_error);
145153 static void bind_ptrcall (void *p_method_userdata, GDExtensionClassInstancePtr p_instance, const GDExtensionConstTypePtr *p_args, GDExtensionTypePtr r_return);
146154
@@ -182,8 +190,8 @@ class MethodBindVarArgBase : public MethodBind {
182190 const MethodInfo &p_method_info,
183191 bool p_return_nil_is_variant) :
184192 method(p_method) {
185- set_vararg (true );
186- set_const (true );
193+ _set_vararg (true );
194+ _set_const (true );
187195 set_argument_count (p_method_info.arguments .size ());
188196 if (p_method_info.arguments .size ()) {
189197 arguments = p_method_info.arguments ;
@@ -196,8 +204,8 @@ class MethodBindVarArgBase : public MethodBind {
196204 set_argument_names (names);
197205 }
198206
199- generate_argument_types ((int )p_method_info.arguments .size ());
200- set_return (should_returns);
207+ _generate_argument_types ((int )p_method_info.arguments .size ());
208+ _set_returns (should_returns);
201209 }
202210
203211 ~MethodBindVarArgBase () {}
@@ -334,7 +342,7 @@ class MethodBindT : public MethodBind {
334342
335343 MethodBindT (void (MB_T::*p_method)(P...)) {
336344 method = p_method;
337- generate_argument_types (sizeof ...(P));
345+ _generate_argument_types (sizeof ...(P));
338346 set_argument_count (sizeof ...(P));
339347 }
340348};
@@ -410,9 +418,9 @@ class MethodBindTC : public MethodBind {
410418
411419 MethodBindTC (void (MB_T::*p_method)(P...) const ) {
412420 method = p_method;
413- generate_argument_types (sizeof ...(P));
421+ _generate_argument_types (sizeof ...(P));
414422 set_argument_count (sizeof ...(P));
415- set_const (true );
423+ _set_const (true );
416424 }
417425};
418426
@@ -493,9 +501,9 @@ class MethodBindTR : public MethodBind {
493501
494502 MethodBindTR (R (MB_T::*p_method)(P...)) {
495503 method = p_method;
496- generate_argument_types (sizeof ...(P));
504+ _generate_argument_types (sizeof ...(P));
497505 set_argument_count (sizeof ...(P));
498- set_return (true );
506+ _set_returns (true );
499507 }
500508};
501509
@@ -576,10 +584,10 @@ class MethodBindTRC : public MethodBind {
576584
577585 MethodBindTRC (R (MB_T::*p_method)(P...) const ) {
578586 method = p_method;
579- generate_argument_types (sizeof ...(P));
587+ _generate_argument_types (sizeof ...(P));
580588 set_argument_count (sizeof ...(P));
581- set_return (true );
582- set_const (true );
589+ _set_returns (true );
590+ _set_const (true );
583591 }
584592};
585593
@@ -648,9 +656,9 @@ class MethodBindTS : public MethodBind {
648656
649657 MethodBindTS (void (*p_function)(P...)) {
650658 function = p_function;
651- generate_argument_types (sizeof ...(P));
659+ _generate_argument_types (sizeof ...(P));
652660 set_argument_count (sizeof ...(P));
653- set_static (true );
661+ _set_static (true );
654662 }
655663};
656664
@@ -717,10 +725,10 @@ class MethodBindTRS : public MethodBind {
717725
718726 MethodBindTRS (R (*p_function)(P...)) {
719727 function = p_function;
720- generate_argument_types (sizeof ...(P));
728+ _generate_argument_types (sizeof ...(P));
721729 set_argument_count (sizeof ...(P));
722- set_static (true );
723- set_return (true );
730+ _set_static (true );
731+ _set_returns (true );
724732 }
725733};
726734
0 commit comments