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
@@ -180,8 +188,8 @@ class MethodBindVarArgBase : public MethodBind {
180
188
const MethodInfo &p_method_info,
181
189
bool p_return_nil_is_variant) :
182
190
method(p_method) {
183
- set_vararg (true );
184
- set_const (true );
191
+ _set_vararg (true );
192
+ _set_const (true );
185
193
set_argument_count (p_method_info.arguments .size ());
186
194
if (p_method_info.arguments .size ()) {
187
195
arguments = p_method_info.arguments ;
@@ -194,8 +202,8 @@ class MethodBindVarArgBase : public MethodBind {
194
202
set_argument_names (names);
195
203
}
196
204
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);
199
207
}
200
208
201
209
~MethodBindVarArgBase () {}
@@ -332,7 +340,7 @@ class MethodBindT : public MethodBind {
332
340
333
341
MethodBindT (void (MB_T::*p_method)(P...)) {
334
342
method = p_method;
335
- generate_argument_types (sizeof ...(P));
343
+ _generate_argument_types (sizeof ...(P));
336
344
set_argument_count (sizeof ...(P));
337
345
}
338
346
};
@@ -408,9 +416,9 @@ class MethodBindTC : public MethodBind {
408
416
409
417
MethodBindTC (void (MB_T::*p_method)(P...) const ) {
410
418
method = p_method;
411
- generate_argument_types (sizeof ...(P));
419
+ _generate_argument_types (sizeof ...(P));
412
420
set_argument_count (sizeof ...(P));
413
- set_const (true );
421
+ _set_const (true );
414
422
}
415
423
};
416
424
@@ -490,9 +498,9 @@ class MethodBindTR : public MethodBind {
490
498
491
499
MethodBindTR (R (MB_T::*p_method)(P...)) {
492
500
method = p_method;
493
- generate_argument_types (sizeof ...(P));
501
+ _generate_argument_types (sizeof ...(P));
494
502
set_argument_count (sizeof ...(P));
495
- set_return (true );
503
+ _set_returns (true );
496
504
}
497
505
};
498
506
@@ -572,10 +580,10 @@ class MethodBindTRC : public MethodBind {
572
580
573
581
MethodBindTRC (R (MB_T::*p_method)(P...) const ) {
574
582
method = p_method;
575
- generate_argument_types (sizeof ...(P));
583
+ _generate_argument_types (sizeof ...(P));
576
584
set_argument_count (sizeof ...(P));
577
- set_return (true );
578
- set_const (true );
585
+ _set_returns (true );
586
+ _set_const (true );
579
587
}
580
588
};
581
589
@@ -644,9 +652,9 @@ class MethodBindTS : public MethodBind {
644
652
645
653
MethodBindTS (void (*p_function)(P...)) {
646
654
function = p_function;
647
- generate_argument_types (sizeof ...(P));
655
+ _generate_argument_types (sizeof ...(P));
648
656
set_argument_count (sizeof ...(P));
649
- set_static (true );
657
+ _set_static (true );
650
658
}
651
659
};
652
660
@@ -712,10 +720,10 @@ class MethodBindTRS : public MethodBind {
712
720
713
721
MethodBindTRS (R (*p_function)(P...)) {
714
722
function = p_function;
715
- generate_argument_types (sizeof ...(P));
723
+ _generate_argument_types (sizeof ...(P));
716
724
set_argument_count (sizeof ...(P));
717
- set_static (true );
718
- set_return (true );
725
+ _set_static (true );
726
+ _set_returns (true );
719
727
}
720
728
};
721
729
0 commit comments