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