diff options
Diffstat (limited to 'src/runner')
-rw-r--r-- | src/runner/runner.c | 12 |
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: |