aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter.py
diff options
context:
space:
mode:
authorJoergen Ibsen <ji@ibse.dk>2017-11-19 15:08:58 +0100
committerJussi Pakkanen <jpakkane@gmail.com>2017-12-03 22:51:58 +0200
commit312bc2ca810e333e7d8dd42e55ae9bd348757a07 (patch)
tree6485efe90ff2f60fbbca786c72104da77e57d23f /mesonbuild/interpreter.py
parentcf76ffad145eb83a0bbfce89e05b7610637ff293 (diff)
downloadmeson-312bc2ca810e333e7d8dd42e55ae9bd348757a07.zip
meson-312bc2ca810e333e7d8dd42e55ae9bd348757a07.tar.gz
meson-312bc2ca810e333e7d8dd42e55ae9bd348757a07.tar.bz2
Fix string format recursive replace
Also error on placeholder index out of range.
Diffstat (limited to 'mesonbuild/interpreter.py')
-rw-r--r--mesonbuild/interpreter.py13
1 files changed, 10 insertions, 3 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 3e89305..f112d7b 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -2999,12 +2999,19 @@ different subdirectory.
def format_string(self, templ, args):
if isinstance(args, mparser.ArgumentNode):
args = args.arguments
- for (i, arg) in enumerate(args):
+ arg_strings = []
+ for arg in args:
arg = self.evaluate_statement(arg)
if isinstance(arg, bool): # Python boolean is upper case.
arg = str(arg).lower()
- templ = templ.replace('@{}@'.format(i), str(arg))
- return templ
+ arg_strings.append(str(arg))
+
+ def arg_replace(match):
+ idx = int(match.group(1))
+ if idx >= len(arg_strings):
+ raise InterpreterException('Format placeholder @{}@ out of range.'.format(idx))
+ return arg_strings[idx]
+ return re.sub(r'@(\d+)@', arg_replace, templ)
# Only permit object extraction from the same subproject
def validate_extraction(self, buildtarget):