Skip to content

Commit df7ee43

Browse files
committed
Fix __eq__ for builtins with nested builtins members
1 parent 68090d3 commit df7ee43

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

scripts/extension_api_parser/builtins.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from __future__ import annotations
44

55
from dataclasses import dataclass
6+
from typing import Generator
67

78
from .utils import *
89
from .in_use import *
@@ -243,6 +244,18 @@ class BuiltinTypeSpec(TypeSpec):
243244
constants: list[BuiltinConstantSpec]
244245
enums: list[EnumTypeSpec]
245246

247+
@property
248+
def all_nested_scalar_members(self) -> Generator[str]:
249+
def _recursive_members(parent: BuiltinTypeSpec) -> Generator[str]:
250+
for member in parent.members:
251+
member_type = member.type.resolve()
252+
if isinstance(member_type, BuiltinTypeSpec):
253+
yield from (f"{member.name}.{sn}" for sn in _recursive_members(member_type))
254+
else:
255+
yield member.name
256+
257+
yield from _recursive_members(self)
258+
246259
@property
247260
def is_builtin(self) -> bool:
248261
return True

src/godot/builtins_pyx/operator.pyx.j2

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ def __repr__(self):
2626
def __eq__(self, {{ builtin.cy_type }} other):
2727
{% if builtin.is_transparent_builtin %}
2828
return (
29-
{% for m in builtin.members %}
30-
{% if not loop.first%}
29+
{% for field_path in builtin.all_nested_scalar_members %}
30+
{% if not loop.first%}
3131
and
32-
{% endif %}
33-
self._gd_data.{{ m.name }} == other._gd_data.{{ m.name }}
32+
{% endif %}
33+
self._gd_data.{{ field_path }} == other._gd_data.{{ field_path }}
3434
{% endfor %}
3535
)
3636
{% else %}

0 commit comments

Comments
 (0)