Skip to content

Commit 27df44f

Browse files
committed
Swift: replace empty IpaInfo() with a clearer True value
1 parent bafb9ae commit 27df44f

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

swift/codegen/lib/schema/schema.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ class Class:
8686
properties: List[Property] = field(default_factory=list)
8787
group: str = ""
8888
pragmas: List[str] = field(default_factory=list)
89-
ipa: Optional[IpaInfo] = None
89+
ipa: Optional[Union[IpaInfo, bool]] = None
90+
"""^^^ filled with `True` for non-final classes with only synthesized final descendants """
9091
doc: List[str] = field(default_factory=list)
9192
default_doc_name: Optional[str] = None
9293

@@ -248,6 +249,10 @@ def _toposort_classes_by_group(classes: typing.Dict[str, Class]) -> typing.Dict[
248249

249250

250251
def _fill_ipa_information(classes: typing.Dict[str, Class]):
252+
""" Take a dictionary where the `ipa` field is filled for all explicitly synthesized classes
253+
and updated it so that all non-final classes that have only synthesized final descendants
254+
get `True` as` value for the `ipa` field
255+
"""
251256
if not classes:
252257
return
253258

@@ -270,7 +275,7 @@ def fill_is_ipa(name: str):
270275

271276
for name, cls in classes.items():
272277
if cls.ipa is None and is_ipa[name]:
273-
cls.ipa = IpaInfo()
278+
cls.ipa = True
274279

275280

276281
def load(m: types.ModuleType) -> Schema:

swift/codegen/test/test_schema.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ class B(A):
340340
pass
341341

342342
assert data.classes == {
343-
'A': schema.Class('A', derived={'B'}, ipa=schema.IpaInfo()),
343+
'A': schema.Class('A', derived={'B'}, ipa=True),
344344
'B': schema.Class('B', bases=['A'], ipa=schema.IpaInfo(from_class="A")),
345345
}
346346

@@ -381,7 +381,7 @@ class B(A):
381381
pass
382382

383383
assert data.classes == {
384-
'A': schema.Class('A', derived={'B'}, ipa=schema.IpaInfo()),
384+
'A': schema.Class('A', derived={'B'}, ipa=True),
385385
'B': schema.Class('B', bases=['A'], ipa=schema.IpaInfo(on_arguments={'a': 'A', 'i': 'int'})),
386386
}
387387

@@ -439,8 +439,8 @@ class C(Root):
439439

440440
assert data.classes == {
441441
'Root': schema.Class('Root', derived={'Base', 'C'}),
442-
'Base': schema.Class('Base', bases=['Root'], derived={'Intermediate', 'B'}, ipa=schema.IpaInfo()),
443-
'Intermediate': schema.Class('Intermediate', bases=['Base'], derived={'A'}, ipa=schema.IpaInfo()),
442+
'Base': schema.Class('Base', bases=['Root'], derived={'Intermediate', 'B'}, ipa=True),
443+
'Intermediate': schema.Class('Intermediate', bases=['Base'], derived={'A'}, ipa=True),
444444
'A': schema.Class('A', bases=['Intermediate'], ipa=schema.IpaInfo(on_arguments={'a': 'Base', 'i': 'int'})),
445445
'B': schema.Class('B', bases=['Base'], ipa=schema.IpaInfo(from_class='Base')),
446446
'C': schema.Class('C', bases=['Root']),

0 commit comments

Comments
 (0)