-
-redef class AClosureCallExpr
- # the associate closure variable
- var variable: nullable ClosureVariable
-end
-
-redef class ASendExpr
- # The escape mark used with the closures if any
- var escapemark: nullable EscapeMark
-
- redef fun accept_scope_visitor(v)
- do
- if self.n_closure_defs.length > 0 then
- var escapemark = v.make_escape_mark(self.n_closure_defs.last.n_label, true)
- self.escapemark = escapemark
- end
- super
- end
-end
-
-redef class AClosureDef
- # The automatic variables in order
- var variables: nullable Array[Variable]
-
- # The escape mark used with the closure
- var escapemark: nullable EscapeMark
-
- redef fun accept_scope_visitor(v)
- do
- v.scopes.unshift(new Scope)
-
- var variables = new Array[Variable]
- self.variables = variables
-
- for nid in self.n_ids do
- var va = new Variable(nid.text)
- v.register_variable(nid, va)
- variables.add(va)
- end
-
- self.escapemark = self.parent.as(ASendExpr).escapemark
- v.enter_visit_block(self.n_expr, escapemark)
-
- v.scopes.shift
- end
-end