summaryrefslogtreecommitdiff
path: root/src/runner/runner.c
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-04-16 14:38:29 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-04-16 14:38:29 +0330
commit3e51ec689bec7f50ebe5b9b13b1eb7b7c3688128 (patch)
tree150315adc3c8c00ee4575a048ed380b2b33f36b9 /src/runner/runner.c
parent070a3687529954280cf26f294432037a03d1542e (diff)
better search for main
Diffstat (limited to 'src/runner/runner.c')
-rw-r--r--src/runner/runner.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/src/runner/runner.c b/src/runner/runner.c
index f6e7e88..f5d81cd 100644
--- a/src/runner/runner.c
+++ b/src/runner/runner.c
@@ -45,24 +45,34 @@ bool runAstTree(AstTreeRoot *root) {
static const size_t MAIN_STR_SIZE =
(sizeof(MAIN_STR) / sizeof(*MAIN_STR)) - sizeof(*MAIN_STR);
+ AstTreeVariable *mainVariable = NULL;
+
for (size_t i = 0; i < root->variables.size; ++i) {
AstTreeVariable *variable = root->variables.data[i];
- AstTree *variable_value = variable->value;
size_t name_size = variable->name_end - variable->name_begin;
if (name_size == MAIN_STR_SIZE &&
strncmp(variable->name_begin, MAIN_STR, MAIN_STR_SIZE) == 0 &&
- variable_value->token == AST_TREE_TOKEN_FUNCTION) {
-
- AstTree *main = copyAstTree(variable_value);
-
- const bool ret =
- runAstTreeFunction(main, NULL, 0) == &AST_TREE_VOID_VALUE;
- astTreeDelete(main);
- return ret;
+ variable->value->token == AST_TREE_TOKEN_FUNCTION) {
+ if (mainVariable != NULL) {
+ printLog("Too many main variables");
+ return false;
+ }
+ mainVariable = variable;
}
}
- printLog("main function is not found");
- return false;
+
+ if (mainVariable == NULL) {
+ printLog("main function is not found");
+ return false;
+ }
+
+ AstTree *main = copyAstTree(mainVariable->value);
+
+ AstTree *res = runAstTreeFunction(main, NULL, 0);
+ const bool ret = res == &AST_TREE_VOID_VALUE;
+ astTreeDelete(res);
+ astTreeDelete(main);
+ return ret;
}
AstTree *runAstTreeFunction(AstTree *tree, AstTreeFunctionCallParam *arguments,