| # SPDX-License-Identifier: Apache-2.0 | |
| # Copyright 2021 The Meson development team | |
| from __future__ import annotations | |
| import typing as T | |
| from ...interpreterbase import ( | |
| MesonInterpreterObject, | |
| IterableObject, | |
| MesonOperator, | |
| InvalidArguments, | |
| ) | |
| if T.TYPE_CHECKING: | |
| from ...interpreterbase import SubProject | |
| class RangeHolder(MesonInterpreterObject, IterableObject): | |
| def __init__(self, start: int, stop: int, step: int, *, subproject: 'SubProject') -> None: | |
| super().__init__(subproject=subproject) | |
| self.range = range(start, stop, step) | |
| self.operators.update({ | |
| MesonOperator.INDEX: self.op_index, | |
| }) | |
| def op_index(self, other: int) -> int: | |
| try: | |
| return self.range[other] | |
| except IndexError: | |
| raise InvalidArguments(f'Index {other} out of bounds of range.') | |
| def iter_tuple_size(self) -> None: | |
| return None | |
| def iter_self(self) -> T.Iterator[int]: | |
| return iter(self.range) | |
| def size(self) -> int: | |
| return len(self.range) |