]> Nishi Git Mirror - gwion.git/commitdiff
:art: Set Class Flag sooner
authorfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 11 Jun 2019 20:44:51 +0000 (22:44 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 11 Jun 2019 20:44:51 +0000 (22:44 +0200)
src/emit/emit.c
src/parse/check.c
src/parse/scan0.c
src/parse/scan1.c
src/parse/scan2.c

index 0497ef8f7383c185a340eef8b0b089ec9cf6dc85..7b29d53c5ac0d2b49bf890c7155a82b700232c2a 100644 (file)
@@ -1773,7 +1773,7 @@ ANN inline void emit_class_finish(const Emitter emit, const Nspc nspc) {
 
 ANN static m_bool emit_parent(const Emitter emit, const Class_Def cdef) {
   const Type parent = cdef->base.type->e->parent;
-  return scanx_parent(parent, emit_parent_inner, emit);
+  return !GET_FLAG(parent, emit) ? GW_OK : scanx_parent(parent, emit_parent_inner, emit);
 }
 
 ANN static inline m_bool emit_cdef(const Emitter emit, const Class_Def cdef) {
@@ -1782,10 +1782,11 @@ ANN static inline m_bool emit_cdef(const Emitter emit, const Class_Def cdef) {
 }
 
 ANN static m_bool emit_class_def(const Emitter emit, const Class_Def cdef) {
-  const Type type = cdef->base.type;
-  const Nspc nspc = type->nspc;
   if(tmpl_base(cdef->base.tmpl))
     return GW_OK;
+  const Type type = cdef->base.type;
+  SET_FLAG(type, emit);
+  const Nspc nspc = type->nspc;
   if(cdef->base.ext && cdef->base.ext->types)
     CHECK_BB(scanx_ext(emit->env, cdef, emit_parent, emit))
   nspc_allocdata(emit->gwion->mp, nspc);
index 511e6f6d0318e17c75543bbbd9a5e57aa0a72d44..3e0cfa2aa6130de12d1384e8e4535021edcb853e 100644 (file)
@@ -103,7 +103,8 @@ ANN Type check_exp_decl(const Env env, const Exp_Decl* decl) {
   if(!decl->type) // TODO: remove when scan passes are complete
       ERR_O(td_pos(decl->td), "can't infer type.");
   if(GET_FLAG(decl->type , template)) {
-    if(!GET_FLAG(decl->type, check))
+         /*if(!GET_FLAG(decl->type, checked))*/
+    if(!GET_FLAG(decl->type, scan2))
       CHECK_BO(traverse_cdef(env, decl->type->e->def))
   }
   const m_bool global = GET_FLAG(decl->td, global);
@@ -1200,6 +1201,7 @@ ANN m_bool check_class_def(const Env env, const Class_Def cdef) {
   if(tmpl_base(cdef->base.tmpl))
     return GW_OK;
   const Type type = cdef->base.type;
+  SET_FLAG(type, check);
   if(type->e->parent == t_undefined) {
     type->e->parent = check_td(env, cdef->base.ext);
     return traverse_cdef(env, cdef);
@@ -1211,7 +1213,7 @@ ANN m_bool check_class_def(const Env env, const Class_Def cdef) {
   inherit(type);
   if(cdef->body)
     CHECK_BB(env_body(env, cdef, check_section))
-  SET_FLAG(type, checked | ae_flag_check);
+  SET_FLAG(type, checked);
   return GW_OK;
 }
 
index eb89ff2dcdcc2cbe8b70de2d924c4ae0f5539a39..1684e2d27cec78762381cace5825daaae4ee53a7 100644 (file)
@@ -244,6 +244,7 @@ ANN static m_bool scan0_section(const Env env, const Section* section) {
 ANN m_bool scan0_class_def(const Env env, const Class_Def cdef) {
   CHECK_BB(scan0_class_def_pre(env, cdef))
   CHECK_OB((cdef->base.type = scan0_class_def_init(env, cdef)))
+  SET_FLAG(cdef->base.type, scan0);
   if(cdef->body) {
     int call = cdef->base.tmpl && !cdef->base.tmpl->call;
     if(call)cdef->base.tmpl->call = (Type_List)1;
@@ -253,7 +254,6 @@ ANN m_bool scan0_class_def(const Env env, const Class_Def cdef) {
   (void)mk_class(env, cdef->base.type);
   if(GET_FLAG(cdef, global))
     env->curr = (Nspc)vector_pop(&env->scope->nspc_stack);
-  SET_FLAG(cdef->base.type, scan0);
   return GW_OK;
 }
 
index cbe60e52aef3d17b356d4029869f4495a8c7a5d9..7dbcd6d9fbe9f64bdd1145bc20734ba5d8fbb799 100644 (file)
@@ -353,11 +353,11 @@ ANN m_bool scan1_class_def(const Env env, const Class_Def cdef) {
     CHECK_BB(scan0_class_def(env, cdef))
   if(tmpl_base(cdef->base.tmpl))
     return GW_OK;
+  SET_FLAG(cdef->base.type, scan1);
   if(cdef->base.ext)
     CHECK_BB(env_ext(env, cdef, scan1_parent))
   if(cdef->body)
     CHECK_BB(env_body(env, cdef, scan1_section))
-  SET_FLAG(cdef->base.type, scan1);
   return GW_OK;
 }
 
index b5b6e8904601ab0fb6978e877ba22f0cbdf0aab3..8d51208fe9668792348fa72da4f6011c66efcfa2 100644 (file)
@@ -558,11 +558,11 @@ ANN static m_bool scan2_class_parent(const Env env, const Class_Def cdef) {
 ANN m_bool scan2_class_def(const Env env, const Class_Def cdef) {
   if(tmpl_base(cdef->base.tmpl))
     return GW_OK;
+  SET_FLAG(cdef->base.type, scan2);
   if(cdef->base.ext)
     CHECK_BB(env_ext(env, cdef, scan2_class_parent))
   if(cdef->body)
     CHECK_BB(env_body(env, cdef, scan2_section))
-  SET_FLAG(cdef->base.type, scan2);
   return GW_OK;
 }