Skip to content

Commit a9abdb5

Browse files
tomfull123dsnopek
authored andcommitted
Cleaned up the MethodBind class
(cherry picked from commit ca5af3c)
1 parent 9892f63 commit a9abdb5

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
@@ -48,35 +48,35 @@
4848
namespace godot {
4949

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

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

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

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)