]> Nishi Git Mirror - gwion.git/commitdiff
:bug: Fix check_exp_if
authorJérémie Astor <fennecdjay@gmail.com>
Sat, 19 Jun 2021 19:24:21 +0000 (21:24 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Sat, 19 Jun 2021 19:24:21 +0000 (21:24 +0200)
src/parse/check.c

index e13cca4fd3ba7bf8e148d637a4d834b5971c94c0..ab179976577e05d1b8432a4fdae5feb0f2875f6a 100644 (file)
@@ -951,14 +951,17 @@ ANN static Type _flow(const Env env, const Exp e, const m_bool b) {
 }
 #define check_flow(emit, b) _flow(emit, b, 1)
 
-ANN static Type check_exp_if(const Env env, const Exp_If *exp_if) {
-  const Exp e = exp_if->if_exp ?: exp_if->cond;
+ANN static Type check_exp_if(const Env env, Exp_If *const exp_if) {
+  if(!exp_if->if_exp) {
+    const Exp e = exp_if->if_exp = cpy_exp(env->gwion->mp, exp_if->cond);
+    scan1_exp(env, e);
+    scan2_exp(env, e);
+  }
   DECL_OO(const Type, cond, = check_flow(env, exp_if->cond));
-  DECL_OO(const Type, if_exp,
-          = (exp_if->if_exp ? check_exp(env, exp_if->if_exp) : cond));
+  DECL_OO(const Type, if_exp, = check_exp(env, exp_if->if_exp));
   DECL_OO(const Type, else_exp, = check_exp(env, exp_if->else_exp));
 
-  const uint meta = exp_getmeta(e) || exp_getmeta(exp_if->else_exp);
+  const uint meta = exp_getmeta(exp_if->if_exp) || exp_getmeta(exp_if->else_exp);
   exp_setmeta(exp_self(exp_if), meta);
   const Type ret = find_common_anc(if_exp, else_exp);
   if (!ret)