Allow .. ranges to use "a..a-1" in order to express zero length.

This commit is contained in:
Christoffer Lerno
2025-10-10 00:34:30 +02:00
parent f3b7df2ab0
commit df67b7dddd
5 changed files with 152 additions and 8 deletions

View File

@@ -2845,8 +2845,13 @@ static void llvm_emit_slice_values(GenContext *c, Expr *slice, BEValue *parent_r
}
else
{
llvm_emit_int_comp(c, &excess, &start_index, &end_index, BINARYOP_GT);
llvm_emit_panic_if_true(c, &excess, "Negative size", slice->span, "Negative size (start %d is less than end %d)", &start_index, &end_index);
llvm_value_rvalue(c, &start_index);
llvm_value_rvalue(c, &end_index);
LLVMValueRef val = llvm_emit_add_int(c, end_index.type, end_index.value, llvm_const_int(c, end_index.type, 1), slice->span);
BEValue plus_one_end_index;
llvm_value_set(&plus_one_end_index, val, end_index.type);
llvm_emit_int_comp(c, &excess, &start_index, &plus_one_end_index, BINARYOP_GT);
llvm_emit_panic_if_true(c, &excess, "Negative size", slice->span, "Negative size (slice was: [%d..%d])", &start_index, &end_index);
if (len.value)
{