interpreter: Remove permissive from _unholder

This commit is contained in:
Daniel Mensinger 2021-08-29 19:32:37 +02:00
parent ea02c1c48a
commit 43a6b5bd5e
4 changed files with 11 additions and 13 deletions

View File

@ -2643,7 +2643,7 @@ This will become a hard error in the future.''', location=self.current_node)
@typed_pos_args('get_variable', (str, Disabler), optargs=[object])
@noKwargs
@noArgsFlattening
@permissive_unholder_return
@unholder_return
def func_get_variable(self, node: mparser.BaseNode, args: T.Tuple[T.Union[str, Disabler], T.Optional[object]],
kwargs: 'TYPE_kwargs') -> 'TYPE_var':
varname, fallback = args
@ -2654,7 +2654,7 @@ This will become a hard error in the future.''', location=self.current_node)
return self.variables[varname]
except KeyError:
if fallback is not None:
return fallback
return self._holderify(fallback)
raise InterpreterException(f'Tried to get unknown variable "{varname}".')
@typed_pos_args('is_variable', str)

View File

@ -18,7 +18,7 @@ from ..interpreterbase import (
InterpreterObject, MesonInterpreterObject, ObjectHolder, MutableInterpreterObject,
FeatureCheckBase, FeatureNewKwargs, FeatureNew, FeatureDeprecated,
typed_pos_args, typed_kwargs, permittedKwargs,
noArgsFlattening, noPosargs, noKwargs, permissive_unholder_return, TYPE_var, TYPE_kwargs, TYPE_nvar, TYPE_nkwargs,
noArgsFlattening, noPosargs, noKwargs, unholder_return, TYPE_var, TYPE_kwargs, TYPE_nvar, TYPE_nkwargs,
flatten, resolve_second_level_holders, InterpreterException, InvalidArguments, InvalidCode)
from ..interpreter.type_checking import NoneType
from ..dependencies import Dependency, ExternalLibrary, InternalDependency
@ -712,7 +712,7 @@ class SubprojectHolder(MesonInterpreterObject):
@noKwargs
@noArgsFlattening
@permissive_unholder_return
@unholder_return
def get_variable_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> T.Union[TYPE_var, InterpreterObject]:
if len(args) < 1 or len(args) > 2:
raise InterpreterException('Get_variable takes one or two arguments.')
@ -727,7 +727,7 @@ class SubprojectHolder(MesonInterpreterObject):
pass
if len(args) == 2:
return args[1]
return self.held_object._holderify(args[1])
raise InvalidArguments(f'Requested variable "{varname}" not found.')

View File

@ -42,7 +42,7 @@ __all__ = [
'stringArgs',
'noArgsFlattening',
'noSecondLevelHolderResolving',
'permissive_unholder_return',
'unholder_return',
'disablerIfNotFound',
'permittedKwargs',
'typed_operator',
@ -102,7 +102,7 @@ from .decorators import (
stringArgs,
noArgsFlattening,
noSecondLevelHolderResolving,
permissive_unholder_return,
unholder_return,
disablerIfNotFound,
permittedKwargs,
typed_pos_args,

View File

@ -18,20 +18,18 @@ from ..mesonlib import HoldableObject, MesonBugException
import typing as T
def _unholder(obj: T.Union[TYPE_var, InterpreterObject], *, permissive: bool = False) -> TYPE_var:
if isinstance(obj, (bool, str)):
def _unholder(obj: T.Union[TYPE_var, InterpreterObject]) -> TYPE_var:
if isinstance(obj, str):
return obj
elif isinstance(obj, list):
return [_unholder(x, permissive=permissive) for x in obj]
return [_unholder(x) for x in obj]
elif isinstance(obj, dict):
return {k: _unholder(v, permissive=permissive) for k, v in obj.items()}
return {k: _unholder(v) for k, v in obj.items()}
elif isinstance(obj, ObjectHolder):
assert isinstance(obj.held_object, HoldableTypes)
return obj.held_object
elif isinstance(obj, MesonInterpreterObject):
return obj
elif isinstance(obj, HoldableObject) and permissive:
return obj
elif isinstance(obj, HoldableObject):
raise MesonBugException(f'Argument {obj} of type {type(obj).__name__} is not held by an ObjectHolder.')
elif isinstance(obj, InterpreterObject):