From 84e65c63e7482590d535e86f7660a00ae8a0cecb Mon Sep 17 00:00:00 2001 From: dec05eba Date: Wed, 17 Jul 2019 19:23:16 +0200 Subject: Start on amal program Fix mutex issue in lhs expr which can cause a deadlock when a file has an error and throws and doesn't close the mutex and another thread waits for that mutex. The mutex can instead be removed and ignore race conditions which are uncommon. This should improve memory usage and performance. --- src/program.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/program.c (limited to 'src/program.c') diff --git a/src/program.c b/src/program.c new file mode 100644 index 0000000..aa39a4c --- /dev/null +++ b/src/program.c @@ -0,0 +1,41 @@ +#include "../include/program.h" +#include +#include + +void amal_program_init(amal_program *self) { + ignore_result_int(buffer_init(&self->data, NULL)); +} + +void amal_program_deinit(amal_program *self) { + buffer_deinit(&self->data); +} + +int amal_program_append_bytecode(amal_program *self, Bytecode *bytecode) { + return buffer_append(&self->data, bytecode->data.data, bytecode->data.size); +} + +int amal_program_run(amal_program *self) { + /* TODO: Implement */ + (void)self; + return 0; +} + +int amal_program_save(amal_program *self, const char *filepath) { + FILE *file; + file = fopen(filepath, "wb"); + if(!file) { + int err; + err = errno; + perror(filepath); + return -err; + } + if(fwrite(self->data.data, 1, self->data.size, file) != self->data.size) { + int err; + err = errno; + perror(filepath); + return -err; + } + fclose(file); + return 0; +} + -- cgit v1.2.3