From 8f7343831bb78e6801c93cd45e4edfeed65bc437 Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Fri, 25 Jun 2021 21:14:27 +0200 Subject: refactor: Refactor BothLibraries logic This commit introduces a new type of `HoldableObject`: The `SecondLevelHolder`. The primary purpose of this class is to handle cases where two (or more) `HoldableObject`s are stored at the same time (with one default object). The best (and currently only) example here is the `BothLibraries` class. --- mesonbuild/interpreterbase/baseobjects.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'mesonbuild/interpreterbase/baseobjects.py') diff --git a/mesonbuild/interpreterbase/baseobjects.py b/mesonbuild/interpreterbase/baseobjects.py index d82aad26f..e65e4cb12 100644 --- a/mesonbuild/interpreterbase/baseobjects.py +++ b/mesonbuild/interpreterbase/baseobjects.py @@ -14,7 +14,7 @@ from .. import mparser from .exceptions import InvalidCode -from .helpers import flatten +from .helpers import flatten, resolve_second_level_holders from ..mesonlib import HoldableObject import typing as T @@ -57,6 +57,8 @@ class InterpreterObject: method = self.methods[method_name] if not getattr(method, 'no-args-flattening', False): args = flatten(args) + if not getattr(method, 'no-second-level-holder-flattening', False): + args, kwargs = resolve_second_level_holders(args, kwargs) return method(args, kwargs) raise InvalidCode(f'Unknown method "{method_name}" in object {self} of type {type(self).__name__}.') -- cgit v1.2.3