From 20ff73d84b85db77aecb2171ce4d0e13253cccfd Mon Sep 17 00:00:00 2001
From: A404M <ahmadmahmoudiprogrammer@gmail.com>
Date: Wed, 7 May 2025 14:32:53 +0330
Subject: add lazy to variables

---
 src/compiler/parser.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

(limited to 'src/compiler/parser.c')

diff --git a/src/compiler/parser.c b/src/compiler/parser.c
index 0d41a25..4781122 100644
--- a/src/compiler/parser.c
+++ b/src/compiler/parser.c
@@ -306,7 +306,7 @@ void parserNodePrint(const ParserNode *node, int indent) {
   case PARSER_TOKEN_CONSTANT:
   case PARSER_TOKEN_VARIABLE: {
     const ParserNodeVariableMetadata *metadata = node->metadata;
-    printf(",\n");
+    printf("isLazy=%b,\n", metadata->isLazy);
     for (int i = 0; i < indent; ++i)
       printf(" ");
     printf("name=\n");
@@ -1829,6 +1829,14 @@ ParserNode *parserVariable(LexerNode *node, LexerNode *begin, LexerNode *end,
   metadata->name = name;
   metadata->type = type;
 
+  LexerNode *flagNode = nameNode - 1;
+  if (flagNode >= begin && flagNode->parserNode == NULL && flagNode->token == LEXER_TOKEN_KEYWORD_LAZY) {
+    metadata->isLazy = true;
+    flagNode->parserNode = variableNode;
+  } else {
+    metadata->isLazy = false;
+  }
+
   variableNode->metadata = metadata;
 
   if (value != NULL) {
-- 
cgit v1.2.3