]> Nishi Git Mirror - gwion.git/commitdiff
:art: Cpy_ast
authorfennecdjay <astor.jeremie@wanadoo.fr>
Thu, 10 Oct 2019 20:06:15 +0000 (22:06 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Thu, 10 Oct 2019 20:06:15 +0000 (22:06 +0200)
src/emit/emit.c
src/parse/check.c
src/parse/cpy_ast.c

index d67c655895d9cdd88b0fd9414accd036ac8ffac3..5709a02c22db3bfbb133c518c9de8df912b193b3 100644 (file)
@@ -1135,7 +1135,10 @@ ANN static m_bool emit_lambda(const Emitter emit, const Exp_Lambda * lambda) {
 }
 
 ANN static m_bool emit_exp_lambda(const Emitter emit, const Exp_Lambda * lambda) {
-  assert(lambda->def);
+  if(!lambda->def) {
+    regpushi(emit, SZ_INT);
+    return GW_OK;
+  }
   const m_uint scope = !lambda->owner ?
     emit->env->scope->depth : emit_push_type(emit, lambda->owner);
   const m_bool ret = emit_lambda(emit, lambda);
@@ -1452,7 +1455,7 @@ ANN static m_bool emit_case_head(const Emitter emit, const Exp base,
   e->next = next;
   CHECK_BB(ret)
   const Exp_Binary bin = { .lhs=base, .rhs=e, .op=op };
-  struct Exp_ ebin = { .d={.exp_binary=bin}, .nspc=emit->env->curr};
+  struct Exp_ ebin = { .d={.exp_binary=bin}, .nspc=e->nspc};
   struct Op_Import opi = { .op=op, .lhs=base->type, .rhs=e->type, .data=(uintptr_t)&ebin.d.exp_binary, .pos=e->pos };
   CHECK_BB(op_emit_bool(emit, &opi))
   const Instr instr = emit_add_instr(emit, BranchEqInt);
index 43b9716435e28bb0e7d36b5b48b2dbf8ab03a1a8..ffc0065b6fea3e27735c3cbaeae27809071d93f6 100644 (file)
@@ -1189,6 +1189,8 @@ ANN static m_bool match_case_exp(const Env env, Exp e) {
       struct Exp_ ebin = { .d={.exp_binary=bin}, .nspc=env->curr};
       struct Op_Import opi = { .op=op, .lhs=base->type, .rhs=e->type, .data=(uintptr_t)&ebin.d.exp_binary, .pos=e->pos };
       CHECK_OB(op_check(env, &opi))
+      e->nspc= ebin.nspc;
+      return GW_OK;
     }
   }
   if(e)
index 3a7937af4c7e4188b7baac92cb9befdba8e3bc72..13a28484fab10499ee13a44e54094e9b362bf328 100644 (file)
@@ -335,10 +335,11 @@ ANN static void cpy_stmt_match(MemPool p, Stmt_Match a, const Stmt_Match src) {
 }
 
 ANN static Enum_Def cpy_enum_def(MemPool p, const Enum_Def src) {
-  Enum_Def a = mp_calloc(p, Func_Base);
+  Enum_Def a = mp_calloc(p, Enum_Def);
   a->list = cpy_id_list(p, src->list);
   a->xid = src->xid;
   a->flag = src->flag;
+  vector_init(&a->values);
   return a;
 }