4747namespace godot {
4848
4949class MethodBind {
50+ uint32_t hint_flags = METHOD_FLAGS_DEFAULT;
5051 StringName name;
5152 StringName instance_class;
5253 int argument_count = 0 ;
53- uint32_t hint_flags = METHOD_FLAGS_DEFAULT;
5454
5555 bool _static = false ;
56- bool _is_const = false ;
57- bool _has_return = false ;
56+ bool _const = false ;
57+ bool _returns = false ;
5858 bool _vararg = false ;
5959
6060 std::vector<StringName> argument_names;
6161 GDExtensionVariantType *argument_types = nullptr ;
6262 std::vector<Variant> default_arguments;
6363
6464protected:
65+ void _set_const (bool p_const);
66+ void _set_static (bool p_static);
67+ void _set_returns (bool p_returns);
68+ void _set_vararg (bool p_vararg);
6569 virtual GDExtensionVariantType gen_argument_type (int p_arg) const = 0;
6670 virtual PropertyInfo gen_argument_type_info (int p_arg) const = 0;
67- void generate_argument_types (int p_count);
68- void set_const (bool p_const);
69- void set_return (bool p_return);
70- void set_static (bool p_static);
71- void set_vararg (bool p_vararg);
72- void set_argument_count (int p_count);
71+ void _generate_argument_types (int p_count);
72+
73+ void set_argument_count (int p_count) { argument_count = p_count; }
7374
7475public:
75- StringName get_name () const ;
76- void set_name (const StringName &p_name);
77- _FORCE_INLINE_ int get_default_argument_count () const { return (int )default_arguments.size (); }
7876 _FORCE_INLINE_ const std::vector<Variant> &get_default_arguments () const { return default_arguments; }
77+ _FORCE_INLINE_ int get_default_argument_count () const { return (int )default_arguments.size (); }
78+
7979 _FORCE_INLINE_ Variant has_default_argument (int p_arg) const {
8080 const int num_default_args = (int )(default_arguments.size ());
8181 const int idx = p_arg - (argument_count - num_default_args);
@@ -96,27 +96,13 @@ class MethodBind {
9696 return default_arguments[idx];
9797 }
9898 }
99- _FORCE_INLINE_ StringName get_instance_class () const { return instance_class; }
100- _FORCE_INLINE_ void set_instance_class (StringName p_class) { instance_class = p_class; }
101-
102- _FORCE_INLINE_ int get_argument_count () const { return argument_count; }
103- _FORCE_INLINE_ bool is_const () const { return _is_const; }
104- _FORCE_INLINE_ bool is_static () const { return _static; }
105- _FORCE_INLINE_ bool is_vararg () const { return _vararg; }
106- _FORCE_INLINE_ bool has_return () const { return _has_return; }
107- _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 ); }
108- _FORCE_INLINE_ void set_hint_flags (uint32_t p_hint_flags) { hint_flags = p_hint_flags; }
109- void set_argument_names (const std::vector<StringName> &p_names);
110- std::vector<StringName> get_argument_names () const ;
111- void set_default_arguments (const std::vector<Variant> &p_default_arguments) { default_arguments = p_default_arguments; }
11299
113100 _FORCE_INLINE_ GDExtensionVariantType get_argument_type (int p_argument) const {
114101 ERR_FAIL_COND_V (p_argument < -1 || p_argument > argument_count, GDEXTENSION_VARIANT_TYPE_NIL);
115102 return argument_types[p_argument + 1 ];
116103 }
117104
118105 PropertyInfo get_argument_info (int p_argument) const ;
119- virtual GDExtensionClassMethodArgumentMetadata get_argument_metadata (int p_argument) const = 0;
120106
121107 std::vector<PropertyInfo> get_arguments_info_list () const {
122108 std::vector<PropertyInfo> vec;
@@ -127,6 +113,31 @@ class MethodBind {
127113 }
128114 return vec;
129115 }
116+
117+ void set_argument_names (const std::vector<StringName> &p_names);
118+ std::vector<StringName> get_argument_names () const ;
119+
120+ virtual GDExtensionClassMethodArgumentMetadata get_argument_metadata (int p_argument) const = 0;
121+
122+ _FORCE_INLINE_ void set_hint_flags (uint32_t p_hint_flags) { hint_flags = p_hint_flags; }
123+ _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 ); }
124+ _FORCE_INLINE_ StringName get_instance_class () const { return instance_class; }
125+ _FORCE_INLINE_ void set_instance_class (StringName p_class) { instance_class = p_class; }
126+
127+ _FORCE_INLINE_ int get_argument_count () const { return argument_count; }
128+
129+ virtual Variant call (GDExtensionClassInstancePtr p_instance, const GDExtensionConstVariantPtr *p_args, GDExtensionInt p_argument_count, GDExtensionCallError &r_error) const = 0;
130+ virtual void ptrcall (GDExtensionClassInstancePtr p_instance, const GDExtensionConstTypePtr *p_args, GDExtensionTypePtr r_return) const = 0;
131+
132+ StringName get_name () const ;
133+ void set_name (const StringName &p_name);
134+ _FORCE_INLINE_ bool is_const () const { return _const; }
135+ _FORCE_INLINE_ bool is_static () const { return _static; }
136+ _FORCE_INLINE_ bool is_vararg () const { return _vararg; }
137+ _FORCE_INLINE_ bool has_return () const { return _returns; }
138+
139+ void set_default_arguments (const std::vector<Variant> &p_default_arguments) { default_arguments = p_default_arguments; }
140+
130141 std::vector<GDExtensionClassMethodArgumentMetadata> get_arguments_metadata_list () const {
131142 std::vector<GDExtensionClassMethodArgumentMetadata> vec;
132143 // First element is return value
@@ -137,9 +148,6 @@ class MethodBind {
137148 return vec;
138149 }
139150
140- virtual Variant call (GDExtensionClassInstancePtr p_instance, const GDExtensionConstVariantPtr *p_args, GDExtensionInt p_argument_count, GDExtensionCallError &r_error) const = 0;
141- virtual void ptrcall (GDExtensionClassInstancePtr p_instance, const GDExtensionConstTypePtr *p_args, GDExtensionTypePtr r_return) const = 0;
142-
143151 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);
144152 static void bind_ptrcall (void *p_method_userdata, GDExtensionClassInstancePtr p_instance, const GDExtensionConstTypePtr *p_args, GDExtensionTypePtr r_return);
145153
@@ -181,8 +189,8 @@ class MethodBindVarArgBase : public MethodBind {
181189 const MethodInfo &p_method_info,
182190 bool p_return_nil_is_variant) :
183191 method(p_method) {
184- set_vararg (true );
185- set_const (true );
192+ _set_vararg (true );
193+ _set_const (true );
186194 set_argument_count (p_method_info.arguments .size ());
187195 if (p_method_info.arguments .size ()) {
188196 arguments = p_method_info.arguments ;
@@ -195,8 +203,8 @@ class MethodBindVarArgBase : public MethodBind {
195203 set_argument_names (names);
196204 }
197205
198- generate_argument_types ((int )p_method_info.arguments .size ());
199- set_return (should_returns);
206+ _generate_argument_types ((int )p_method_info.arguments .size ());
207+ _set_returns (should_returns);
200208 }
201209
202210 ~MethodBindVarArgBase () {}
@@ -333,7 +341,7 @@ class MethodBindT : public MethodBind {
333341
334342 MethodBindT (void (MB_T::*p_method)(P...)) {
335343 method = p_method;
336- generate_argument_types (sizeof ...(P));
344+ _generate_argument_types (sizeof ...(P));
337345 set_argument_count (sizeof ...(P));
338346 }
339347};
@@ -409,9 +417,9 @@ class MethodBindTC : public MethodBind {
409417
410418 MethodBindTC (void (MB_T::*p_method)(P...) const ) {
411419 method = p_method;
412- generate_argument_types (sizeof ...(P));
420+ _generate_argument_types (sizeof ...(P));
413421 set_argument_count (sizeof ...(P));
414- set_const (true );
422+ _set_const (true );
415423 }
416424};
417425
@@ -492,9 +500,9 @@ class MethodBindTR : public MethodBind {
492500
493501 MethodBindTR (R (MB_T::*p_method)(P...)) {
494502 method = p_method;
495- generate_argument_types (sizeof ...(P));
503+ _generate_argument_types (sizeof ...(P));
496504 set_argument_count (sizeof ...(P));
497- set_return (true );
505+ _set_returns (true );
498506 }
499507};
500508
@@ -575,10 +583,10 @@ class MethodBindTRC : public MethodBind {
575583
576584 MethodBindTRC (R (MB_T::*p_method)(P...) const ) {
577585 method = p_method;
578- generate_argument_types (sizeof ...(P));
586+ _generate_argument_types (sizeof ...(P));
579587 set_argument_count (sizeof ...(P));
580- set_return (true );
581- set_const (true );
588+ _set_returns (true );
589+ _set_const (true );
582590 }
583591};
584592
@@ -647,9 +655,9 @@ class MethodBindTS : public MethodBind {
647655
648656 MethodBindTS (void (*p_function)(P...)) {
649657 function = p_function;
650- generate_argument_types (sizeof ...(P));
658+ _generate_argument_types (sizeof ...(P));
651659 set_argument_count (sizeof ...(P));
652- set_static (true );
660+ _set_static (true );
653661 }
654662};
655663
@@ -716,10 +724,10 @@ class MethodBindTRS : public MethodBind {
716724
717725 MethodBindTRS (R (*p_function)(P...)) {
718726 function = p_function;
719- generate_argument_types (sizeof ...(P));
727+ _generate_argument_types (sizeof ...(P));
720728 set_argument_count (sizeof ...(P));
721- set_static (true );
722- set_return (true );
729+ _set_static (true );
730+ _set_returns (true );
723731 }
724732};
725733
0 commit comments