aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreterbase.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-01-23 20:00:00 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2017-01-23 22:02:37 +0200
commit8ec9b0a71ffa1043b17a11e594219971c9288600 (patch)
tree9af061db5305e1724779524bf90788eafdc59b35 /mesonbuild/interpreterbase.py
parent8e9f0c954c08d959eb5ed52b726ab03855968cec (diff)
downloadmeson-8ec9b0a71ffa1043b17a11e594219971c9288600.zip
meson-8ec9b0a71ffa1043b17a11e594219971c9288600.tar.gz
meson-8ec9b0a71ffa1043b17a11e594219971c9288600.tar.bz2
Better error message when using = rather than : for defining keywords.
Diffstat (limited to 'mesonbuild/interpreterbase.py')
-rw-r--r--mesonbuild/interpreterbase.py10
1 files changed, 8 insertions, 2 deletions
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py
index e4dd58b..837a4f8 100644
--- a/mesonbuild/interpreterbase.py
+++ b/mesonbuild/interpreterbase.py
@@ -1,4 +1,4 @@
-# Copyright 2016 The Meson development team
+# Copyright 2016-2017 The Meson development team
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -86,6 +86,7 @@ class InterpreterBase:
self.builtin = {}
self.subdir = subdir
self.variables = {}
+ self.argument_depth = 0
def load_root_meson_file(self):
mesonfile = os.path.join(self.source_root, self.subdir, environment.build_filename)
@@ -511,6 +512,7 @@ class InterpreterBase:
assert(isinstance(args, mparser.ArgumentNode))
if args.incorrect_order():
raise InvalidArguments('All keyword arguments must be after positional arguments.')
+ self.argument_depth += 1
reduced_pos = [self.evaluate_statement(arg) for arg in args.arguments]
reduced_kw = {}
for key in args.kwargs.keys():
@@ -520,6 +522,7 @@ class InterpreterBase:
reduced_kw[key] = self.evaluate_statement(a)
if not isinstance(reduced_pos, list):
reduced_pos = [reduced_pos]
+ self.argument_depth -= 1
return reduced_pos, reduced_kw
def flatten(self, args):
@@ -540,6 +543,9 @@ class InterpreterBase:
def assignment(self, node):
assert(isinstance(node, mparser.AssignmentNode))
+ if self.argument_depth != 0:
+ raise InvalidArguments('''Tried to assign values inside an argument list.
+To specify a keyword argument, use : instead of =.''')
var_name = node.var_name
if not isinstance(var_name, str):
raise InvalidArguments('Tried to assign value to a non-variable.')
@@ -551,7 +557,7 @@ class InterpreterBase:
if isinstance(value, MutableInterpreterObject):
value = copy.deepcopy(value)
self.set_variable(var_name, value)
- return value
+ return None
def set_variable(self, varname, variable):
if variable is None: