summaryrefslogtreecommitdiff
path: root/src/runner
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-02-23 20:06:47 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-02-23 20:07:04 +0330
commit4a39184dfcf0af72e2a28ffed2e3b342202fcba1 (patch)
tree804e466b54f6c3e99ec0caab9e8a1e1b31b052ba /src/runner
parent1d13c72fb9fb40e35c64713a9176d263ad5fe09d (diff)
fix some bugs
Diffstat (limited to 'src/runner')
-rw-r--r--src/runner/runner.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/runner/runner.c b/src/runner/runner.c
index b5f0cb3..756d333 100644
--- a/src/runner/runner.c
+++ b/src/runner/runner.c
@@ -22,8 +22,9 @@
bool res = (bool)(((_type)(originalType)(op0)->metadata) operator( \
(_type)(originalType)(op1)->metadata)); \
astTreeDestroy(*(op0)); \
- (op0)->metadata = (void *)(u64)res; \
+ (op0)->metadata = (void *)(bool)res; \
(op0)->type = &AST_TREE_BOOL_TYPE; \
+ (op0)->token = AST_TREE_TOKEN_VALUE_BOOL; \
}
#define doLogicalOperationFloat(op0, op1, operator, originalType, _type) \
@@ -31,8 +32,9 @@
bool res = (bool)(((_type) * ((originalType *)(op0)->metadata)) operator( \
(_type) * ((originalType *)(op1)->metadata))); \
astTreeDestroy(*(op0)); \
- (op0)->metadata = (void *)(u64)res; \
+ (op0)->metadata = (void *)(bool)res; \
(op0)->type = &AST_TREE_BOOL_TYPE; \
+ (op0)->token = AST_TREE_TOKEN_VALUE_BOOL; \
}
#define doLeftOperation(op0, operator, originalType, type) \
@@ -164,7 +166,7 @@ void runnerVariableSetValue(RunnerVariablePages *pages,
}
}
- printError(variable->name_begin,variable->name_end,"Variable not found");
+ printError(variable->name_begin, variable->name_end, "Variable not found");
UNREACHABLE;
}
@@ -187,7 +189,7 @@ AstTree *runnerVariableGetValue(RunnerVariablePages *pages,
}
}
- printError(variable->name_begin,variable->name_end,"Variable not found");
+ printError(variable->name_begin, variable->name_end, "Variable not found");
UNREACHABLE;
}
@@ -343,14 +345,16 @@ AstTree *runExpression(AstTree *expr, RunnerVariablePages *pages) {
return NULL;
case AST_TREE_TOKEN_KEYWORD_IF: {
AstTreeIf *metadata = expr->metadata;
- AstTree *tree = runExpression(metadata->condition, pages);
+ AstTree *condition = runExpression(metadata->condition, pages);
AstTree *ret;
- if ((AstTreeBool)tree->metadata) {
+ if ((AstTreeBool)condition->metadata) {
ret = runExpression(metadata->ifBody, pages);
- } else {
+ } else if (metadata->elseBody != NULL) {
ret = runExpression(metadata->elseBody, pages);
+ } else {
+ ret = NULL;
}
- astTreeDelete(tree);
+ astTreeDelete(condition);
return ret;
}
case AST_TREE_TOKEN_KEYWORD_WHILE: {