]> Nishi Git Mirror - gwion.git/commitdiff
:bug: Fix for builtin structs
authorJérémie Astor <astor.jeremie@wanadoo.fr>
Tue, 5 May 2020 12:54:24 +0000 (14:54 +0200)
committerJérémie Astor <astor.jeremie@wanadoo.fr>
Tue, 5 May 2020 12:55:13 +0000 (14:55 +0200)
src/emit/emit.c
src/lib/object_op.c

index 93b2745266ee8e3e2bac392fae27b2e84bd8bb6c..ba7c7739e67f5075f638a72e0f58c3d48a05a177 100644 (file)
@@ -485,7 +485,7 @@ ANN static m_bool emit_prim_str(const Emitter emit, const m_str *str) {
 #define emit_prim_nil     (void*)dummy_func
 
 ANN static inline void struct_interp(const Emitter emit, const Exp e) {
-  if(GET_FLAG(e->info->type, struct)) {
+  if(GET_FLAG(e->info->type, struct) && !GET_FLAG(e->info->type, builtin)) {
     exp_setvar(e, 1);
     regpush(emit, e->info->type->size - SZ_INT);
   }
@@ -757,7 +757,8 @@ 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;
     instr->m_val2 = -SZ_INT;
-  }
+  } else if(!exp_call->m_func && GET_FLAG(e->info->type, struct))
+    regpop(emit, SZ_INT);
   return GW_OK;
 }
 
index 90ab1d1e93422fc6259d4bc051642164e9991329..be5cd5612817fd6461c8d30d284b57856eed1466 100644 (file)
@@ -139,7 +139,7 @@ ANN static Type scan_class(const Env env, const Type t, const Type_Decl* td);
 
 OP_CHECK(opck_object_scan) {
   struct TemplateScan *ts = (struct TemplateScan*)data;
-  if(ts->td->types)
+  if(ts->td->types && GET_FLAG(ts->t, template) && ts->t->e->def)
     return scan_class(env, ts->t, ts->td);
   if(!GET_FLAG(ts->t, template) || GET_FLAG(ts->t, unary))
     return ts->t;