From 8dc246166a007c2815f93ff6db535a660b05431c Mon Sep 17 00:00:00 2001 From: A404M Date: Mon, 9 Jun 2025 18:56:19 +0330 Subject: fix assigning to dereference access in a chain --- code/lib/vector.felan | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'code/lib/vector.felan') diff --git a/code/lib/vector.felan b/code/lib/vector.felan index a33d386..d6faece 100644 --- a/code/lib/vector.felan +++ b/code/lib/vector.felan @@ -21,16 +21,26 @@ __get_item__ :: (left:vector(anytype),index:i64) -> (@type_of(left.ptr.*)) { return (left.ptr + index).*; }; -__set_item__ :: (left:vector(anytype),index:i64,item:@type_of(left.ptr.*)) -> (@type_of(left.ptr.*)) { +__set_item__ :: (left:*vector(anytype),index:i64,item:@type_of(left.*.ptr.*)) -> (@type_of(left.ptr.*)) { return (left.ptr + index).* = item; }; -__get_item_address__ :: (left:vector(anytype),index:i64) -> (@type_of(left.ptr)) { +__get_item_address__ :: (left:*vector(anytype),index:i64) -> (@type_of(left.*.ptr)) { return (left.ptr + index); }; -push_back :: (vec:vector(anytype),value:@type_of(vec.ptr.*)) -> void { - @putc('h'); +push_back :: (vec:*vector(anytype),value:@type_of(vec.*[0])) -> void { + _grow_if_needed(vec); +}; + +_grow_if_needed :: (vec:*vector(anytype)) -> void { + if vec.*.size == vec.*.capacity { + @putc('a'); + vec.*.capacity = vec.*.capacity + vec.*.capacity/2u64 + 1u64; + vec.*.ptr = realloc(vec.*.ptr,vec.*.capacity); + }else{ + @putc('b'); + } }; delete :: (vec:vector(anytype)) -> void { -- cgit v1.2.3