]> Nishi Git Mirror - gwion.git/commitdiff
:art: Improve check_stmt_auto
authorfennecdjay <astor.jeremie@wanadoo.fr>
Fri, 4 Oct 2019 10:55:16 +0000 (12:55 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Fri, 4 Oct 2019 10:55:16 +0000 (12:55 +0200)
src/parse/check.c

index 03d6ac048c0d8c8b78ea2858810de99914945552..425aa35d4b2409a33b50f3dbe70037055950c107 100644 (file)
@@ -1004,10 +1004,10 @@ ANN static inline m_bool for_empty(const Env env, const Stmt_For stmt) {
 
 ANN static m_bool do_stmt_auto(const Env env, const Stmt_Auto stmt) {
   DECL_OB(Type, t, = check_exp(env, stmt->exp))
+  while(GET_FLAG(t, typedef))
+    t = t->e->parent;
   Type ptr = array_base(t);
   const m_uint depth = t->array_depth - 1;
-  if(GET_FLAG(t, typedef))
-    t = t->e->parent;
   if(!ptr || isa(t, env->gwion->type[et_array]) < 0)
     ERR_B(stmt_self(stmt)->pos, _("type '%s' is not array.\n"
           " This is not allowed in auto loop"), stmt->exp->type->name)
@@ -1033,8 +1033,9 @@ ANN static m_bool do_stmt_auto(const Env env, const Stmt_Auto stmt) {
       td.array = &array;
     }
     ptr = known_type(env, &td);
+    assert(ptr);
     if(!GET_FLAG(ptr, checked))
-      check_class_def(env, ptr->e->def);
+      CHECK_BB(check_class_def(env, ptr->e->def))
 //      traverse_class_def(env, ptr->e->def);
   }
   t = depth ? array_type(env, ptr, depth) : ptr;