aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreterbase
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/interpreterbase')
-rw-r--r--mesonbuild/interpreterbase/__init__.py4
-rw-r--r--mesonbuild/interpreterbase/baseobjects.py6
-rw-r--r--mesonbuild/interpreterbase/decorators.py7
-rw-r--r--mesonbuild/interpreterbase/interpreterbase.py4
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] = {}