Skip to content

Commit f7afcd0

Browse files
author
Paolo Tranquilli
committed
Codegen: move use_for_null to pragmas
1 parent d2ebe00 commit f7afcd0

File tree

2 files changed

+7
-6
lines changed

2 files changed

+7
-6
lines changed

misc/codegen/lib/schemadefs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ def f(cls: type) -> type:
233233
doc = _DocModifier
234234
desc = _DescModifier
235235

236-
use_for_null = _annotate(null=True)
236+
use_for_null = _ClassPragma("null")
237237

238238
qltest.add(_Pragma("skip"))
239239
qltest.add(_ClassPragma("collapse_hierarchy"))

misc/codegen/loaders/schemaloader.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,18 @@ def _get_class(cls: type) -> schema.Class:
4040
if len({g for g in (getattr(b, f"{schema.inheritable_pragma_prefix}group", None)
4141
for b in cls.__bases__) if g}) > 1:
4242
raise schema.Error(f"Bases with mixed groups for {cls.__name__}")
43-
if any(getattr(b, "_null", False) for b in cls.__bases__):
44-
raise schema.Error(f"Null class cannot be derived")
4543
pragmas = {
4644
# dir and getattr inherit from bases
4745
a[len(schema.inheritable_pragma_prefix):]: getattr(cls, a)
4846
for a in dir(cls) if a.startswith(schema.inheritable_pragma_prefix)
4947
}
5048
pragmas |= cls.__dict__.get("_pragmas", {})
49+
derived = {d.__name__ for d in cls.__subclasses__()}
50+
if "null" in pragmas and derived:
51+
raise schema.Error(f"Null class cannot be derived")
5152
return schema.Class(name=cls.__name__,
5253
bases=[b.__name__ for b in cls.__bases__ if b is not object],
53-
derived={d.__name__ for d in cls.__subclasses__()},
54+
derived=derived,
5455
pragmas=pragmas,
5556
# in the following we don't use `getattr` to avoid inheriting
5657
properties=[
@@ -150,11 +151,11 @@ def load(m: types.ModuleType) -> schema.Schema:
150151
f"Only one root class allowed, found second root {name}")
151152
cls.check_types(known)
152153
classes[name] = cls
153-
if getattr(data, "_null", False):
154+
if "null" in cls.pragmas:
155+
del cls.pragmas["null"]
154156
if null is not None:
155157
raise schema.Error(f"Null class {null} already defined, second null class {name} not allowed")
156158
null = name
157-
cls.is_null_class = True
158159

159160
_fill_synth_information(classes)
160161
_fill_hideable_information(classes)

0 commit comments

Comments
 (0)