diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2021-02-06 11:14:25 -0500 |
---|---|---|
committer | Xavier Claessens <xclaesse@gmail.com> | 2021-03-16 20:50:16 -0400 |
commit | a45f939092cc2c60d49040bdb0147758a1403f61 (patch) | |
tree | 76db6837f0ca5cf9a0546f80a8a88dc7a79d24bb /mesonbuild/interpreterbase.py | |
parent | 6415453f17f85e16d1d2ca3553325b769d0f124d (diff) | |
download | meson-a45f939092cc2c60d49040bdb0147758a1403f61.zip meson-a45f939092cc2c60d49040bdb0147758a1403f61.tar.gz meson-a45f939092cc2c60d49040bdb0147758a1403f61.tar.bz2 |
Add range() function
Fixes: #5026.
Diffstat (limited to 'mesonbuild/interpreterbase.py')
-rw-r--r-- | mesonbuild/interpreterbase.py | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py index 1764713..a364510 100644 --- a/mesonbuild/interpreterbase.py +++ b/mesonbuild/interpreterbase.py @@ -70,6 +70,20 @@ class ObjectHolder(T.Generic[TV_InterpreterObject]): class MesonVersionString(str): pass +class RangeHolder(InterpreterObject): + def __init__(self, start: int, stop: int, step: int) -> None: + super().__init__() + self.range = range(start, stop, step) + + def __iter__(self) -> T.Iterator[int]: + return iter(self.range) + + def __getitem__(self, key: int) -> int: + return self.range[key] + + def __len__(self) -> int: + return len(self.range) + # Decorators for method calls. def check_stringlist(a: T.Any, msg: str = 'Arguments must be strings.') -> None: @@ -950,7 +964,7 @@ The result of this is undefined and will become a hard error in a future Meson r assert(isinstance(node, mparser.ForeachClauseNode)) items = self.evaluate_statement(node.items) - if isinstance(items, list): + if isinstance(items, (list, RangeHolder)): if len(node.varnames) != 1: raise InvalidArguments('Foreach on array does not unpack') varname = node.varnames[0] |