mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 14:48:47 +00:00
Add relative slice to type checks for built in len
This commit is contained in:
@@ -952,7 +952,7 @@ bool check_builtin_procedure(CheckerContext *c, Operand *operand, Ast *call, i32
|
|||||||
mode = Addressing_Constant;
|
mode = Addressing_Constant;
|
||||||
value = exact_value_i64(at->EnumeratedArray.count);
|
value = exact_value_i64(at->EnumeratedArray.count);
|
||||||
type = t_untyped_integer;
|
type = t_untyped_integer;
|
||||||
} else if (is_type_slice(op_type) && id == BuiltinProc_len) {
|
} else if ((is_type_slice(op_type) || is_type_relative_slice(op_type)) && id == BuiltinProc_len) {
|
||||||
mode = Addressing_Value;
|
mode = Addressing_Value;
|
||||||
} else if (is_type_dynamic_array(op_type)) {
|
} else if (is_type_dynamic_array(op_type)) {
|
||||||
mode = Addressing_Value;
|
mode = Addressing_Value;
|
||||||
|
|||||||
@@ -1042,7 +1042,7 @@ lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValue const &tv,
|
|||||||
return lb_string_len(p, v);
|
return lb_string_len(p, v);
|
||||||
} else if (is_type_array(t)) {
|
} else if (is_type_array(t)) {
|
||||||
GB_PANIC("Array lengths are constant");
|
GB_PANIC("Array lengths are constant");
|
||||||
} else if (is_type_slice(t)) {
|
} else if (is_type_slice(t) || is_type_relative_slice(t)) {
|
||||||
return lb_slice_len(p, v);
|
return lb_slice_len(p, v);
|
||||||
} else if (is_type_dynamic_array(t)) {
|
} else if (is_type_dynamic_array(t)) {
|
||||||
return lb_dynamic_array_len(p, v);
|
return lb_dynamic_array_len(p, v);
|
||||||
@@ -1068,7 +1068,7 @@ lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValue const &tv,
|
|||||||
GB_PANIC("Unreachable");
|
GB_PANIC("Unreachable");
|
||||||
} else if (is_type_array(t)) {
|
} else if (is_type_array(t)) {
|
||||||
GB_PANIC("Array lengths are constant");
|
GB_PANIC("Array lengths are constant");
|
||||||
} else if (is_type_slice(t)) {
|
} else if (is_type_slice(t) || is_type_relative_slice(t)) {
|
||||||
return lb_slice_len(p, v);
|
return lb_slice_len(p, v);
|
||||||
} else if (is_type_dynamic_array(t)) {
|
} else if (is_type_dynamic_array(t)) {
|
||||||
return lb_dynamic_array_cap(p, v);
|
return lb_dynamic_array_cap(p, v);
|
||||||
|
|||||||
@@ -1373,7 +1373,7 @@ lbValue lb_slice_elem(lbProcedure *p, lbValue slice) {
|
|||||||
return lb_emit_struct_ev(p, slice, 0);
|
return lb_emit_struct_ev(p, slice, 0);
|
||||||
}
|
}
|
||||||
lbValue lb_slice_len(lbProcedure *p, lbValue slice) {
|
lbValue lb_slice_len(lbProcedure *p, lbValue slice) {
|
||||||
GB_ASSERT(is_type_slice(slice.type));
|
GB_ASSERT(is_type_slice(slice.type) || is_type_relative_slice(slice.type));
|
||||||
return lb_emit_struct_ev(p, slice, 1);
|
return lb_emit_struct_ev(p, slice, 1);
|
||||||
}
|
}
|
||||||
lbValue lb_dynamic_array_elem(lbProcedure *p, lbValue da) {
|
lbValue lb_dynamic_array_elem(lbProcedure *p, lbValue da) {
|
||||||
|
|||||||
Reference in New Issue
Block a user