From: fennecdjay Date: Mon, 31 Dec 2018 10:41:14 +0000 (+0100) Subject: :art: SplitEmit X-Git-Tag: nightly~2771 X-Git-Url: http://10.11.0.4:5575/?a=commitdiff_plain;h=d6ecf7985873c4a84a0d8a154008c5531adc6435;p=gwion.git :art: SplitEmit --- diff --git a/src/emit/emit.c b/src/emit/emit.c index 14cffaff..7c90651c 100644 --- a/src/emit/emit.c +++ b/src/emit/emit.c @@ -88,25 +88,6 @@ ANN static m_bool emit_stmt_list(const Emitter emit, Stmt_List list); ANN static m_bool emit_exp_dot(const Emitter emit, const Exp_Dot* member); ANN static m_bool emit_func_def(const Emitter emit, const Func_Def func_def); -ANEW Emitter new_emitter(void) { - Emitter emit = (Emitter)xcalloc(1, sizeof(struct Emitter_)); - vector_init(&emit->stack); - return emit; -} - -ANN void free_emitter(Emitter a) { - vector_release(&a->stack); - xfree(a); -} - -__attribute__((returns_nonnull)) -ANN2(1) Instr emit_add_instr(const Emitter emit, const f_instr f) { - const Instr instr = mp_alloc(Instr); - instr->execute = f; - vector_add(&emit->code->instr, (vtype)instr); - return instr; -} - ANEW static Code* new_code(const Emitter emit, const m_str name) { Code* code = mp_alloc(Code); code->name = code_name_set(name, emit->env->name); diff --git a/src/emit/emitter.c b/src/emit/emitter.c new file mode 100644 index 00000000..4c46f643 --- /dev/null +++ b/src/emit/emitter.c @@ -0,0 +1,29 @@ +#include "gwion_util.h" +#include "gwion_ast.h" +#include "oo.h" +#include "vm.h" +#include "env.h" +#include "type.h" +#include "nspc.h" +#include "value.h" +#include "instr.h" +#include "emit.h" + +ANEW Emitter new_emitter(void) { + Emitter emit = (Emitter)xcalloc(1, sizeof(struct Emitter_)); + vector_init(&emit->stack); + return emit; +} + +ANN void free_emitter(Emitter a) { + vector_release(&a->stack); + xfree(a); +} + +__attribute__((returns_nonnull)) +ANN2(1) Instr emit_add_instr(const Emitter emit, const f_instr f) { + const Instr instr = mp_alloc(Instr); + instr->execute = f; + vector_add(&emit->code->instr, (vtype)instr); + return instr; +}