syntax: fix 'break' with value in default closures
[nit.git] / src / syntax / icode_generation.nit
index f545cb5..08466d9 100644 (file)
@@ -58,7 +58,9 @@ special ICodeBuilder
                if _variables.has_key(v) then
                        return _variables[v]
                else
-                       var reg = new_register(v.stype.as(not null))
+                       var t = v.stype
+                       if t == null then t = visitor.type_object.as_nullable
+                       var reg = new_register(t)
                        _variables[v] = reg
                        return reg
                end
@@ -345,6 +347,8 @@ redef class AClosureDecl
                v.seq = iclos.body
                escapable.continue_seq = iclos.body
                escapable.continue_value = iclos.result
+               escapable.break_seq = v.return_seq
+               escapable.break_value = v.return_value
                n_signature.fill_iroutine_parameters(v, variable.closure.signature, iclos.params, null)
 
                if n_expr != null then
@@ -825,6 +829,7 @@ redef class AAssertExpr
                v.stmt(iif)
                var seq_old = v.seq
                v.seq = iif.else_seq
+               v.generate_stmt(n_else)
                var id = n_id
                if id == null then
                        v.add_abort("Assert failed")