From addd54dc31603dc204773d3108dba4e000cd7657 Mon Sep 17 00:00:00 2001
From: A404M <ahmadmahmoudiprogrammer@gmail.com>
Date: Tue, 8 Oct 2024 04:16:27 +0330
Subject: added fasm support added compiler options tried to compile to fasm
 first

---
 src/fasm/code_generator/code_generator.c | 42 ++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)
 create mode 100644 src/fasm/code_generator/code_generator.c

(limited to 'src/fasm/code_generator/code_generator.c')

diff --git a/src/fasm/code_generator/code_generator.c b/src/fasm/code_generator/code_generator.c
new file mode 100644
index 0000000..0df70f5
--- /dev/null
+++ b/src/fasm/code_generator/code_generator.c
@@ -0,0 +1,42 @@
+#include "code_generator.h"
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <utils/memory/memory.h>
+
+void deleteByteCodeInners(ByteCode bytecode) {
+  free(bytecode.code);
+  free(bytecode.data);
+  free(bytecode.labels);
+}
+
+ByteCode fasmCodeGenerator(FasmLinkedLines *lines) {
+  ByteCode bytecode = {
+      .code = a404m_malloc(0),
+      .code_size = 0,
+      .data = lines->data,
+      .data_size = lines->data_size,
+      .labels = lines->variables,
+      .labels_size = lines->variables_size,
+  };
+
+  lines->data = a404m_malloc(0);
+  lines->data_size = 0;
+  lines->variables = a404m_malloc(0);
+  lines->variables_size = 0;
+
+  for (size_t i = 0; i < lines->lines_size; ++i) {
+    const FasmLinkedLine line = lines->lines[i];
+    const size_t size = sizeof(line.instruction) + line.operands_size;
+    bytecode.code = a404m_realloc(bytecode.code, bytecode.code_size + size);
+    memcpy(bytecode.code + bytecode.code_size, &line.instruction,
+           sizeof(line.instruction));
+    bytecode.code_size += sizeof(line.instruction);
+    memcpy(bytecode.code + bytecode.code_size, line.operands,
+           line.operands_size);
+    bytecode.code_size += line.operands_size;
+  }
+
+  return bytecode;
+}
-- 
cgit v1.2.3