From 346b5c4be71bb1f502507d92ffdb1ded4c3bd85d Mon Sep 17 00:00:00 2001 From: Jon Turney Date: Fri, 14 Feb 2020 02:58:37 +0000 Subject: Store filename in node location Warnings have a location node object (with subdir and lineno attributes), which is passed as a location: kwarg to mlog.warning() and formatted in _log_error(). Re-purpose the subdir attribute (path relative to the source root dir, with an implied filename of 'meson.build'), which is stored into the node by parser(), to contain a pathname. (Properly I should rename 'subdir' -> 'file' everywhere, but that's a lot of churn just to see if this works) Notes: The warning location node may also have a colno attribute, which is currently ignored by _log_error(). We can't currently issue warnings with locations in meson_options.txt because the filename isn't part of the location (as it's assumed to be 'meson.build). --- mesonbuild/ast/interpreter.py | 2 +- mesonbuild/interpreter.py | 2 +- mesonbuild/interpreterbase.py | 2 +- mesonbuild/mlog.py | 2 +- mesonbuild/optinterpreter.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mesonbuild/ast/interpreter.py b/mesonbuild/ast/interpreter.py index bee5165..5f47ad3 100644 --- a/mesonbuild/ast/interpreter.py +++ b/mesonbuild/ast/interpreter.py @@ -154,7 +154,7 @@ class AstInterpreter(interpreterbase.InterpreterBase): code = f.read() assert(isinstance(code, str)) try: - codeblock = mparser.Parser(code, subdir).parse() + codeblock = mparser.Parser(code, absname).parse() except mesonlib.MesonException as me: me.file = absname raise me diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index bd85577..a9e0a3b 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -3748,7 +3748,7 @@ This will become a hard error in the future.''' % kwargs['input'], location=self code = f.read() assert(isinstance(code, str)) try: - codeblock = mparser.Parser(code, self.subdir).parse() + codeblock = mparser.Parser(code, absname).parse() except mesonlib.MesonException as me: me.file = absname raise me diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py index 842aeac..d723da5 100644 --- a/mesonbuild/interpreterbase.py +++ b/mesonbuild/interpreterbase.py @@ -381,7 +381,7 @@ class InterpreterBase: raise InvalidCode('Builder file is empty.') assert(isinstance(code, str)) try: - self.ast = mparser.Parser(code, self.subdir).parse() + self.ast = mparser.Parser(code, mesonfile).parse() except mesonlib.MesonException as me: me.file = mesonfile raise me diff --git a/mesonbuild/mlog.py b/mesonbuild/mlog.py index c5ebbbf..b563e41 100644 --- a/mesonbuild/mlog.py +++ b/mesonbuild/mlog.py @@ -251,7 +251,7 @@ def _log_error(severity: str, *rargs: T.Union[str, AnsiDecorator], location = kwargs.pop('location', None) if location is not None: - location_file = os.path.join(location.subdir, build_filename) + location_file = location.subdir location_str = get_error_location_string(location_file, location.lineno) # Unions are frankly awful, and we have to T.cast here to get mypy # to understand that the list concatenation is safe diff --git a/mesonbuild/optinterpreter.py b/mesonbuild/optinterpreter.py index 2632b31..fd0a8c9 100644 --- a/mesonbuild/optinterpreter.py +++ b/mesonbuild/optinterpreter.py @@ -140,7 +140,7 @@ class OptionInterpreter: def process(self, option_file): try: with open(option_file, 'r', encoding='utf8') as f: - ast = mparser.Parser(f.read(), '').parse() + ast = mparser.Parser(f.read(), option_file).parse() except mesonlib.MesonException as me: me.file = option_file raise me -- cgit v1.1