summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-03-27 19:21:37 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-03-27 19:21:37 +0330
commit8a1016425aba995a391271666b3ae8a29c2dd3f3 (patch)
treec637d88f6f66d9e71ead1a7d51112ee208e2abe7
parentef3346297dc292ea2f2b25368cd671136c529415 (diff)
fix memory leak
-rw-r--r--code/main.felan3
-rw-r--r--src/compiler/parser.c2
-rw-r--r--src/runner/runner.c1
3 files changed, 5 insertions, 1 deletions
diff --git a/code/main.felan b/code/main.felan
index 8647227..cd32cce 100644
--- a/code/main.felan
+++ b/code/main.felan
@@ -1,6 +1,8 @@
main :: () -> void {
a :u64= 1;
+ a1 :u64= 9;
b := &a;
+ b1 :*u64= &a1;
c := &b;
print_u64 b.*;
print_u64 a;
@@ -18,6 +20,7 @@ main :: () -> void {
print_u64 a;
print_u64 c.*.*;
c.*.* = 6;
+ b = b1;
print_u64 b.*;
print_u64 a;
print_u64 c.*.*;
diff --git a/src/compiler/parser.c b/src/compiler/parser.c
index 2ab8860..d508110 100644
--- a/src/compiler/parser.c
+++ b/src/compiler/parser.c
@@ -113,7 +113,7 @@ static constexpr ParserOrder PARSER_ORDER[] = {
ORDER_ARRAY(LEXER_TOKEN_SYMBOL_DEREFERENCE, ),
},
{
- .ltr = true,
+ .ltr = false,
ORDER_ARRAY(LEXER_TOKEN_SYMBOL_PLUS, LEXER_TOKEN_SYMBOL_MINUS,
LEXER_TOKEN_SYMBOL_ADDRESS, ),
},
diff --git a/src/runner/runner.c b/src/runner/runner.c
index 7d36b67..2c38f74 100644
--- a/src/runner/runner.c
+++ b/src/runner/runner.c
@@ -192,6 +192,7 @@ AstTree *runExpression(AstTree *expr, bool *shouldRet) {
UNREACHABLE;
}
left = var->metadata;
+ astTreeDelete(var);
}
runnerVariableSetValue(left, runExpression(&metadata->right, shouldRet));
return copyAstTree(left->value);