]> Nishi Git Mirror - gwion.git/commitdiff
:bug: Fix unemitted member call (and add tests)
authorJérémie Astor <astor.jeremie@wanadoo.fr>
Sun, 14 Jun 2020 06:57:53 +0000 (08:57 +0200)
committerJérémie Astor <astor.jeremie@wanadoo.fr>
Sun, 14 Jun 2020 06:57:53 +0000 (08:57 +0200)
examples/member_func.gw
src/emit/emit.c
tests/struct/member_func.gw

index c60623a7e24b7fb0127a3fd85f0b9b40fe6aba39..06ab956c3005b8fe6bf70d6a3f40cec5fc9711f7 100644 (file)
@@ -1,5 +1,6 @@
 class C
 {
+  testf();
   fun float testf() {
     return 1.1;
   }
index 132a5046ce0e0476738dd03fe5d106b2288020aa..8ee025466e8ab71b41fd189871e6be506e6e5bc4 100644 (file)
@@ -1088,16 +1088,16 @@ ANN Instr emit_exp_call1(const Emitter emit, const Func f) {
     instr->m_val2 = val2;
   } else if(f != emit->env->func && !f->code && !is_fptr(emit->gwion, f->value_ref->type)){
     // not yet emitted static func
-/*
     if(f->value_ref->from->owner_class) {
       const Instr instr = vector_size(&emit->code->instr) ?
-        (Instr)vector_back(&emit->code->instr) : emit_add_instr(emit, PushStaticCode);
-      assert(instr->opcode == ePushStaticCode);
-      instr->opcode = eRegPushImm;
-    } else*/
-    const Instr instr = emit_add_instr(emit, SetFunc);
-    instr->m_val = (m_uint)f;
-//      emit_mod_func(emit, f);
+        (Instr)vector_back(&emit->code->instr) : emit_add_instr(emit, SetFunc);
+      instr->opcode = eOP_MAX;
+      instr->execute = SetFunc;
+      instr->m_val = (m_uint)f;
+    } else {
+      const Instr instr = emit_add_instr(emit, SetFunc);
+      instr->m_val = (m_uint)f;
+    }
   }
   const m_uint offset = emit_code_offset(emit);
   regseti(emit, offset);
index 80de97ed1e98b456fa4a083ca15a9f2addcad8d6..60ac1a9822d1df3f85c94e1348f050e72df60910 100644 (file)
@@ -1,4 +1,5 @@
 class C {
+  1 => test;
   fun int test(int i) {
    13 => int j;
    return j;