From 91214dfb533ac693880ef06b3e990d944009d2e4 Mon Sep 17 00:00:00 2001
From: A404M <ahmadmahmoudiprogrammer@gmail.com>
Date: Mon, 9 Jun 2025 19:33:11 +0330
Subject: changing access overloading to have pointer to value instead of value
 itself

---
 code/lib/operator.felan | 24 ++++++++++++------------
 code/lib/vector.felan   | 15 +++++++--------
 code/main.felan         | 10 ++++++----
 3 files changed, 25 insertions(+), 24 deletions(-)

(limited to 'code')

diff --git a/code/lib/operator.felan b/code/lib/operator.felan
index b7ac63a..52f4a3a 100644
--- a/code/lib/operator.felan
+++ b/code/lib/operator.felan
@@ -800,28 +800,28 @@ __sub__ :: (left:*anytype,right:i64) -> (@type_of(left)) {
   return @sub(left,right);
 };
 
-__get_item__ :: (left:*anytype,index:i64) -> (@type_of(left.*)) {
-  return (left + index).*;
+__get_item__ :: (left:**anytype,index:i64) -> (@type_of(left.*.*)) {
+  return (left.* + index).*;
 };
 
-__set_item__ :: (left:*anytype,index:i64,item:@type_of(left.*)) -> (@type_of(left.*)) {
-  return (left + index).* = item;
+__set_item__ :: (left:**anytype,index:i64,item:@type_of(left.*.*)) -> (@type_of(left.*.*)) {
+  return (left.* + index).* = item;
 };
 
-__get_item_address__ :: (left:*anytype,index:i64) -> (@type_of(left)) {
-  return (left + index);
+__get_item_address__ :: (left:**anytype,index:i64) -> (@type_of(left.*)) {
+  return (left.* + index);
 };
 
 //---------------------- Array ------------------------
 
-__get_item__ :: (left:[]anytype,index:i64) -> (@type_of(left.ptr.*)) {
-  return (left.ptr + index).*;
+__get_item__ :: (left:*[]anytype,index:i64) -> (@type_of(left.*.ptr.*)) {
+  return (left.*.ptr + index).*;
 };
 
-__set_item__ :: (left:[]anytype,index:i64,item:@type_of(left.ptr.*)) -> (@type_of(left.ptr.*)) {
-  return (left.ptr + index).* = item;
+__set_item__ :: (left:*[]anytype,index:i64,item:@type_of(left.*.ptr.*)) -> (@type_of(left.*.ptr.*)) {
+  return (left.*.ptr + index).* = item;
 };
 
-__get_item_address__ :: (left:[]anytype,index:i64) -> (@type_of(left.ptr)) {
-  return (left.ptr + index);
+__get_item_address__ :: (left:*[]anytype,index:i64) -> (@type_of(left.*.ptr)) {
+  return (left.*.ptr + index);
 };
diff --git a/code/lib/vector.felan b/code/lib/vector.felan
index d6faece..c4f2698 100644
--- a/code/lib/vector.felan
+++ b/code/lib/vector.felan
@@ -17,29 +17,28 @@ vector_new :: (comptime t:type) -> (vector(t)) {
   return v;
 };
 
-__get_item__ :: (left:vector(anytype),index:i64) -> (@type_of(left.ptr.*)) {
-  return (left.ptr + index).*;
+__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.*)) {
-  return (left.ptr + index).* = item;
+__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)) {
-  return (left.ptr + index);
+  return (left.*.ptr + index);
 };
 
 push_back :: (vec:*vector(anytype),value:@type_of(vec.*[0])) -> void {
   _grow_if_needed(vec);
+  vec.*[@cast(vec.*.size,i64)] = value;
+  vec.*.size += 1u64;
 };
 
 _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');
   }
 };
 
diff --git a/code/main.felan b/code/main.felan
index 63f98a2..3af33e4 100644
--- a/code/main.felan
+++ b/code/main.felan
@@ -1,5 +1,4 @@
-// @import("basic.felan");
-@import("lib/vector.felan");
+@import("basic.felan");
 
 /*
 t :: (comptime formatter : string) macro -> void {
@@ -28,9 +27,12 @@ t :: (comptime formatter : string) macro -> void {
 */
 
 main :: () -> void {
-  v := vector_new(u8);
+  v := vector_new(i64);
 
-  push_back(&v,'2');
+  push_back(&v,32);
+
+  println(v.capacity);
+  println(v[0]);
 
   delete(v);
 };
-- 
cgit v1.2.3