]> Nishi Git Mirror - gwion.git/commitdiff
:art: Improve op_emit api
authorJérémie Astor <fennecdjay@gmail.com>
Tue, 15 Dec 2020 02:58:10 +0000 (03:58 +0100)
committerJérémie Astor <fennecdjay@gmail.com>
Tue, 15 Dec 2020 02:58:10 +0000 (03:58 +0100)
include/emit.h
include/import/checker.h
src/emit/emit.c
src/lib/lib_func.c
src/lib/opfunc.c

index 272ac97e03fb16a218d28a11877faa7f5d5502e6..1bd8373fc41bd8680cf85f2ed5b71936a291f455 100644 (file)
@@ -42,11 +42,10 @@ ANN void emit_class_finish(const Emitter, const Nspc);
 ANN2(1,2) m_bool emit_instantiate_object(const Emitter, const Type, const Array_Sub, const m_bool);
 ANN m_uint emit_code_offset(const Emitter emit);
 ANN m_uint emit_local(const Emitter emit, const Type t);
-ANN Instr emit_exp_spork(const Emitter, const Exp_Unary*);
+ANN m_bool emit_exp_spork(const Emitter, const Exp_Unary*);
 ANN m_bool emit_exp(const Emitter, const Exp);
-ANN static inline Instr emit_gc(const Emitter emit, const m_int offset) {
+ANN static inline void emit_gc(const Emitter emit, const m_int offset) {
   const Instr gc = emit_add_instr(emit, GcAdd);
   gc->m_val = offset;
-  return gc;
 }
 #endif
index 210fc79a6c23c963e936f432f1f9f6c134a7ee40..38564c09d5eb99f922473fb7edcd2e88f9e8ce5c 100644 (file)
@@ -39,7 +39,7 @@ typedef struct OperCK { // name_checker ?
   m_str ret;
   Symbol sym;
   Type   (*ck)(Env, void*, m_bool*); // oper
-  Instr  (*em)(Emitter, void*); // oper
+  m_bool (*em)(Emitter, void*); // oper
   m_str lhs;// oper
   m_str rhs;// oper
 } OperCK;
index 193f71dc0743380c1a3140eb2fa3868ae1034761..577fef5921dca73b0ed410f6df8bd3fc327b2602 100644 (file)
@@ -1312,21 +1312,20 @@ ANN void spork_func(const Emitter emit, const struct Sporker *sp) {
   (void)emit_add_instr(emit, SporkEnd);
 }
 
-ANN static Instr spork_ini(const Emitter emit, const struct Sporker *sp) {
+ANN static void spork_ini(const Emitter emit, const struct Sporker *sp) {
   if(sp->is_spork) {
     const Instr instr = emit_add_instr(emit, SporkIni);
     instr->m_val = (m_uint)sp->vm_code;
     instr->m_val2 = sp->is_spork;
-    return instr;
+    return;
   }
   regpushi(emit, (m_uint)sp->type);
   const Instr instr = emit_add_instr(emit, ForkIni);
   instr->m_val = (m_uint)sp->vm_code;
   instr->m_val2 = sp->type->size;
-  return instr;
 }
 
-ANN Instr emit_exp_spork(const Emitter emit, const Exp_Unary* unary) {
+ANN m_bool emit_exp_spork(const Emitter emit, const Exp_Unary* unary) {
   struct Sporker sporker = {
     .exp=unary->exp,
     .code=unary->code,
@@ -1334,10 +1333,10 @@ ANN Instr emit_exp_spork(const Emitter emit, const Exp_Unary* unary) {
     .is_spork=(unary->op == insert_symbol("spork")),
     .emit_var=exp_getvar(exp_self(unary))
   };
-  CHECK_OO((sporker.vm_code = spork_prepare(emit, &sporker)))
-  const Instr ini = spork_ini(emit, &sporker);
+  CHECK_OB((sporker.vm_code = spork_prepare(emit, &sporker)))
+  spork_ini(emit, &sporker);
   (unary->code ? spork_code : spork_func)(emit, &sporker);
-  return ini;
+  return GW_OK;
 }
 
 ANN static m_bool emit_exp_unary(const Emitter emit, const Exp_Unary* unary) {
index 7d8da5adde16cf479a7d52a051840bf123fef8c9..0185f6d68b4871b5a35d8d9f8c28feb44eaf060d 100644 (file)
@@ -33,7 +33,7 @@ static OP_EMIT(opem_func_assign) {
   Exp_Binary* bin = (Exp_Binary*)data;
   if(bin->rhs->info->type->info->func->def->base->tmpl)
     fptr_instr(emit, bin->lhs->info->type->info->func, 2);
-  const Instr instr = emit_add_instr(emit, int_r_assign);
+  (void)emit_add_instr(emit, int_r_assign);
   if(!is_fptr(emit->gwion, bin->lhs->info->type) && vflag(bin->rhs->info->type->info->func->value_ref, vflag_member)) {
     const Instr pop = emit_add_instr(emit, RegPop);
     pop->m_val = SZ_INT;
index 51ce17a444fa48abaef5c5b23e4dba5e29c95f39..dfe55a37ae3f999acdb1ff6997089aeb9ab503c1 100644 (file)
@@ -97,7 +97,7 @@ OP_CHECK(opck_new) {
 
 OP_EMIT(opem_new) {
   const Exp_Unary* unary = (Exp_Unary*)data;
-  CHECK_BO(emit_instantiate_object(emit, exp_self(unary)->info->type,
+  CHECK_BB(emit_instantiate_object(emit, exp_self(unary)->info->type,
     unary->td->array, 0))
   emit_gc(emit, -SZ_INT);
   return GW_OK;