diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-06-09 19:33:11 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-06-09 19:33:11 +0330 |
commit | 91214dfb533ac693880ef06b3e990d944009d2e4 (patch) | |
tree | 0f6c10317fff37ed1c7d70858eb067e95952d9a7 | |
parent | 8dc246166a007c2815f93ff6db535a660b05431c (diff) |
changing access overloading to have pointer to value instead of value
itself
-rw-r--r-- | code/lib/operator.felan | 24 | ||||
-rw-r--r-- | code/lib/vector.felan | 15 | ||||
-rw-r--r-- | code/main.felan | 10 | ||||
-rw-r--r-- | src/compiler/ast-tree.c | 5 |
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; |