Skip to content

Commit 5a0d656

Browse files
authored
Merge pull request godotengine#1773 from tomfull123/method-bind-clean-up
Clean up the MethodBind class
2 parents 5cbffab + ca5af3c commit 5a0d656

File tree

2 files changed

+67
-63
lines changed

2 files changed

+67
-63
lines changed

include/godot_cpp/core/method_bind.hpp

Lines changed: 54 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -47,35 +47,35 @@
4747
namespace godot {
4848

4949
class 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

6464
protected:
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

7475
public:
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

@@ -180,8 +188,8 @@ class MethodBindVarArgBase : public MethodBind {
180188
const MethodInfo &p_method_info,
181189
bool p_return_nil_is_variant) :
182190
method(p_method) {
183-
set_vararg(true);
184-
set_const(true);
191+
_set_vararg(true);
192+
_set_const(true);
185193
set_argument_count(p_method_info.arguments.size());
186194
if (p_method_info.arguments.size()) {
187195
arguments = p_method_info.arguments;
@@ -194,8 +202,8 @@ class MethodBindVarArgBase : public MethodBind {
194202
set_argument_names(names);
195203
}
196204

197-
generate_argument_types((int)p_method_info.arguments.size());
198-
set_return(should_returns);
205+
_generate_argument_types((int)p_method_info.arguments.size());
206+
_set_returns(should_returns);
199207
}
200208

201209
~MethodBindVarArgBase() {}
@@ -332,7 +340,7 @@ class MethodBindT : public MethodBind {
332340

333341
MethodBindT(void (MB_T::*p_method)(P...)) {
334342
method = p_method;
335-
generate_argument_types(sizeof...(P));
343+
_generate_argument_types(sizeof...(P));
336344
set_argument_count(sizeof...(P));
337345
}
338346
};
@@ -408,9 +416,9 @@ class MethodBindTC : public MethodBind {
408416

409417
MethodBindTC(void (MB_T::*p_method)(P...) const) {
410418
method = p_method;
411-
generate_argument_types(sizeof...(P));
419+
_generate_argument_types(sizeof...(P));
412420
set_argument_count(sizeof...(P));
413-
set_const(true);
421+
_set_const(true);
414422
}
415423
};
416424

@@ -490,9 +498,9 @@ class MethodBindTR : public MethodBind {
490498

491499
MethodBindTR(R (MB_T::*p_method)(P...)) {
492500
method = p_method;
493-
generate_argument_types(sizeof...(P));
501+
_generate_argument_types(sizeof...(P));
494502
set_argument_count(sizeof...(P));
495-
set_return(true);
503+
_set_returns(true);
496504
}
497505
};
498506

@@ -572,10 +580,10 @@ class MethodBindTRC : public MethodBind {
572580

573581
MethodBindTRC(R (MB_T::*p_method)(P...) const) {
574582
method = p_method;
575-
generate_argument_types(sizeof...(P));
583+
_generate_argument_types(sizeof...(P));
576584
set_argument_count(sizeof...(P));
577-
set_return(true);
578-
set_const(true);
585+
_set_returns(true);
586+
_set_const(true);
579587
}
580588
};
581589

@@ -644,9 +652,9 @@ class MethodBindTS : public MethodBind {
644652

645653
MethodBindTS(void (*p_function)(P...)) {
646654
function = p_function;
647-
generate_argument_types(sizeof...(P));
655+
_generate_argument_types(sizeof...(P));
648656
set_argument_count(sizeof...(P));
649-
set_static(true);
657+
_set_static(true);
650658
}
651659
};
652660

@@ -712,10 +720,10 @@ class MethodBindTRS : public MethodBind {
712720

713721
MethodBindTRS(R (*p_function)(P...)) {
714722
function = p_function;
715-
generate_argument_types(sizeof...(P));
723+
_generate_argument_types(sizeof...(P));
716724
set_argument_count(sizeof...(P));
717-
set_static(true);
718-
set_return(true);
725+
_set_static(true);
726+
_set_returns(true);
719727
}
720728
};
721729

src/core/method_bind.cpp

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,32 +32,28 @@
3232

3333
namespace godot {
3434

35-
StringName MethodBind::get_name() const {
36-
return name;
35+
void MethodBind::_set_const(bool p_const) {
36+
_const = p_const;
3737
}
3838

39-
void MethodBind::set_name(const StringName &p_name) {
40-
name = p_name;
41-
}
42-
43-
void MethodBind::set_argument_count(int p_count) {
44-
argument_count = p_count;
39+
void MethodBind::_set_static(bool p_static) {
40+
_static = p_static;
4541
}
4642

47-
void MethodBind::set_const(bool p_const) {
48-
_is_const = p_const;
43+
void MethodBind::_set_returns(bool p_returns) {
44+
_returns = p_returns;
4945
}
5046

51-
void MethodBind::set_return(bool p_return) {
52-
_has_return = p_return;
47+
void MethodBind::_set_vararg(bool p_vararg) {
48+
_vararg = p_vararg;
5349
}
5450

55-
void MethodBind::set_static(bool p_static) {
56-
_static = p_static;
51+
StringName MethodBind::get_name() const {
52+
return name;
5753
}
5854

59-
void MethodBind::set_vararg(bool p_vararg) {
60-
_vararg = p_vararg;
55+
void MethodBind::set_name(const StringName &p_name) {
56+
name = p_name;
6157
}
6258

6359
void MethodBind::set_argument_names(const std::vector<StringName> &p_names) {
@@ -68,7 +64,7 @@ std::vector<StringName> MethodBind::get_argument_names() const {
6864
return argument_names;
6965
}
7066

71-
void MethodBind::generate_argument_types(int p_count) {
67+
void MethodBind::_generate_argument_types(int p_count) {
7268
set_argument_count(p_count);
7369

7470
if (argument_types != nullptr) {

0 commit comments

Comments
 (0)