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
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)
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
#alt3# abort
#alt4# continue
#alt5# continue 20
+ #alt6# break
+ #alt7# break 1
20.output
end
do
#alt3# abort
#alt4# continue
#alt5# continue 20
+ #alt7# break
+ #alt8# break 1
(i * 10).output
end
do
#alt2# return 1
#alt3# abort
#alt4# continue
+ #alt5# break
+ #alt6# break 1
continue 20 #!alt5#
end
do
#alt2# return -1
#alt3# abort
#alt4# continue
+ #alt6# break
+ #alt7# break 1
continue (i * 10) #!alt5#
end
do
Aborted (alt/base_closure_default1_alt3.nit:24)
,---- Stack trace -- - - -
| base_closure_default1_alt3::A::foo (alt/base_closure_default1_alt3.nit:20)
-| base_closure_default1_alt3::Sys::(kernel::Sys::main) (alt/base_closure_default1_alt3.nit:36)
+| base_closure_default1_alt3::Sys::(kernel::Sys::main) (alt/base_closure_default1_alt3.nit:38)
`------------------- - - -
--- /dev/null
+0
+1
+2
+3
+0
+1
+0
--- /dev/null
+alt/base_closure_default1_alt7.nit:28,5--11: Error: break without value required in this block.
Aborted (alt/base_closure_default2_alt3.nit:24)
,---- Stack trace -- - - -
| base_closure_default2_alt3::A::foo (alt/base_closure_default2_alt3.nit:20)
-| base_closure_default2_alt3::Sys::(kernel::Sys::main) (alt/base_closure_default2_alt3.nit:37)
+| base_closure_default2_alt3::Sys::(kernel::Sys::main) (alt/base_closure_default2_alt3.nit:39)
`------------------- - - -
-alt/base_closure_default2_alt6.nit:32,3: Error: Method or variable 'i' unknown in A.
+alt/base_closure_default2_alt6.nit:34,3: Error: Method or variable 'i' unknown in A.
--- /dev/null
+0
+1
+2
+3
+0
+1
+0
--- /dev/null
+alt/base_closure_default2_alt8.nit:28,5--11: Error: break without value required in this block.
Aborted (alt/base_closure_default3_alt3.nit:24)
,---- Stack trace -- - - -
| base_closure_default3_alt3::A::foo (alt/base_closure_default3_alt3.nit:20)
-| base_closure_default3_alt3::Sys::(kernel::Sys::main) (alt/base_closure_default3_alt3.nit:35)
+| base_closure_default3_alt3::Sys::(kernel::Sys::main) (alt/base_closure_default3_alt3.nit:37)
`------------------- - - -
-alt/base_closure_default3_alt5.nit:21,3--11: Control error: Reached end of block (a 'continue' with a value was expected).
+0
+1
+2
+3
+0
+1
+0
--- /dev/null
+alt/base_closure_default3_alt6.nit:27,5--11: Error: break without value required in this block.
Aborted (alt/base_closure_default4_alt3.nit:24)
,---- Stack trace -- - - -
| base_closure_default4_alt3::A::foo (alt/base_closure_default4_alt3.nit:20)
-| base_closure_default4_alt3::Sys::(kernel::Sys::main) (alt/base_closure_default4_alt3.nit:35)
+| base_closure_default4_alt3::Sys::(kernel::Sys::main) (alt/base_closure_default4_alt3.nit:37)
`------------------- - - -
--- /dev/null
+0
+1
+2
+3
+0
+1
+0
--- /dev/null
+alt/base_closure_default4_alt7.nit:27,5--11: Error: break without value required in this block.