]> Nishi Git Mirror - gwion.git/commitdiff
:bug: Improve constructors
authorJérémie Astor <fennecdjay@gmail.com>
Thu, 16 Dec 2021 14:26:08 +0000 (15:26 +0100)
committerJérémie Astor <fennecdjay@gmail.com>
Thu, 16 Dec 2021 14:26:08 +0000 (15:26 +0100)
src/emit/emit.c
src/parse/scan0.c
src/parse/scan2.c

index c9f1451b82ecdb693818e4cf0bfef9a013eebf49..ea2ea83191b34333816b8334cdd861365700d0e5 100644 (file)
@@ -1341,15 +1341,12 @@ ANN static m_bool emit_exp_call(const Emitter emit, const Exp_Call *exp_call) {
     const Instr instr = emit_add_instr(emit, Reg2RegAddr);
     instr->m_val      = -SZ_INT;
   } else {
-    if(isa(t, emit->gwion->type[et_object]) > 0) {
-//emit_object_addref(emit, -SZ_INT, 0);
-      emit_local_exp(emit, e);
-//       emit_localx(emit, t);
-    }
     if (!is_func(emit->gwion, exp_call->func->type) &&
              tflag(e->type, tflag_struct))
     regpop(emit, SZ_INT);
   }
+  if(isa(e->type, emit->gwion->type[et_object]) > 0)
+    emit_local_exp(emit, e);
   return GW_OK;
 }
 
@@ -2096,10 +2093,6 @@ ANN static m_bool emit_stmt_return(const Emitter emit, const Stmt_Exp stmt) {
         return optimize_tail_call(emit, &stmt->val->d.exp_call);
     }
     CHECK_BB(emit_exp_pop_next(emit, stmt->val));
-
-   if(isa(stmt->val->type, emit->gwion->type[et_object]) > 0 &&
-       (!stmt->val->data && stmt->val->acquire))
-      emit_object_addref(emit, -SZ_INT, exp_getvar(stmt->val));
   }
   vector_add(&emit->code->stack_return, (vtype)emit_add_instr(emit, Goto));
   return GW_OK;
index b1bb1e1d5244c8c50486678c96f81700ecf7bb46..06e7aa2d0eff2abb08fa0fcac3a16294ae88a0b6 100644 (file)
@@ -516,10 +516,12 @@ ANN m_bool scan0_class_def(const Env env, const Class_Def c) {
   if (GET_FLAG(cdef, global))
     env->curr = (Nspc)vector_pop(&env->scope->nspc_stack);
   if (cpy && cdef->base.type) {
-    c->base.type             = cdef->base.type;
+    c->base.type = cdef->base.type;
     c->base.type->info->cdef = cdef;
     set_tflag(c->base.type, tflag_cdef);
   }
+//  if (GET_FLAG(cdef, global))
+//    type_addref(c->base.type);
   return ret;
 }
 
index 357e4168ea4bc650a635c17225e9a7dfcc035d58..a8390b00c646d25e0302f5188694d41688b5d930 100644 (file)
@@ -551,7 +551,8 @@ ANN m_bool _scan2_func_def(const Env env, const Func_Def fdef) {
     if(!env->class_def)
       ERR_B(fdef->base->pos, _("{G+}new{0} operator must be set inside {C+}class{0}"));
     if(!fdef->base->ret_type)
-      fdef->base->ret_type = env->class_def;
+//      fdef->base->ret_type = env->class_def;
+      fdef->base->ret_type = env->gwion->type[et_auto];
   }
   if (GET_FLAG(fdef->base, global) && !env->class_def) env->context->global = 1;
   const Func_Def f = !is_cpy(fdef) ? fdef : scan2_cpy_fdef(env, fdef);