import parser
import toolcontext
+import phase
+
+import modelbuilder #FIXME useless
+
+redef class ToolContext
+ var scope_phase: Phase = new ScopePhase(self, null)
+end
+
+private class ScopePhase
+ super Phase
+ redef fun process_npropdef(npropdef) do npropdef.do_scope(toolcontext)
+end
+
# A local variable (including parameters, automatic variables and self)
class 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]
variables.add(va)
end
- var escapemark = v.make_escape_mark(n_label, true)
- self.escapemark = escapemark
+ self.escapemark = self.parent.as(ASendExpr).escapemark
v.enter_visit_block(self.n_expr, escapemark)
v.scopes.shift