# SPDX-License-Identifier: Apache-2.0
# Copyright 2021 The Meson development team
from __future__ import annotations

import typing as T

from ...interpreterbase import (
    InterpreterObject,
    IterableObject,
    MesonInterpreterObject,
    MesonOperator,
    InvalidArguments,
)

if T.TYPE_CHECKING:
    from ...mesonlib 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)

    @InterpreterObject.operator(MesonOperator.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)
