aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-06-09 19:33:11 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-06-09 19:33:11 +0330
commit91214dfb533ac693880ef06b3e990d944009d2e4 (patch)
tree0f6c10317fff37ed1c7d70858eb067e95952d9a7
parent8dc246166a007c2815f93ff6db535a660b05431c (diff)
changing access overloading to have pointer to value instead of value
itself
-rw-r--r--code/lib/operator.felan24
-rw-r--r--code/lib/vector.felan15
-rw-r--r--code/main.felan10
-rw-r--r--src/compiler/ast-tree.c5
4 files changed, 29 insertions, 25 deletions
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);
};
diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c
index 416e6fc..e02a58c 100644
--- a/src/compiler/ast-tree.c
+++ b/src/compiler/ast-tree.c
@@ -3775,7 +3775,10 @@ AstTree *astTreeParseArrayAccessOperator(const ParserNode *parserNode) {
metadata->parameters.data = a404m_malloc(metadata->parameters.size *
sizeof(*metadata->parameters.data));
- metadata->parameters.data[0].value = astTreeParse(node_metadata->operand);
+ AstTree *value = astTreeParse(node_metadata->operand);
+ metadata->parameters.data[0].value =
+ newAstTree(AST_TREE_TOKEN_OPERATOR_ADDRESS, value, NULL, value->str_begin,
+ value->str_end);
metadata->parameters.data[0].nameBegin = NULL;
metadata->parameters.data[0].nameEnd = NULL;