]> Nishi Git Mirror - gwion.git/commitdiff
:art: Add ensure emit
authorJérémie Astor <astor.jeremie@wanadoo.fr>
Sun, 15 Dec 2019 10:09:14 +0000 (11:09 +0100)
committerJérémie Astor <astor.jeremie@wanadoo.fr>
Sun, 15 Dec 2019 10:12:41 +0000 (11:12 +0100)
src/emit/emit.c

index f3570e26b899f344c4269602780a436f92b45cee..169484f84ebe5406b23c2699567ff59cc2dbefee 100644 (file)
@@ -1796,7 +1796,15 @@ ANN static inline m_bool emit_member(const Emitter emit, const Value v, const ui
   return GW_OK;
 }
 
+ANN static m_bool ensure_emit(const Emitter emit, const Type type) {
+  const Type t = actual_type(emit->gwion, type) ?: type;
+  if(!GET_FLAG(t, emit) && t->e->def)
+    CHECK_BB(emit_class_def(emit, t->e->def))
+  return GW_OK;
+}
+
 ANN static m_bool emit_exp_dot(const Emitter emit, const Exp_Dot* member) {
+  CHECK_BB(ensure_emit(emit, member->t_base))
   if(is_special(emit, member->t_base) > 0)
     return emit_exp_dot_special(emit, member);
   const Value value = find_value(actual_type(emit->gwion, member->t_base), member->xid);