From c409b8aaf6b6f63bd68a3356e146ab80b2ec8c4b Mon Sep 17 00:00:00 2001 From: A404M Date: Wed, 25 Sep 2024 19:47:29 +0330 Subject: fixed multiple variable definition bug tried to implement import --- src/compiler/source_code/source_code.c | 57 ++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/compiler/source_code/source_code.c (limited to 'src/compiler/source_code/source_code.c') diff --git a/src/compiler/source_code/source_code.c b/src/compiler/source_code/source_code.c new file mode 100644 index 0000000..7f1c8fa --- /dev/null +++ b/src/compiler/source_code/source_code.c @@ -0,0 +1,57 @@ +#include "source_code.h" + +#include +#include + +Code makeCode(char *filePath, char *code) { + const Code result = { + .filePath = filePath, + .code = code, + }; + return result; +} + +SourceCode makeSourceCode() { + const SourceCode result = { + .codes = NULL, + .size = 0, + }; + return result; +} + +SourceCode *newSourceCode() { + SourceCode *result = a404m_malloc(sizeof(*result)); + result->codes = NULL; + result->size = 0; + return result; +} + +void pushToSourceCode(SourceCode *sourceCode, Code *code) { + size_t size = a404m_malloc_usable_size(sourceCode->codes) / sizeof(Code *); + if (sourceCode->size == size) { + size += size / 2 + 1; + sourceCode->codes = a404m_realloc(sourceCode->codes, size * sizeof(Code *)); + } + sourceCode->codes[sourceCode->size] = code; + sourceCode->size += 1; +} + +void deleteSourceCodeInners(SourceCode sourceCode) { + if (sourceCode.size != 0) { + for (size_t i = 0; i < sourceCode.size; ++i) { + deleteCode(sourceCode.codes[i]); + } + free(sourceCode.codes); + } +} + +void deleteSourceCode(SourceCode *sourceCode) { + deleteSourceCodeInners(*sourceCode); + free(sourceCode); +} + +void deleteCode(Code *code) { + free(code->filePath); + free(code->code); + free(code); +} -- cgit v1.2.3