#include "code_generator.h" #include #include #include #include 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; }