diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-03-27 19:07:45 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-03-27 19:07:45 +0330 |
commit | ef3346297dc292ea2f2b25368cd671136c529415 (patch) | |
tree | f9bcb84d16b01a877a041e11aa459687a0ab7ab0 | |
parent | 8ed01c4ca2d2356f008b40d8498173009f71d295 (diff) |
fix bug in multiple left value dereference
-rw-r--r-- | code/main.felan | 8 | ||||
-rw-r--r-- | src/runner/runner.c | 10 |
2 files changed, 10 insertions, 8 deletions
diff --git a/code/main.felan b/code/main.felan index 08da789..8647227 100644 --- a/code/main.felan +++ b/code/main.felan @@ -1,7 +1,7 @@ main :: () -> void { a :u64= 1; - b :*u64 = &a; - c :**u64 = &b; + b := &a; + c := &b; print_u64 b.*; print_u64 a; a = 2; @@ -17,6 +17,10 @@ main :: () -> void { print_u64 b.*; print_u64 a; print_u64 c.*.*; + c.*.* = 6; + print_u64 b.*; + print_u64 a; + print_u64 c.*.*; }; foo :: (a:u64)->void{ diff --git a/src/runner/runner.c b/src/runner/runner.c index 4966893..7d36b67 100644 --- a/src/runner/runner.c +++ b/src/runner/runner.c @@ -185,15 +185,13 @@ AstTree *runExpression(AstTree *expr, bool *shouldRet) { AstTreeVariable *left; if (metadata->left.token == AST_TREE_TOKEN_VARIABLE) { left = metadata->left.metadata; - } else if (metadata->left.token == AST_TREE_TOKEN_OPERATOR_DEREFERENCE) { + } else { AstTree *left_metadata = metadata->left.metadata; - if (left_metadata->token != AST_TREE_TOKEN_VARIABLE) { + AstTree *var = runExpression(left_metadata, shouldRet); + if (var->token != AST_TREE_TOKEN_VARIABLE) { UNREACHABLE; } - left = left_metadata->metadata; - left = left->value->metadata; - } else { - UNREACHABLE; + left = var->metadata; } runnerVariableSetValue(left, runExpression(&metadata->right, shouldRet)); return copyAstTree(left->value); |