aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreterbase.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/interpreterbase.py')
-rw-r--r--mesonbuild/interpreterbase.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py
index 837a4f8..12e4fc4 100644
--- a/mesonbuild/interpreterbase.py
+++ b/mesonbuild/interpreterbase.py
@@ -501,12 +501,24 @@ class InterpreterBase:
return len(obj)
elif method_name == 'get':
index = args[0]
+ fallback = None
+ if len(args) == 2:
+ fallback = args[1]
+ elif len(args) > 2:
+ m = 'Array method \'get()\' only takes two arguments: the ' \
+ 'index and an optional fallback value if the index is ' \
+ 'out of range.'
+ raise InvalidArguments(m)
if not isinstance(index, int):
raise InvalidArguments('Array index must be a number.')
if index < -len(obj) or index >= len(obj):
- raise InvalidArguments('Array index %s is out of bounds for array of size %d.' % (index, len(obj)))
+ if fallback is None:
+ m = 'Array index {!r} is out of bounds for array of size {!r}.'
+ raise InvalidArguments(m.format(index, len(obj)))
+ return fallback
return obj[index]
- raise InterpreterException('Arrays do not have a method called "%s".' % method_name)
+ m = 'Arrays do not have a method called {!r}.'
+ raise InterpreterException(m.format(method_name))
def reduce_arguments(self, args):
assert(isinstance(args, mparser.ArgumentNode))