From ef3346297dc292ea2f2b25368cd671136c529415 Mon Sep 17 00:00:00 2001 From: A404M Date: Thu, 27 Mar 2025 19:07:45 +0330 Subject: fix bug in multiple left value dereference --- src/runner/runner.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'src/runner') 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); -- cgit v1.2.3