diff options
Diffstat (limited to 'mesonbuild/interpreterbase')
-rw-r--r-- | mesonbuild/interpreterbase/__init__.py | 4 | ||||
-rw-r--r-- | mesonbuild/interpreterbase/baseobjects.py | 6 | ||||
-rw-r--r-- | mesonbuild/interpreterbase/decorators.py | 7 | ||||
-rw-r--r-- | mesonbuild/interpreterbase/interpreterbase.py | 4 |
4 files changed, 15 insertions, 6 deletions
diff --git a/mesonbuild/interpreterbase/__init__.py b/mesonbuild/interpreterbase/__init__.py index 7c4b1db..13f55e5 100644 --- a/mesonbuild/interpreterbase/__init__.py +++ b/mesonbuild/interpreterbase/__init__.py @@ -57,6 +57,8 @@ __all__ = [ 'InterpreterBase', + 'SubProject', + 'TV_fw_var', 'TV_fw_args', 'TV_fw_kwargs', @@ -91,6 +93,8 @@ from .baseobjects import ( TYPE_key_resolver, TYPE_HoldableTypes, + SubProject, + HoldableTypes, ) diff --git a/mesonbuild/interpreterbase/baseobjects.py b/mesonbuild/interpreterbase/baseobjects.py index ca17481..7186001 100644 --- a/mesonbuild/interpreterbase/baseobjects.py +++ b/mesonbuild/interpreterbase/baseobjects.py @@ -39,6 +39,8 @@ TYPE_kwargs = T.Dict[str, TYPE_var] TYPE_nkwargs = T.Dict[str, TYPE_nvar] TYPE_key_resolver = T.Callable[[mparser.BaseNode], str] +SubProject = T.NewType('SubProject', str) + if T.TYPE_CHECKING: from typing_extensions import Protocol __T = T.TypeVar('__T', bound=TYPE_var, contravariant=True) @@ -47,7 +49,7 @@ if T.TYPE_CHECKING: def __call__(self, other: __T) -> TYPE_var: ... class InterpreterObject: - def __init__(self, *, subproject: T.Optional[str] = None) -> None: + def __init__(self, *, subproject: T.Optional['SubProject'] = None) -> None: self.methods: T.Dict[ str, T.Callable[[T.List[TYPE_var], TYPE_kwargs], TYPE_var] @@ -63,7 +65,7 @@ class InterpreterObject: # Current node set during a method call. This can be used as location # when printing a warning message during a method call. self.current_node: mparser.BaseNode = None - self.subproject: str = subproject or '' + self.subproject = subproject or SubProject('') # Some default operators supported by all objects self.operators.update({ diff --git a/mesonbuild/interpreterbase/decorators.py b/mesonbuild/interpreterbase/decorators.py index c6fcaa0..f104ac6 100644 --- a/mesonbuild/interpreterbase/decorators.py +++ b/mesonbuild/interpreterbase/decorators.py @@ -27,8 +27,9 @@ import copy import typing as T if T.TYPE_CHECKING: from .. import mparser + from .interpreterbase import SubProject -def get_callee_args(wrapped_args: T.Sequence[T.Any]) -> T.Tuple['mparser.BaseNode', T.List['TYPE_var'], 'TYPE_kwargs', str]: +def get_callee_args(wrapped_args: T.Sequence[T.Any]) -> T.Tuple['mparser.BaseNode', T.List['TYPE_var'], 'TYPE_kwargs', 'SubProject']: # First argument could be InterpreterBase, InterpreterObject or ModuleObject. # In the case of a ModuleObject it is the 2nd argument (ModuleState) that # contains the needed information. @@ -600,7 +601,7 @@ class FeatureCheckBase(metaclass=abc.ABCMeta): def check_version(target_version: str, feature_version: str) -> bool: pass - def use(self, subproject: str) -> None: + def use(self, subproject: 'SubProject') -> None: tv = self.get_target_version(subproject) # No target version if tv == '': @@ -668,7 +669,7 @@ class FeatureCheckBase(metaclass=abc.ABCMeta): return T.cast(TV_func, wrapped) @classmethod - def single_use(cls, feature_name: str, version: str, subproject: str, + def single_use(cls, feature_name: str, version: str, subproject: 'SubProject', extra_message: str = '', location: T.Optional['mparser.BaseNode'] = None) -> None: """Oneline version that instantiates and calls use().""" cls(feature_name, version, extra_message, location).use(subproject) diff --git a/mesonbuild/interpreterbase/interpreterbase.py b/mesonbuild/interpreterbase/interpreterbase.py index 99f6619..bd7d7f9 100644 --- a/mesonbuild/interpreterbase/interpreterbase.py +++ b/mesonbuild/interpreterbase/interpreterbase.py @@ -26,6 +26,8 @@ from .baseobjects import ( ObjectHolder, IterableObject, + SubProject, + TYPE_var, TYPE_kwargs, @@ -73,7 +75,7 @@ FunctionType = T.Dict[ ] class InterpreterBase: - def __init__(self, source_root: str, subdir: str, subproject: str): + def __init__(self, source_root: str, subdir: str, subproject: 'SubProject'): self.source_root = source_root self.funcs: FunctionType = {} self.builtin: T.Dict[str, InterpreterObject] = {} |