summaryrefslogtreecommitdiff
path: root/src/runner
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-02-08 09:24:16 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-02-08 09:24:16 +0330
commit6345e8434dbb58172f4649e2e0997089bef7552c (patch)
tree7f0e91dcdd39db809b0e67e868c1b0b7c35d18e1 /src/runner
parent964c7178a371f79123d54a43671375f5c0ceb7e4 (diff)
add arguments
Diffstat (limited to 'src/runner')
-rw-r--r--src/runner/runner.c15
-rw-r--r--src/runner/runner.h3
2 files changed, 11 insertions, 7 deletions
diff --git a/src/runner/runner.c b/src/runner/runner.c
index 23cbca0..50d87df 100644
--- a/src/runner/runner.c
+++ b/src/runner/runner.c
@@ -18,14 +18,18 @@ bool runAstTree(AstTreeRoot *root) {
AstTree *main = variable->value;
AstTreeFunction *mainFunction = main->metadata;
- return runAstTreeFunction(mainFunction) == &AST_TREE_VOID_VALUE;
+ return runAstTreeFunction(mainFunction, NULL, 0) == &AST_TREE_VOID_VALUE;
}
}
printLog("main function is not found");
return false;
}
-AstTree *runAstTreeFunction(AstTreeFunction *function) {
+AstTree *runAstTreeFunction(AstTreeFunction *function, AstTree **arguments,
+ size_t arguments_size) {
+ for (size_t i = 0; i < arguments_size; ++i) {
+ function->arguments.data[i]->value = calcAstTreeValue(arguments[i]);
+ }
for (size_t i = 0; i < function->scope.expressions_size; ++i) {
AstTree expr = function->scope.expressions[i];
switch (expr.token) {
@@ -96,11 +100,10 @@ AstTree *calcAstTreeValue(AstTree *tree) {
}
case AST_TREE_TOKEN_FUNCTION_CALL: {
AstTreeFunctionCall *metadata = tree->metadata;
- if (metadata->parameters_size != 0) {
- UNREACHABLE;
- } else if (metadata->function->token == AST_TREE_TOKEN_VARIABLE) {
+ if (metadata->function->token == AST_TREE_TOKEN_VARIABLE) {
AstTreeVariable *variable = metadata->function->metadata;
- return runAstTreeFunction(variable->value->metadata);
+ return runAstTreeFunction(variable->value->metadata, metadata->parameters,
+ metadata->parameters_size);
} else {
UNREACHABLE;
}
diff --git a/src/runner/runner.h b/src/runner/runner.h
index f143cbc..71c720b 100644
--- a/src/runner/runner.h
+++ b/src/runner/runner.h
@@ -5,7 +5,8 @@
bool runAstTree(AstTreeRoot *root);
-AstTree *runAstTreeFunction(AstTreeFunction *function);
+AstTree *runAstTreeFunction(AstTreeFunction *function, AstTree **arguments,
+ size_t arguments_size);
AstTree *calcAstTreeValue(AstTree *tree);
AstTree *deepCopyAstTree(AstTree *tree);