diff options
Diffstat (limited to 'masm/asm.c')
-rw-r--r-- | masm/asm.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/masm/asm.c b/masm/asm.c new file mode 100644 index 0000000..6e2a56c --- /dev/null +++ b/masm/asm.c @@ -0,0 +1,41 @@ +#include <merror.h> +#include <stdlib.h> + +#include "asm.h" + +int assembler_init(struct assembler *asm, const char *path) +{ + if (lexer_init(path, &asm->lexer)) + return M_ERROR; + + if (parser_init(&asm->lexer, &asm->parser)) { + lexer_free(&asm->lexer); + return M_ERROR; + } + + if (strtbl_init(&asm->shstr_tbl)) { + parser_free(&asm->parser); + lexer_free(&asm->lexer); + return M_ERROR; + } + + if (strtbl_init(&asm->str_tbl)) { + strtbl_free(&asm->shstr_tbl); + parser_free(&asm->parser); + lexer_free(&asm->lexer); + return M_ERROR; + } + + asm->meta = NULL; + + return M_SUCCESS; +} + +void assembler_free(struct assembler *asm) +{ + strtbl_free(&asm->str_tbl); + strtbl_free(&asm->shstr_tbl); + parser_free(&asm->parser); + lexer_free(&asm->lexer); + free(asm->meta); +} |