diff options
-rw-r--r-- | code/lib/memory.felan | 4 | ||||
-rw-r--r-- | code/lib/vector.felan | 16 | ||||
-rw-r--r-- | code/main.felan | 4 | ||||
-rw-r--r-- | src/compiler/ast-tree.c | 16 |
4 files changed, 30 insertions, 10 deletions
diff --git a/code/lib/memory.felan b/code/lib/memory.felan index 7715d0e..55451c5 100644 --- a/code/lib/memory.felan +++ b/code/lib/memory.felan @@ -8,6 +8,6 @@ malloc :: (size:i64,comptime t:type) -> (*t) { return @cast(malloc(size*@cast(@size_of(t),i64)),*t); }; -free :: (a:*anytype) -> void { - free(@cast(a,*void)); +free :: (ptr:*anytype) -> void { + free(@cast(ptr,*void)); }; diff --git a/code/lib/vector.felan b/code/lib/vector.felan index 6ad1991..a33d386 100644 --- a/code/lib/vector.felan +++ b/code/lib/vector.felan @@ -17,6 +17,22 @@ vector_new :: (comptime t:type) -> (vector(t)) { return v; }; +__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; +}; + +__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'); +}; + delete :: (vec:vector(anytype)) -> void { free(vec.ptr); }; diff --git a/code/main.felan b/code/main.felan index b297e3f..20c815a 100644 --- a/code/main.felan +++ b/code/main.felan @@ -1,6 +1,5 @@ // @import("basic.felan"); @import("lib/vector.felan"); -// @import("lib/memory.felan"); /* t :: (comptime formatter : string) macro -> void { @@ -30,6 +29,9 @@ t :: (comptime formatter : string) macro -> void { main :: () -> void { v := vector_new(u8); + + push_back(v,2u8); + delete(v); }; diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c index ca79136..416e6fc 100644 --- a/src/compiler/ast-tree.c +++ b/src/compiler/ast-tree.c @@ -3906,6 +3906,9 @@ bool hasAnyTypeInside(AstTree *type) { } return false; } + case AST_TREE_TOKEN_OPERATOR_ARRAY_ACCESS: + case AST_TREE_TOKEN_OPERATOR_ARRAY_ACCESS_ASSIGN: + case AST_TREE_TOKEN_OPERATOR_ARRAY_ACCESS_ADDRESS: case AST_TREE_TOKEN_FUNCTION_CALL: { AstTreeFunctionCall *metadata = type->metadata; for (size_t i = 0; i < metadata->parameters.size; ++i) { @@ -3916,6 +3919,8 @@ bool hasAnyTypeInside(AstTree *type) { return false; } case AST_TREE_TOKEN_VARIABLE: + case AST_TREE_TOKEN_OPERATOR_ADDRESS: + case AST_TREE_TOKEN_OPERATOR_DEREFERENCE: return false; case AST_TREE_TOKEN_FUNCTION: case AST_TREE_TOKEN_KEYWORD_RETURN: @@ -3944,15 +3949,10 @@ bool hasAnyTypeInside(AstTree *type) { case AST_TREE_TOKEN_OPERATOR_SMALLER: case AST_TREE_TOKEN_OPERATOR_GREATER_OR_EQUAL: case AST_TREE_TOKEN_OPERATOR_SMALLER_OR_EQUAL: - case AST_TREE_TOKEN_OPERATOR_ADDRESS: - case AST_TREE_TOKEN_OPERATOR_DEREFERENCE: case AST_TREE_TOKEN_OPERATOR_ACCESS: case AST_TREE_TOKEN_OPERATOR_LOGICAL_NOT: case AST_TREE_TOKEN_OPERATOR_LOGICAL_AND: case AST_TREE_TOKEN_OPERATOR_LOGICAL_OR: - case AST_TREE_TOKEN_OPERATOR_ARRAY_ACCESS: - case AST_TREE_TOKEN_OPERATOR_ARRAY_ACCESS_ASSIGN: - case AST_TREE_TOKEN_OPERATOR_ARRAY_ACCESS_ADDRESS: case AST_TREE_TOKEN_OPERATOR_BITWISE_NOT: case AST_TREE_TOKEN_OPERATOR_BITWISE_AND: case AST_TREE_TOKEN_OPERATOR_BITWISE_XOR: @@ -8215,8 +8215,6 @@ AstTree *getShapeShifterElement(AstTreeFunctionCall *metadata, AstTreeFunction *newFunction = copyAstTreeFunction(shapeShifter->function, NULL, NULL, 0, true); - newFunction->isMacro = shapeShifter->function->isMacro; - AstTreeFunctionCallParam initedArguments[newFunction->arguments.size]; size_t initedArguments_size = newFunction->arguments.size; @@ -8531,6 +8529,8 @@ bool doesShapeShifterMatch(AstTreeShapeShifter *shapeShifter, goto RETURN_FALSE; } arg->value = copyAstTree(param.value); + astTreeDelete(arg->type); + arg->type = copyAstTree(param.value->type); initedArguments[j] = param; goto END_OF_NAMED_FOR1; } else { @@ -8560,6 +8560,8 @@ bool doesShapeShifterMatch(AstTreeShapeShifter *shapeShifter, goto RETURN_FALSE; } arg->value = copyAstTree(param.value); + astTreeDelete(arg->type); + arg->type = copyAstTree(param.value->type); initedArguments[j] = param; goto END_OF_UNNAMED_FOR1; } |