new bug found

This commit is contained in:
koniifer 2024-12-31 22:15:45 +00:00
parent 5232c465d2
commit 03bf6548dc
2 changed files with 8 additions and 8 deletions
src
lib/collections
main.hb

View file

@ -24,12 +24,12 @@ Vec := fn($T: type, $A: type): type return struct {
// ! (compiler?) bug: null check broken, so unwrapping (unsafe!)
new_alloc := @unwrap(self.allocator.alloc(T, self.cap))
if self.slice.len != 0 {
if self.slice.len > 0 {
target.memmove(@bitcast(new_alloc), @bitcast(self.slice.ptr), self.slice.len * @sizeof(T))
self.allocator.free(T, self.slice.ptr)
}
self.slice.ptr = @as(^T, new_alloc)
};
self.slice.ptr = new_alloc
}
self.slice[self.slice.len] = value
self.slice.len += 1
}
@ -45,9 +45,8 @@ Vec := fn($T: type, $A: type): type return struct {
$get_ref_unchecked := fn(self: ^Self, n: uint): T return self.slice.ptr + n
pop := fn(self: ^Self): Result(T, Error) {
if self.slice.len == 0 return Result(T, Error).err(.OutOfRange)
temp := self.slice[self.slice.len - 1]
self.slice = self.slice[..self.slice.len - 1]
return Result(T, Error).ok(temp)
self.slice.len -= 1
return Result(T, Error).ok(self.slice[self.slice.len + 1])
}
$len := fn(self: ^Self): uint return self.slice.len
$capacity := fn(self: ^Self): uint return self.cap

View file

@ -5,16 +5,17 @@ Vec := std.collections.Vec
main := fn(argc: uint, argv: []^u8): uint {
allocator := Allocator.new()
// ! (compiler?) (target_hbvm_ableos) bug: defer deinit on allocator causes kernel panic
defer allocator.deinit()
vec := Vec(int, Allocator).new(&allocator)
defer vec.deinit()
i: int = 0
loop if i == 97 break else {
loop if i == 10 break else {
defer i += 1
vec.push(i)
}
// ! (compiler?) (target_c_native?) bug: not popping here causes len & cap to be zero
_ = vec.pop()
vec.push(vec.pop().unwrap_or(0))
return vec.len()
}