47
47
namespace godot {
48
48
49
49
class MethodBind {
50
+ uint32_t hint_flags = METHOD_FLAGS_DEFAULT;
50
51
StringName name;
51
52
StringName instance_class;
52
53
int argument_count = 0 ;
53
- uint32_t hint_flags = METHOD_FLAGS_DEFAULT;
54
54
55
55
bool _static = false ;
56
- bool _is_const = false ;
57
- bool _has_return = false ;
56
+ bool _const = false ;
57
+ bool _returns = false ;
58
58
bool _vararg = false ;
59
59
60
60
std::vector<StringName> argument_names;
61
61
GDExtensionVariantType *argument_types = nullptr ;
62
62
std::vector<Variant> default_arguments;
63
63
64
64
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);
65
69
virtual GDExtensionVariantType gen_argument_type (int p_arg) const = 0;
66
70
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; }
73
74
74
75
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 (); }
78
76
_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
+
79
79
_FORCE_INLINE_ Variant has_default_argument (int p_arg) const {
80
80
const int num_default_args = (int )(default_arguments.size ());
81
81
const int idx = p_arg - (argument_count - num_default_args);
@@ -96,27 +96,13 @@ class MethodBind {
96
96
return default_arguments[idx];
97
97
}
98
98
}
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; }
112
99
113
100
_FORCE_INLINE_ GDExtensionVariantType get_argument_type (int p_argument) const {
114
101
ERR_FAIL_COND_V (p_argument < -1 || p_argument > argument_count, GDEXTENSION_VARIANT_TYPE_NIL);
115
102
return argument_types[p_argument + 1 ];
116
103
}
117
104
118
105
PropertyInfo get_argument_info (int p_argument) const ;
119
- virtual GDExtensionClassMethodArgumentMetadata get_argument_metadata (int p_argument) const = 0;
120
106
121
107
std::vector<PropertyInfo> get_arguments_info_list () const {
122
108
std::vector<PropertyInfo> vec;
@@ -127,6 +113,31 @@ class MethodBind {
127
113
}
128
114
return vec;
129
115
}
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
+
130
141
std::vector<GDExtensionClassMethodArgumentMetadata> get_arguments_metadata_list () const {
131
142
std::vector<GDExtensionClassMethodArgumentMetadata> vec;
132
143
// First element is return value
@@ -137,9 +148,6 @@ class MethodBind {
137
148
return vec;
138
149
}
139
150
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
-
143
151
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);
144
152
static void bind_ptrcall (void *p_method_userdata, GDExtensionClassInstancePtr p_instance, const GDExtensionConstTypePtr *p_args, GDExtensionTypePtr r_return);
145
153
@@ -181,8 +189,8 @@ class MethodBindVarArgBase : public MethodBind {
181
189
const MethodInfo &p_method_info,
182
190
bool p_return_nil_is_variant) :
183
191
method(p_method) {
184
- set_vararg (true );
185
- set_const (true );
192
+ _set_vararg (true );
193
+ _set_const (true );
186
194
set_argument_count (p_method_info.arguments .size ());
187
195
if (p_method_info.arguments .size ()) {
188
196
arguments = p_method_info.arguments ;
@@ -195,8 +203,8 @@ class MethodBindVarArgBase : public MethodBind {
195
203
set_argument_names (names);
196
204
}
197
205
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);
200
208
}
201
209
202
210
~MethodBindVarArgBase () {}
@@ -333,7 +341,7 @@ class MethodBindT : public MethodBind {
333
341
334
342
MethodBindT (void (MB_T::*p_method)(P...)) {
335
343
method = p_method;
336
- generate_argument_types (sizeof ...(P));
344
+ _generate_argument_types (sizeof ...(P));
337
345
set_argument_count (sizeof ...(P));
338
346
}
339
347
};
@@ -409,9 +417,9 @@ class MethodBindTC : public MethodBind {
409
417
410
418
MethodBindTC (void (MB_T::*p_method)(P...) const ) {
411
419
method = p_method;
412
- generate_argument_types (sizeof ...(P));
420
+ _generate_argument_types (sizeof ...(P));
413
421
set_argument_count (sizeof ...(P));
414
- set_const (true );
422
+ _set_const (true );
415
423
}
416
424
};
417
425
@@ -492,9 +500,9 @@ class MethodBindTR : public MethodBind {
492
500
493
501
MethodBindTR (R (MB_T::*p_method)(P...)) {
494
502
method = p_method;
495
- generate_argument_types (sizeof ...(P));
503
+ _generate_argument_types (sizeof ...(P));
496
504
set_argument_count (sizeof ...(P));
497
- set_return (true );
505
+ _set_returns (true );
498
506
}
499
507
};
500
508
@@ -575,10 +583,10 @@ class MethodBindTRC : public MethodBind {
575
583
576
584
MethodBindTRC (R (MB_T::*p_method)(P...) const ) {
577
585
method = p_method;
578
- generate_argument_types (sizeof ...(P));
586
+ _generate_argument_types (sizeof ...(P));
579
587
set_argument_count (sizeof ...(P));
580
- set_return (true );
581
- set_const (true );
588
+ _set_returns (true );
589
+ _set_const (true );
582
590
}
583
591
};
584
592
@@ -647,9 +655,9 @@ class MethodBindTS : public MethodBind {
647
655
648
656
MethodBindTS (void (*p_function)(P...)) {
649
657
function = p_function;
650
- generate_argument_types (sizeof ...(P));
658
+ _generate_argument_types (sizeof ...(P));
651
659
set_argument_count (sizeof ...(P));
652
- set_static (true );
660
+ _set_static (true );
653
661
}
654
662
};
655
663
@@ -716,10 +724,10 @@ class MethodBindTRS : public MethodBind {
716
724
717
725
MethodBindTRS (R (*p_function)(P...)) {
718
726
function = p_function;
719
- generate_argument_types (sizeof ...(P));
727
+ _generate_argument_types (sizeof ...(P));
720
728
set_argument_count (sizeof ...(P));
721
- set_static (true );
722
- set_return (true );
729
+ _set_static (true );
730
+ _set_returns (true );
723
731
}
724
732
};
725
733
0 commit comments