+ redef fun is_vararg do return n_dotdotdot != null
+end
+
+redef class AClosureDecl
+ redef fun variable: ClosureVariable do return _variable.as(not null)
+ var _variable: nullable ClosureVariable
+
+ redef fun accept_property_verifier(v)
+ do
+ var old_signature_builder = v.signature_builder
+ v.signature_builder = new SignatureBuilder
+ super
+ var sig = v.signature_builder.signature
+ if sig == null then
+ sig = new MMSignature(new Array[MMType], null, v.local_class.get_type)
+ end
+ if sig.return_type != null and n_kwbreak != null then
+ v.error(self, "Syntax Error: A break block cannot have a return value.")
+ end
+
+ # Add the finalizer to the closure signature
+ var finalize_sig = new MMSignature(new Array[MMType], null, v.module.type_any) # FIXME should be no receiver
+ var finalizer_clos = new MMClosure(finalize_sig, false, true)
+ sig.closures.add(finalizer_clos)
+
+ var clos = new MMClosure(sig, n_kwbreak != null, n_expr != null)
+ v.signature_builder = old_signature_builder
+ old_signature_builder.closure_decls.add(self)
+ _variable = new ClosureVariable(n_id.to_symbol, self, clos)
+ end