From bf84010e01bb11874689ce53ea4df853b2e41c2b Mon Sep 17 00:00:00 2001
From: A404M <ahmadmahmoudiprogrammer@gmail.com>
Date: Thu, 26 Sep 2024 21:54:33 +0330
Subject: some small performance improvements

---
 src/compiler/code_generator/code_generator.c |  1 +
 src/compiler/parser/parser.c                 | 10 +++++-----
 src/compiler/tree_parser/tree_parser.c       |  4 ++--
 3 files changed, 8 insertions(+), 7 deletions(-)

(limited to 'src/compiler')

diff --git a/src/compiler/code_generator/code_generator.c b/src/compiler/code_generator/code_generator.c
index 03901cd..75b89c6 100644
--- a/src/compiler/code_generator/code_generator.c
+++ b/src/compiler/code_generator/code_generator.c
@@ -199,6 +199,7 @@ bool nodeToInstruction(ParsedTree *tree, Instruction **instructions,
     case TREE_TOKEN_STRUCT:
     case TREE_TOKEN_FUNCTION:
     case TREE_TOKEN_NONE:
+    case TREE_TOKEN_ROOT:
   }
   printError("Unhandled token %s\n", code, tree->strBegin, tree->strEnd,
              TREE_TOKEN_STRINGS[tree->token]);
diff --git a/src/compiler/parser/parser.c b/src/compiler/parser/parser.c
index fcee276..ee9e69b 100644
--- a/src/compiler/parser/parser.c
+++ b/src/compiler/parser/parser.c
@@ -341,13 +341,12 @@ ParserScopeMetadata *parserScope(
     }
   }
 
-  ParsedNode **operands = a404m_malloc(nodes_inserted * sizeof(ParsedNode *));
   size_t nodes_size = nodes_inserted;
   nodes_inserted = 0;
 
   ParsedNode *last = NULL;
 
-  for(size_t i = nodes_size-1;i != (typeof(i))-1;++i){
+  for (size_t i = nodes_size - 1; i != (typeof(i))-1; ++i) {
     ParsedNode *currentNode = nodes[i];
     if (currentNode->parent == parent) {
       last = currentNode;
@@ -364,15 +363,16 @@ ParserScopeMetadata *parserScope(
                    PARSED_TOKEN_STRINGS[currentNode->token]);
         goto RETURN_ERROR;
       }
-      operands[nodes_inserted] = currentNode;
+      if (nodes_inserted != i) {
+        nodes[nodes_inserted] = currentNode;
+      }
       ++nodes_inserted;
     }
   }
-  free(nodes);
 
   ParserScopeMetadata *metadata = a404m_malloc(sizeof(*metadata));
   metadata->operands =
-      a404m_realloc(operands, nodes_inserted * sizeof(ParsedNode *));
+      a404m_realloc(nodes, nodes_inserted * sizeof(ParsedNode *));
   metadata->operands_size = nodes_inserted;
 
   return metadata;
diff --git a/src/compiler/tree_parser/tree_parser.c b/src/compiler/tree_parser/tree_parser.c
index 474b6ca..f657f97 100644
--- a/src/compiler/tree_parser/tree_parser.c
+++ b/src/compiler/tree_parser/tree_parser.c
@@ -496,7 +496,7 @@ ParsedTree *treeParseVariableDefinition(const ParsedNode *node,
 }
 
 ParsedTree *treeParseStruct(const ParsedNode *node, SourceCode *code,
-                            TreeScopeMetadata *scopes[], size_t scopes_size) {
+                            TreeScopeMetadata *[], size_t) {
   const ParserStructMetadata *node_metadata = node->metadata;
 
   ParsedTree *const tree = a404m_malloc(sizeof(*tree));
@@ -596,7 +596,7 @@ RETURN_ERROR:
 }
 
 ParsedTree *treeParseImport(const ParsedNode *node, SourceCode *code,
-                            TreeScopeMetadata *scopes[], size_t scopes_size) {
+                            TreeScopeMetadata *[], size_t) {
   const ParserImportMetadata *node_metadata = node->metadata;
   SizedString *path = nodeToString(node_metadata, code);
   if (path == NULL) {
-- 
cgit v1.2.3