diff options
-rw-r--r-- | code/main.felan | 3 | ||||
-rw-r--r-- | src/compiler/parser.c | 2 | ||||
-rw-r--r-- | src/runner/runner.c | 1 |
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); |