syntax: fix 'break' with value in default closures
[nit.git] / src / syntax / typing.nit
index c3a5ffc..8bbcda8 100644 (file)
@@ -274,7 +274,10 @@ redef class AClosureDecl
                v.base_variable_ctx = v.variable_ctx
                v.variable_ctx = v.variable_ctx.sub(self)
 
-               var escapable = new EscapableClosure(self, variable.closure, null)
+               var blist: nullable Array[AExpr] = null
+               var t = v.local_property.signature.return_type
+               if t != null then blist = new Array[AExpr]
+               var escapable = new EscapableClosure(self, variable.closure, blist)
                _escapable = escapable
                v.escapable_ctx.push(escapable, null)
 
@@ -289,6 +292,9 @@ redef class AClosureDecl
                                end
                        end
                end
+               if blist != null then for x in blist do
+                       v.check_conform_expr(x, t)
+               end
 
                old_var_ctx.merge(v.variable_ctx)
                v.variable_ctx = old_var_ctx