diff options
author | Laurin-Luis Lehning <65224843+e820@users.noreply.github.com> | 2021-03-07 04:59:38 +0100 |
---|---|---|
committer | Xavier Claessens <xclaesse@gmail.com> | 2021-03-10 08:55:22 -0500 |
commit | 130adef77880fc99ee0a06cf3fba7696c7e7c7bc (patch) | |
tree | b24d73969ee550251e29f08914cf80ec8d86cfc9 /mesonbuild/interpreterbase.py | |
parent | 442416db6fbb35d0293bc036642e10d36d9dfc00 (diff) | |
download | meson-130adef77880fc99ee0a06cf3fba7696c7e7c7bc.zip meson-130adef77880fc99ee0a06cf3fba7696c7e7c7bc.tar.gz meson-130adef77880fc99ee0a06cf3fba7696c7e7c7bc.tar.bz2 |
Add support for basic format strings
Diffstat (limited to 'mesonbuild/interpreterbase.py')
-rw-r--r-- | mesonbuild/interpreterbase.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py index 026eaf2..d486b89 100644 --- a/mesonbuild/interpreterbase.py +++ b/mesonbuild/interpreterbase.py @@ -708,6 +708,8 @@ class InterpreterBase: return self.evaluate_indexing(cur) elif isinstance(cur, mparser.TernaryNode): return self.evaluate_ternary(cur) + elif isinstance(cur, mparser.FormatStringNode): + return self.evaluate_fstring(cur) elif isinstance(cur, mparser.ContinueNode): raise ContinueRequest() elif isinstance(cur, mparser.BreakNode): @@ -926,6 +928,18 @@ The result of this is undefined and will become a hard error in a future Meson r else: return self.evaluate_statement(node.falseblock) + def evaluate_fstring(self, node: mparser.FormatStringNode) -> TYPE_var: + assert(isinstance(node, mparser.FormatStringNode)) + + def replace(match: T.Match[str]) -> str: + var = str(match.group(1)) + try: + return str(self.variables[var]) + except KeyError: + raise mesonlib.MesonException(f'Identifier "{var}" does not name a variable.') + + return re.sub(r'{([_a-zA-Z][_0-9a-zA-Z]*)}', replace, node.value) + def evaluate_foreach(self, node: mparser.ForeachClauseNode) -> None: assert(isinstance(node, mparser.ForeachClauseNode)) items = self.evaluate_statement(node.items) |