@noKwargs
@FeatureNew('range', '0.58.0')
@typed_pos_args('range', int, optargs=[int, int])
def func_range(self, node, args: T.Tuple[(int, T.Optional[int], T.Optional[int])], kwargs: T.Dict[(str, T.Any)]) -> P_OBJ.RangeHolder:
    (start, stop, step) = args
    if (stop is None):
        stop = start
        start = 0
    if (step is None):
        step = 1
    if (start < 0):
        raise InterpreterException('start cannot be negative')
    if (stop < start):
        raise InterpreterException('stop cannot be less than start')
    if (step < 1):
        raise InterpreterException('step must be >=1')
    return P_OBJ.RangeHolder(start, stop, step, subproject=self.subproject)
@noKwargs
@FeatureNew('range', '0.58.0')
@typed_pos_args('range', int, optargs=[int, int])
def func_range(self, node, args: T.Tuple[(int, T.Optional[int], T.Optional[int])], kwargs: T.Dict[(str, T.Any)]) -> P_OBJ.RangeHolder:
    (start, stop, step) = args
    if (stop is None):
        stop = start
        start = 0
    if (step is None):
        step = 1
    if (start < 0):
        raise InterpreterException('start cannot be negative')
    if (stop < start):
        raise InterpreterException('stop cannot be less than start')
    if (step < 1):
        raise InterpreterException('step must be >=1')
    return P_OBJ.RangeHolder(start, stop, step, subproject=self.subproject)