Swift: simplify pragma definition

This commit is contained in:
Paolo Tranquilli
2023-01-17 10:10:02 +01:00
parent 51bd1ef1e1
commit cdc99b5240

View File

@@ -35,6 +35,19 @@ def include(source: str):
"__includes", []).append(source)
class _Namespace:
""" simple namespacing mechanism """
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
qltest = _Namespace()
ql = _Namespace()
cpp = _Namespace()
synth = _Namespace()
@_dataclass
class _Pragma(_schema.PropertyModifier):
""" A class or property pragma.
@@ -43,6 +56,10 @@ class _Pragma(_schema.PropertyModifier):
"""
pragma: str
def __post_init__(self):
namespace, _, name = self.pragma.partition('_')
setattr(globals()[namespace], name, self)
def modify(self, prop: _schema.Property):
prop.pragmas.append(self.pragma)
@@ -86,13 +103,6 @@ class _TypeModifier:
return item | self.modifier
class _Namespace:
""" simple namespacing mechanism """
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
_ClassDecorator = _Callable[[type], type]
@@ -119,28 +129,20 @@ desc = _DescModifier
use_for_null = _annotate(null=True)
qltest = _Namespace(
skip=_Pragma("qltest_skip"),
collapse_hierarchy=_Pragma("qltest_collapse_hierarchy"),
uncollapse_hierarchy=_Pragma("qltest_uncollapse_hierarchy"),
)
_Pragma("qltest_skip")
_Pragma("qltest_collapse_hierarchy")
_Pragma("qltest_uncollapse_hierarchy")
ql = _Namespace(
default_doc_name=lambda doc: _annotate(doc_name=doc)
)
ql.default_doc_name = lambda doc: _annotate(doc_name=doc)
cpp = _Namespace(
skip=_Pragma("cpp_skip"),
)
_Pragma("cpp_skip")
def group(name: str = "") -> _ClassDecorator:
return _annotate(group=name)
synth = _Namespace(
from_class=lambda ref: _annotate(ipa=_schema.IpaInfo(
from_class=_schema.get_type_name(ref))),
on_arguments=lambda **kwargs: _annotate(
ipa=_schema.IpaInfo(on_arguments={k: _schema.get_type_name(t) for k, t in kwargs.items()}))
)
synth.from_class = lambda ref: _annotate(ipa=_schema.IpaInfo(
from_class=_schema.get_type_name(ref)))
synth.on_arguments = lambda **kwargs: _annotate(
ipa=_schema.IpaInfo(on_arguments={k: _schema.get_type_name(t) for k, t in kwargs.items()}))