]> Nishi Git Mirror - gwion.git/commitdiff
:bug: Fix auto ptr stmt
authorfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 5 Nov 2019 23:24:36 +0000 (00:24 +0100)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 5 Nov 2019 23:24:36 +0000 (00:24 +0100)
src/import/cdef.c
src/lib/ptr.c
src/parse/check.c

index d277d095189cb5c9f7d2c776880dd7c4932dca22..c2d235ae150657268c4211d07ea723b81dfcd739 100644 (file)
@@ -52,8 +52,11 @@ ANN2(1) void gwi_class_xtor(const Gwi gwi, const f_xtor ctor, const f_xtor dtor)
     mk_xtor(gwi->gwion->mp, t, (m_uint)dtor, ae_flag_dtor);
 }
 
-ANN static Type type_finish(const Gwi gwi, const Type t) {
+ANN static inline void gwi_type_flag(const Type t) {
   SET_FLAG(t, scan1 | ae_flag_scan2 | ae_flag_check | ae_flag_emit);
+}
+
+ANN static Type type_finish(const Gwi gwi, const Type t) {
   gwi_add_type(gwi, t);
   import_class_ini(gwi->gwion->env, t);
   return t;
@@ -78,6 +81,8 @@ ANN2(1,2) Type gwi_class_ini(const Gwi gwi, const m_str name, const m_str parent
     SET_FLAG(t, typedef);
   if(ck.tmpl)
     SET_FLAG(t, template);
+  else
+    gwi_type_flag(t);
   return type_finish(gwi, t);
 }
 
@@ -85,6 +90,7 @@ ANN Type gwi_class_spe(const Gwi gwi, const m_str name, const m_uint size) {
   CHECK_OO(str2sym(gwi, name))
   const Type t = new_type(gwi->gwion->mp, ++gwi->gwion->env->scope->type_xid, name, NULL);
   t->size = size;
+  gwi_type_flag(t);
   return type_finish(gwi, t);
 }
 
index 42ad77e572ba1a7f6f2905800d278822a095dcc9..e26911c69caeaa774696529afd616ca838f5cd87 100644 (file)
@@ -113,7 +113,7 @@ GWION_IMPORT(ptr) {
   GWI_BB(gwi_item_ini(gwi, "@internal", "@val"))
   GWI_BB(gwi_item_end(gwi, 0, NULL))
   GWI_BB(gwi_class_end(gwi))
-  t_ptr->nspc->info->offset = SZ_INT; // TODO: should be an assert
+  t_ptr->nspc->info->offset = SZ_INT;
   GWI_BB(gwi_oper_ini(gwi, (m_str)OP_ANY_TYPE, "Ptr", NULL))
   GWI_BB(gwi_oper_add(gwi, opck_ptr_assign))
   GWI_BB(gwi_oper_emi(gwi, opem_ptr_assign))
index 7ba64b307c7d68864738504ac524f0aaf54bc084..ee100fc65d64d1834d18e84a3e64d1454a4d2169 100644 (file)
@@ -1039,7 +1039,8 @@ ANN static m_bool do_stmt_auto(const Env env, const Stmt_Auto stmt) {
       td.array = &array;
     }
     ptr = known_type(env, &td);
-    assert(GET_FLAG(ptr, checked));
+    if(!GET_FLAG(ptr, checked) && ptr->e->def)
+      CHECK_BB(traverse_cdef(env, ptr->e->def))
   }
   t = depth ? array_type(env, ptr, depth) : ptr;
   stmt->v = new_value(env->gwion->mp, t, s_name(stmt->sym));