mirror of https://github.com/exaloop/codon.git
Fix loops
parent
10503d3c2a
commit
377e619f7f
|
@ -299,6 +299,18 @@ TypecheckVisitor::transformStaticLoopCall(
|
|||
}
|
||||
block.push_back(wrap(clone(stmt)));
|
||||
}
|
||||
} else if (fn && startswith(fn->value, "std.internal.types.range.staticrange.0:1")) {
|
||||
if (vars.size() != 1)
|
||||
error("expected one item");
|
||||
auto ed =
|
||||
fn->type->getFunc()->funcGenerics[0].type->getStatic()->evaluate().getInt();
|
||||
if (ed > MAX_STATIC_ITER)
|
||||
E(Error::STATIC_RANGE_BOUNDS, fn, MAX_STATIC_ITER, ed);
|
||||
for (int64_t i = 0; i < ed; i++) {
|
||||
stmt->rhs = N<IntExpr>(i);
|
||||
stmt->type = NT<IndexExpr>(N<IdExpr>("Static"), N<IdExpr>("int"));
|
||||
block.push_back(wrap(clone(stmt)));
|
||||
}
|
||||
} else if (fn && startswith(fn->value, "std.internal.types.range.staticrange.0")) {
|
||||
if (vars.size() != 1)
|
||||
error("expected one item");
|
||||
|
@ -315,18 +327,6 @@ TypecheckVisitor::transformStaticLoopCall(
|
|||
stmt->type = NT<IndexExpr>(N<IdExpr>("Static"), N<IdExpr>("int"));
|
||||
block.push_back(wrap(clone(stmt)));
|
||||
}
|
||||
} else if (fn && startswith(fn->value, "std.internal.types.range.staticrange.0:1")) {
|
||||
if (vars.size() != 1)
|
||||
error("expected one item");
|
||||
auto ed =
|
||||
fn->type->getFunc()->funcGenerics[0].type->getStatic()->evaluate().getInt();
|
||||
if (ed > MAX_STATIC_ITER)
|
||||
E(Error::STATIC_RANGE_BOUNDS, fn, MAX_STATIC_ITER, ed);
|
||||
for (int64_t i = 0; i < ed; i++) {
|
||||
stmt->rhs = N<IntExpr>(i);
|
||||
stmt->type = NT<IndexExpr>(N<IdExpr>("Static"), N<IdExpr>("int"));
|
||||
block.push_back(wrap(clone(stmt)));
|
||||
}
|
||||
} else if (fn && startswith(fn->value, "std.internal.static.fn_overloads.0")) {
|
||||
if (vars.size() != 1)
|
||||
error("expected one item");
|
||||
|
|
|
@ -95,7 +95,6 @@ class range:
|
|||
else:
|
||||
return f"range({self.start}, {self.stop}, {self.step})"
|
||||
|
||||
@overload
|
||||
def staticrange(start: Static[int], stop: Static[int], step: Static[int] = 1):
|
||||
return range(start, stop, step)
|
||||
|
||||
|
|
Loading…
Reference in New Issue