Skip to content

Commit 03b05cf

Browse files
committed
Core: Fix built-in enum constant bindings
1 parent f952bfe commit 03b05cf

24 files changed

+278
-108
lines changed

core/variant/variant.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3560,9 +3560,6 @@ bool Variant::is_ref_counted() const {
35603560
return type == OBJECT && _get_obj().id.is_ref_counted();
35613561
}
35623562

3563-
void Variant::static_assign(const Variant &p_variant) {
3564-
}
3565-
35663563
bool Variant::is_type_shared(Variant::Type p_type) {
35673564
switch (p_type) {
35683565
case OBJECT:

core/variant/variant.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -792,7 +792,6 @@ class Variant {
792792
String stringify(int recursion_count = 0) const;
793793
String to_json_string() const;
794794

795-
void static_assign(const Variant &p_variant);
796795
static void get_constants_for_type(Variant::Type p_type, List<StringName> *p_constants);
797796
static int get_constants_count_for_type(Variant::Type p_type);
798797
static bool has_constant(Variant::Type p_type, const StringName &p_value);
@@ -801,6 +800,8 @@ class Variant {
801800
static void get_enums_for_type(Variant::Type p_type, List<StringName> *p_enums);
802801
static void get_enumerations_for_enum(Variant::Type p_type, const StringName &p_enum_name, List<StringName> *p_enumerations);
803802
static int get_enum_value(Variant::Type p_type, const StringName &p_enum_name, const StringName &p_enumeration, bool *r_valid = nullptr);
803+
static bool has_enum(Variant::Type p_type, const StringName &p_enum_name);
804+
static StringName get_enum_for_enumeration(Variant::Type p_type, const StringName &p_enumeration);
804805

805806
typedef String (*ObjectDeConstruct)(const Variant &p_object, void *ud);
806807
typedef void (*ObjectConstruct)(const String &p_text, void *ud, Variant &r_value);

core/variant/variant_call.cpp

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,6 +1091,11 @@ struct _VariantCall {
10911091
static ConstantData *constant_data;
10921092

10931093
static void add_constant(int p_type, const StringName &p_constant_name, int64_t p_constant_value) {
1094+
#ifdef DEBUG_ENABLED
1095+
ERR_FAIL_COND(constant_data[p_type].value.has(p_constant_name));
1096+
ERR_FAIL_COND(enum_data[p_type].value.has(p_constant_name));
1097+
ERR_FAIL_COND(enum_data[p_type].value_to_enum.has(p_constant_name));
1098+
#endif
10941099
constant_data[p_type].value[p_constant_name] = p_constant_value;
10951100
#ifdef DEBUG_ENABLED
10961101
constant_data[p_type].value_ordered.push_back(p_constant_name);
@@ -1106,12 +1111,19 @@ struct _VariantCall {
11061111

11071112
struct EnumData {
11081113
HashMap<StringName, HashMap<StringName, int>> value;
1114+
HashMap<StringName, StringName> value_to_enum;
11091115
};
11101116

11111117
static EnumData *enum_data;
11121118

11131119
static void add_enum_constant(int p_type, const StringName &p_enum_type_name, const StringName &p_enumeration_name, int p_enum_value) {
1120+
#ifdef DEBUG_ENABLED
1121+
ERR_FAIL_COND(constant_data[p_type].value.has(p_enumeration_name));
1122+
ERR_FAIL_COND(enum_data[p_type].value.has(p_enumeration_name));
1123+
ERR_FAIL_COND(enum_data[p_type].value_to_enum.has(p_enumeration_name));
1124+
#endif
11141125
enum_data[p_type].value[p_enum_type_name][p_enumeration_name] = p_enum_value;
1126+
enum_data[p_type].value_to_enum[p_enumeration_name] = p_enum_type_name;
11151127
}
11161128
};
11171129

@@ -1561,6 +1573,23 @@ int Variant::get_enum_value(Variant::Type p_type, const StringName &p_enum_name,
15611573
return V->value;
15621574
}
15631575

1576+
bool Variant::has_enum(Variant::Type p_type, const StringName &p_enum_name) {
1577+
ERR_FAIL_INDEX_V(p_type, Variant::VARIANT_MAX, false);
1578+
1579+
_VariantCall::EnumData &enum_data = _VariantCall::enum_data[p_type];
1580+
1581+
return enum_data.value.has(p_enum_name);
1582+
}
1583+
1584+
StringName Variant::get_enum_for_enumeration(Variant::Type p_type, const StringName &p_enumeration) {
1585+
ERR_FAIL_INDEX_V(p_type, Variant::VARIANT_MAX, StringName());
1586+
1587+
_VariantCall::EnumData &enum_data = _VariantCall::enum_data[p_type];
1588+
1589+
const StringName *enum_name = enum_data.value_to_enum.getptr(p_enumeration);
1590+
return (enum_name == nullptr) ? StringName() : *enum_name;
1591+
}
1592+
15641593
#ifdef DEBUG_METHODS_ENABLED
15651594
#define bind_method(m_type, m_method, m_arg_names, m_default_args) \
15661595
METHOD_CLASS(m_type, m_method, &m_type::m_method); \
@@ -2660,10 +2689,6 @@ static void _register_variant_builtin_constants() {
26602689
_VariantCall::add_variant_constant(Variant::COLOR, Color::get_named_color_name(i), Color::get_named_color(i));
26612690
}
26622691

2663-
_VariantCall::add_constant(Variant::VECTOR3, "AXIS_X", Vector3::AXIS_X);
2664-
_VariantCall::add_constant(Variant::VECTOR3, "AXIS_Y", Vector3::AXIS_Y);
2665-
_VariantCall::add_constant(Variant::VECTOR3, "AXIS_Z", Vector3::AXIS_Z);
2666-
26672692
_VariantCall::add_enum_constant(Variant::VECTOR3, "Axis", "AXIS_X", Vector3::AXIS_X);
26682693
_VariantCall::add_enum_constant(Variant::VECTOR3, "Axis", "AXIS_Y", Vector3::AXIS_Y);
26692694
_VariantCall::add_enum_constant(Variant::VECTOR3, "Axis", "AXIS_Z", Vector3::AXIS_Z);
@@ -2685,32 +2710,19 @@ static void _register_variant_builtin_constants() {
26852710
_VariantCall::add_variant_constant(Variant::VECTOR3, "MODEL_FRONT", Vector3(0, 0, 1));
26862711
_VariantCall::add_variant_constant(Variant::VECTOR3, "MODEL_REAR", Vector3(0, 0, -1));
26872712

2688-
_VariantCall::add_constant(Variant::VECTOR4, "AXIS_X", Vector4::AXIS_X);
2689-
_VariantCall::add_constant(Variant::VECTOR4, "AXIS_Y", Vector4::AXIS_Y);
2690-
_VariantCall::add_constant(Variant::VECTOR4, "AXIS_Z", Vector4::AXIS_Z);
2691-
_VariantCall::add_constant(Variant::VECTOR4, "AXIS_W", Vector4::AXIS_W);
2692-
26932713
_VariantCall::add_enum_constant(Variant::VECTOR4, "Axis", "AXIS_X", Vector4::AXIS_X);
26942714
_VariantCall::add_enum_constant(Variant::VECTOR4, "Axis", "AXIS_Y", Vector4::AXIS_Y);
26952715
_VariantCall::add_enum_constant(Variant::VECTOR4, "Axis", "AXIS_Z", Vector4::AXIS_Z);
26962716
_VariantCall::add_enum_constant(Variant::VECTOR4, "Axis", "AXIS_W", Vector4::AXIS_W);
2717+
26972718
_VariantCall::add_variant_constant(Variant::VECTOR4, "ZERO", Vector4(0, 0, 0, 0));
26982719
_VariantCall::add_variant_constant(Variant::VECTOR4, "ONE", Vector4(1, 1, 1, 1));
26992720
_VariantCall::add_variant_constant(Variant::VECTOR4, "INF", Vector4(INFINITY, INFINITY, INFINITY, INFINITY));
27002721

2701-
_VariantCall::add_constant(Variant::VECTOR3I, "AXIS_X", Vector3i::AXIS_X);
2702-
_VariantCall::add_constant(Variant::VECTOR3I, "AXIS_Y", Vector3i::AXIS_Y);
2703-
_VariantCall::add_constant(Variant::VECTOR3I, "AXIS_Z", Vector3i::AXIS_Z);
2704-
27052722
_VariantCall::add_enum_constant(Variant::VECTOR3I, "Axis", "AXIS_X", Vector3i::AXIS_X);
27062723
_VariantCall::add_enum_constant(Variant::VECTOR3I, "Axis", "AXIS_Y", Vector3i::AXIS_Y);
27072724
_VariantCall::add_enum_constant(Variant::VECTOR3I, "Axis", "AXIS_Z", Vector3i::AXIS_Z);
27082725

2709-
_VariantCall::add_constant(Variant::VECTOR4I, "AXIS_X", Vector4i::AXIS_X);
2710-
_VariantCall::add_constant(Variant::VECTOR4I, "AXIS_Y", Vector4i::AXIS_Y);
2711-
_VariantCall::add_constant(Variant::VECTOR4I, "AXIS_Z", Vector4i::AXIS_Z);
2712-
_VariantCall::add_constant(Variant::VECTOR4I, "AXIS_W", Vector4i::AXIS_W);
2713-
27142726
_VariantCall::add_enum_constant(Variant::VECTOR4I, "Axis", "AXIS_X", Vector4i::AXIS_X);
27152727
_VariantCall::add_enum_constant(Variant::VECTOR4I, "Axis", "AXIS_Y", Vector4i::AXIS_Y);
27162728
_VariantCall::add_enum_constant(Variant::VECTOR4I, "Axis", "AXIS_Z", Vector4i::AXIS_Z);
@@ -2732,15 +2744,9 @@ static void _register_variant_builtin_constants() {
27322744
_VariantCall::add_variant_constant(Variant::VECTOR3I, "FORWARD", Vector3i(0, 0, -1));
27332745
_VariantCall::add_variant_constant(Variant::VECTOR3I, "BACK", Vector3i(0, 0, 1));
27342746

2735-
_VariantCall::add_constant(Variant::VECTOR2, "AXIS_X", Vector2::AXIS_X);
2736-
_VariantCall::add_constant(Variant::VECTOR2, "AXIS_Y", Vector2::AXIS_Y);
2737-
27382747
_VariantCall::add_enum_constant(Variant::VECTOR2, "Axis", "AXIS_X", Vector2::AXIS_X);
27392748
_VariantCall::add_enum_constant(Variant::VECTOR2, "Axis", "AXIS_Y", Vector2::AXIS_Y);
27402749

2741-
_VariantCall::add_constant(Variant::VECTOR2I, "AXIS_X", Vector2i::AXIS_X);
2742-
_VariantCall::add_constant(Variant::VECTOR2I, "AXIS_Y", Vector2i::AXIS_Y);
2743-
27442750
_VariantCall::add_enum_constant(Variant::VECTOR2I, "Axis", "AXIS_X", Vector2i::AXIS_X);
27452751
_VariantCall::add_enum_constant(Variant::VECTOR2I, "Axis", "AXIS_Y", Vector2i::AXIS_Y);
27462752

@@ -2789,13 +2795,6 @@ static void _register_variant_builtin_constants() {
27892795

27902796
_VariantCall::add_variant_constant(Variant::QUATERNION, "IDENTITY", Quaternion(0, 0, 0, 1));
27912797

2792-
_VariantCall::add_constant(Variant::PROJECTION, "PLANE_NEAR", Projection::PLANE_NEAR);
2793-
_VariantCall::add_constant(Variant::PROJECTION, "PLANE_FAR", Projection::PLANE_FAR);
2794-
_VariantCall::add_constant(Variant::PROJECTION, "PLANE_LEFT", Projection::PLANE_LEFT);
2795-
_VariantCall::add_constant(Variant::PROJECTION, "PLANE_TOP", Projection::PLANE_TOP);
2796-
_VariantCall::add_constant(Variant::PROJECTION, "PLANE_RIGHT", Projection::PLANE_RIGHT);
2797-
_VariantCall::add_constant(Variant::PROJECTION, "PLANE_BOTTOM", Projection::PLANE_BOTTOM);
2798-
27992798
_VariantCall::add_enum_constant(Variant::PROJECTION, "Planes", "PLANE_NEAR", Projection::PLANE_NEAR);
28002799
_VariantCall::add_enum_constant(Variant::PROJECTION, "Planes", "PLANE_FAR", Projection::PLANE_FAR);
28012800
_VariantCall::add_enum_constant(Variant::PROJECTION, "Planes", "PLANE_LEFT", Projection::PLANE_LEFT);

doc/classes/Projection.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -278,22 +278,22 @@
278278
</member>
279279
</members>
280280
<constants>
281-
<constant name="PLANE_NEAR" value="0">
281+
<constant name="PLANE_NEAR" value="0" enum="Planes">
282282
The index value of the projection's near clipping plane.
283283
</constant>
284-
<constant name="PLANE_FAR" value="1">
284+
<constant name="PLANE_FAR" value="1" enum="Planes">
285285
The index value of the projection's far clipping plane.
286286
</constant>
287-
<constant name="PLANE_LEFT" value="2">
287+
<constant name="PLANE_LEFT" value="2" enum="Planes">
288288
The index value of the projection's left clipping plane.
289289
</constant>
290-
<constant name="PLANE_TOP" value="3">
290+
<constant name="PLANE_TOP" value="3" enum="Planes">
291291
The index value of the projection's top clipping plane.
292292
</constant>
293-
<constant name="PLANE_RIGHT" value="4">
293+
<constant name="PLANE_RIGHT" value="4" enum="Planes">
294294
The index value of the projection's right clipping plane.
295295
</constant>
296-
<constant name="PLANE_BOTTOM" value="5">
296+
<constant name="PLANE_BOTTOM" value="5" enum="Planes">
297297
The index value of the projection bottom clipping plane.
298298
</constant>
299299
<constant name="IDENTITY" value="Projection(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)">

doc/classes/Vector2.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,10 +424,10 @@
424424
</member>
425425
</members>
426426
<constants>
427-
<constant name="AXIS_X" value="0">
427+
<constant name="AXIS_X" value="0" enum="Axis">
428428
Enumerated value for the X axis. Returned by [method max_axis_index] and [method min_axis_index].
429429
</constant>
430-
<constant name="AXIS_Y" value="1">
430+
<constant name="AXIS_Y" value="1" enum="Axis">
431431
Enumerated value for the Y axis. Returned by [method max_axis_index] and [method min_axis_index].
432432
</constant>
433433
<constant name="ZERO" value="Vector2(0, 0)">

doc/classes/Vector2i.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,10 @@
170170
</member>
171171
</members>
172172
<constants>
173-
<constant name="AXIS_X" value="0">
173+
<constant name="AXIS_X" value="0" enum="Axis">
174174
Enumerated value for the X axis. Returned by [method max_axis_index] and [method min_axis_index].
175175
</constant>
176-
<constant name="AXIS_Y" value="1">
176+
<constant name="AXIS_Y" value="1" enum="Axis">
177177
Enumerated value for the Y axis. Returned by [method max_axis_index] and [method min_axis_index].
178178
</constant>
179179
<constant name="ZERO" value="Vector2i(0, 0)">

doc/classes/Vector3.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -421,13 +421,13 @@
421421
</member>
422422
</members>
423423
<constants>
424-
<constant name="AXIS_X" value="0">
424+
<constant name="AXIS_X" value="0" enum="Axis">
425425
Enumerated value for the X axis. Returned by [method max_axis_index] and [method min_axis_index].
426426
</constant>
427-
<constant name="AXIS_Y" value="1">
427+
<constant name="AXIS_Y" value="1" enum="Axis">
428428
Enumerated value for the Y axis. Returned by [method max_axis_index] and [method min_axis_index].
429429
</constant>
430-
<constant name="AXIS_Z" value="2">
430+
<constant name="AXIS_Z" value="2" enum="Axis">
431431
Enumerated value for the Z axis. Returned by [method max_axis_index] and [method min_axis_index].
432432
</constant>
433433
<constant name="ZERO" value="Vector3(0, 0, 0)">

doc/classes/Vector3i.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,13 +168,13 @@
168168
</member>
169169
</members>
170170
<constants>
171-
<constant name="AXIS_X" value="0">
171+
<constant name="AXIS_X" value="0" enum="Axis">
172172
Enumerated value for the X axis. Returned by [method max_axis_index] and [method min_axis_index].
173173
</constant>
174-
<constant name="AXIS_Y" value="1">
174+
<constant name="AXIS_Y" value="1" enum="Axis">
175175
Enumerated value for the Y axis. Returned by [method max_axis_index] and [method min_axis_index].
176176
</constant>
177-
<constant name="AXIS_Z" value="2">
177+
<constant name="AXIS_Z" value="2" enum="Axis">
178178
Enumerated value for the Z axis. Returned by [method max_axis_index] and [method min_axis_index].
179179
</constant>
180180
<constant name="ZERO" value="Vector3i(0, 0, 0)">

doc/classes/Vector4.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -287,16 +287,16 @@
287287
</member>
288288
</members>
289289
<constants>
290-
<constant name="AXIS_X" value="0">
290+
<constant name="AXIS_X" value="0" enum="Axis">
291291
Enumerated value for the X axis. Returned by [method max_axis_index] and [method min_axis_index].
292292
</constant>
293-
<constant name="AXIS_Y" value="1">
293+
<constant name="AXIS_Y" value="1" enum="Axis">
294294
Enumerated value for the Y axis. Returned by [method max_axis_index] and [method min_axis_index].
295295
</constant>
296-
<constant name="AXIS_Z" value="2">
296+
<constant name="AXIS_Z" value="2" enum="Axis">
297297
Enumerated value for the Z axis. Returned by [method max_axis_index] and [method min_axis_index].
298298
</constant>
299-
<constant name="AXIS_W" value="3">
299+
<constant name="AXIS_W" value="3" enum="Axis">
300300
Enumerated value for the W axis. Returned by [method max_axis_index] and [method min_axis_index].
301301
</constant>
302302
<constant name="ZERO" value="Vector4(0, 0, 0, 0)">

doc/classes/Vector4i.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,16 +169,16 @@
169169
</member>
170170
</members>
171171
<constants>
172-
<constant name="AXIS_X" value="0">
172+
<constant name="AXIS_X" value="0" enum="Axis">
173173
Enumerated value for the X axis. Returned by [method max_axis_index] and [method min_axis_index].
174174
</constant>
175-
<constant name="AXIS_Y" value="1">
175+
<constant name="AXIS_Y" value="1" enum="Axis">
176176
Enumerated value for the Y axis. Returned by [method max_axis_index] and [method min_axis_index].
177177
</constant>
178-
<constant name="AXIS_Z" value="2">
178+
<constant name="AXIS_Z" value="2" enum="Axis">
179179
Enumerated value for the Z axis. Returned by [method max_axis_index] and [method min_axis_index].
180180
</constant>
181-
<constant name="AXIS_W" value="3">
181+
<constant name="AXIS_W" value="3" enum="Axis">
182182
Enumerated value for the W axis. Returned by [method max_axis_index] and [method min_axis_index].
183183
</constant>
184184
<constant name="ZERO" value="Vector4i(0, 0, 0, 0)">

0 commit comments

Comments
 (0)