summaryrefslogtreecommitdiff
path: root/src/runner
diff options
context:
space:
mode:
Diffstat (limited to 'src/runner')
-rw-r--r--src/runner/runner.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/runner/runner.c b/src/runner/runner.c
index a4945aa..958658a 100644
--- a/src/runner/runner.c
+++ b/src/runner/runner.c
@@ -163,6 +163,7 @@ AstTree *runAstTreeFunction(AstTree *tree, AstTree **arguments,
for (size_t i = 0; i < function->scope.expressions_size; ++i) {
AstTree *expr = function->scope.expressions[i];
+ RUN:
switch (expr->token) {
case AST_TREE_TOKEN_KEYWORD_PRINT_U64: {
AstTreeSingleChild *metadata = expr->metadata;
@@ -204,6 +205,16 @@ AstTree *runAstTreeFunction(AstTree *tree, AstTree **arguments,
runnerVariableSetValue(&pages, variable, copyAstTree(variable->value));
}
continue;
+ case AST_TREE_TOKEN_KEYWORD_IF: {
+ AstTreeIf *metadata = expr->metadata;
+ AstTree *tree = calcAstTreeValue(metadata->condition, &pages);
+ if ((AstTreeBool)tree->metadata) {
+ expr = metadata->body;
+ goto RUN;
+ }
+ astTreeDelete(tree);
+ }
+ continue;
case AST_TREE_TOKEN_OPERATOR_PLUS:
case AST_TREE_TOKEN_OPERATOR_MINUS:
case AST_TREE_TOKEN_OPERATOR_SUM:
@@ -323,6 +334,7 @@ AstTree *calcAstTreeValue(AstTree *tree, RunnerVariablePages *pages) {
UNREACHABLE;
}
}
+ case AST_TREE_TOKEN_KEYWORD_IF:
case AST_TREE_TOKEN_FUNCTION:
case AST_TREE_TOKEN_KEYWORD_PRINT_U64:
case AST_TREE_TOKEN_KEYWORD_RETURN: