From 51bd3c172bc01c6fc3438e155ed4a24abc0a26ff Mon Sep 17 00:00:00 2001 From: dimgigov Date: Wed, 10 Jun 2026 12:03:31 +0300 Subject: [PATCH] Add Slice generic struct support and fix C backend generic filtering - Add lib/Slice.bux with Slice generic struct - Fix C backend to recognize Slice/Slice* as generic types - Use var instead of let for uninitialized Slice locals - Selfhost loop passes, tests pass --- lib/Slice.bux | 31 +++++++++++++++++++++++++++++++ src/c_backend.bux | 1 + 2 files changed, 32 insertions(+) create mode 100644 lib/Slice.bux diff --git a/lib/Slice.bux b/lib/Slice.bux new file mode 100644 index 0000000..8598c76 --- /dev/null +++ b/lib/Slice.bux @@ -0,0 +1,31 @@ +module Std::Slice { + +extern func bux_bounds_check(index: uint, len: uint); + +struct Slice { + data: *T, + len: uint, +} + +func Slice_FromArray(arr: *Array) -> Slice { + var s: Slice; + s.data = arr.data; + s.len = arr.len; + return s; +} + +func Slice_Get(self: *Slice, idx: uint) -> T { + bux_bounds_check(idx, self.len); + return self.data[idx]; +} + +func Slice_Set(self: *Slice, idx: uint, value: T) { + bux_bounds_check(idx, self.len); + self.data[idx] = value; +} + +func Slice_Len(self: *Slice) -> uint { + return self.len; +} + +} diff --git a/src/c_backend.bux b/src/c_backend.bux index 8396c46..2d7e7b1 100644 --- a/src/c_backend.bux +++ b/src/c_backend.bux @@ -683,6 +683,7 @@ func CBE_IsGenericTypeName(name: String) -> bool { if String_Eq(name, "MapEntry") || String_Eq(name, "MapEntry*") { return true; } if String_Eq(name, "StringMap") || String_Eq(name, "StringMap*") { return true; } if String_Eq(name, "StringMapEntry") || String_Eq(name, "StringMapEntry*") { return true; } + if String_Eq(name, "Slice") || String_Eq(name, "Slice*") { return true; } return false; }