summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--code/main.felan8
-rw-r--r--src/runner/runner.c10
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);