]> Nishi Git Mirror - gwion.git/commitdiff
:art: Simplify envset
authorJérémie Astor <astor.jeremie@wanadoo.fr>
Thu, 7 May 2020 19:16:23 +0000 (21:16 +0200)
committerJérémie Astor <astor.jeremie@wanadoo.fr>
Thu, 7 May 2020 19:16:23 +0000 (21:16 +0200)
src/emit/emit.c
src/lib/func.c
src/parse/check.c

index 94668df255a33681140b1bbe7e1bcfc16b50f60f..579445d69b08032b000f38a36b3f3d2cb986820e 100644 (file)
@@ -848,7 +848,7 @@ ANN m_bool traverse_dot_tmpl(const Emitter emit, const struct dottmpl_ *dt) {
     envset_push(&es, dt->owner_class);
   (void)emit_push(emit, dt->owner_class, dt->owner);
   const m_bool ret = traverse_emit_func_def(emit, dt->def);
-  if(dt->owner_class && dt->owner_class->e->owner_class)
+  if(es.run)
     envset_pop(&es, dt->owner_class->e->owner_class);
   emit_pop(emit, scope);
   return ret;
@@ -889,7 +889,7 @@ ANN static m_bool emit_template_code(const Emitter emit, const Func f) {
     envset_push(&es, v->from->owner_class);
   (void)emit_push(emit, v->from->owner_class, v->from->owner);
   const m_bool ret = emit_func_def(emit, f->def);
-  if(v->from->owner_class && v->from->owner_class->e->owner_class)
+  if(es.run)
     envset_pop(&es, v->from->owner_class->e->owner_class);
   emit_pop(emit, scope);
   return ret > 0 ? push_func_code(emit, f) : GW_ERROR;
@@ -1218,8 +1218,8 @@ ANN static m_bool emit_exp_lambda(const Emitter emit, const Exp_Lambda * lambda)
   if(lambda->owner)
     envset_push(&es, lambda->owner);
   const m_bool ret = emit_lambda(emit, lambda);
-  if(lambda->owner)
-    envset_push(&es, lambda->owner);
+  if(es.run)
+    envset_pop(&es, lambda->owner);
   return ret;
 }
 
index 23df474ae6715e77652ff5e95146d2d25e9d5c16..c977bf6ab5cf336943e3ef0242bf74c5bd321508 100644 (file)
@@ -172,7 +172,7 @@ ANN2(1,3,4) m_bool check_lambda(const Env env, const Type owner,
   if((l->owner = owner))
     envset_push(&es, owner);
   const m_bool ret = _check_lambda(env, l, def);
-  if(owner && es.run)
+  if(es.run)
     envset_pop(&es, owner);
   if(ret < 0)
     return GW_ERROR;
index 6c8cefae021cb513cf26479d9af795b9e67f59b7..3d9329f00e418d2db6613106d6c1b875d29c3224 100644 (file)
@@ -556,7 +556,7 @@ ANN static Func _find_template_match(const Env env, const Value v, const Exp_Cal
     }
   }
   free_mstr(env->gwion->mp, tmpl_name);
-  if(v->from->owner_class && v->from->owner_class->e->owner_class && es.run)
+  if(es.run)
     envset_pop(&es, v->from->owner_class->e->owner_class);
   env_pop(env, scope);
   env->func = former;
@@ -663,8 +663,8 @@ ANN static Type check_predefined(const Env env, Exp_Call *exp, const Value v, co
       envset_push(&es, v->from->owner_class);
     (void)env_push(env, v->from->owner_class, v->from->owner);
     const m_bool ret = traverse_func_def(env, func->def);
-    if(v->from->owner_class && v->from->owner_class->e->owner_class && es.run)
-      envset_push(&es, v->from->owner_class);
+    if(es.run)
+      envset_pop(&es, v->from->owner_class);
     env_pop(env, scope);
     CHECK_BO(ret)
   }