summaryrefslogtreecommitdiff
path: root/src/runner
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-03-27 02:03:23 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-03-27 02:03:23 +0330
commit011414b35bdb4e7e1e819d12e9fb2f37f91b2682 (patch)
tree209f89bf0ceb2126e941450d600d0d03b2924ae5 /src/runner
parent3950c23e40207cd8a374fcd4aa5739c0a63115f5 (diff)
trying to change way of variables
Diffstat (limited to 'src/runner')
-rw-r--r--src/runner/runner.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/runner/runner.c b/src/runner/runner.c
index 52c9673..42f5ad3 100644
--- a/src/runner/runner.c
+++ b/src/runner/runner.c
@@ -159,10 +159,11 @@ bool runAstTree(AstTreeRoot *root) {
strncmp(variable->name_begin, MAIN_STR, MAIN_STR_SIZE) == 0 &&
variable_value->token == AST_TREE_TOKEN_FUNCTION) {
- AstTree *main = variable_value;
+ AstTree *main = copyAstTree(variable_value);
const bool ret =
runAstTreeFunction(main, NULL, 0, &pages) == &AST_TREE_VOID_VALUE;
+ astTreeDelete(main);
destroyRootPages(pages);
return ret;
}
@@ -299,9 +300,11 @@ AstTree *runExpression(AstTree *expr, RunnerVariablePages *pages,
AstTreeFunctionCall *metadata = expr->metadata;
if (metadata->function->token == AST_TREE_TOKEN_VARIABLE) {
AstTreeVariable *variable = metadata->function->metadata;
- return runAstTreeFunction(runnerVariableGetValue(pages, variable),
- metadata->parameters, metadata->parameters_size,
- pages);
+ AstTree *function = copyAstTree(runnerVariableGetValue(pages, variable));
+ AstTree *result = runAstTreeFunction(function, metadata->parameters,
+ metadata->parameters_size, pages);
+ astTreeDelete(function);
+ return result;
} else {
UNREACHABLE;
}