From 5c336962d3d0a885a870708076f154ee422fee12 Mon Sep 17 00:00:00 2001
From: A404M <ahmadmahmoudiprogrammer@gmail.com>
Date: Wed, 12 Feb 2025 11:55:38 +0330
Subject: add if

---
 src/runner/runner.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

(limited to 'src/runner/runner.c')

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:
-- 
cgit v1.2.3