nitc :: ANode :: accept_flow_visitor
private fun accept_flow_visitor(v: FlowVisitor)
do
self.visit_all(v)
end
src/semantize/flow.nit:250,2--253,4
redef fun accept_flow_visitor(v)
do
self.before_flow_context = v.current_flow_context
super
self.after_flow_context = v.current_flow_context
end
src/semantize/flow.nit:271,2--276,4
redef fun accept_flow_visitor(v)
do
for e in n_expr do
if not v.current_flow_context.is_unreachable then
v.enter_visit(e)
else if not v.current_flow_context.is_already_unreachable then
v.current_flow_context.is_already_unreachable = true
v.toolcontext.error(e.hot_location, "Error: unreachable statement.")
end
end
end
src/semantize/flow.nit:301,2--311,4
redef fun accept_flow_visitor(v)
do
super
v.make_unreachable_flow
end
src/semantize/flow.nit:338,2--342,4
redef fun accept_flow_visitor(v)
do
var after_expr = v.visit_expr(self.n_expr)
v.current_flow_context = after_expr.when_true
v.enter_visit(self.n_then)
var after_then = v.current_flow_context
v.current_flow_context = after_expr.when_false
v.enter_visit(self.n_else)
var after_else = v.current_flow_context
v.make_merge_flow(after_then, after_else)
end
src/semantize/flow.nit:368,2--381,4
redef fun accept_flow_visitor(v)
do
var after_expr = v.visit_expr(self.n_expr)
v.current_flow_context = after_expr.when_true
v.enter_visit(self.n_then)
var after_then = v.current_flow_context
v.current_flow_context = after_expr.when_false
v.enter_visit(self.n_else)
var after_else = v.current_flow_context
v.make_merge_flow(after_then, after_else)
end
src/semantize/flow.nit:385,2--398,4
redef fun accept_flow_visitor(v)
do
var after_expr = v.visit_expr(self.n_expr)
v.current_flow_context = after_expr.when_false
v.enter_visit(n_else)
# the after context of n_else is a dead end, so we do not care
v.current_flow_context = after_expr.when_true
end
src/semantize/flow.nit:467,2--476,4
redef fun accept_flow_visitor(v)
do
var after_expr = v.visit_expr(self.n_expr)
v.current_flow_context = after_expr
end
src/semantize/flow.nit:566,2--570,4
redef fun accept_flow_visitor(v)
do
var after_expr = v.visit_expr(self.n_expr)
v.current_flow_context = after_expr
end
src/semantize/flow.nit:574,2--578,4
redef fun accept_flow_visitor(v)
do
super
self.after_flow_context = v.make_sub_flow
end
src/semantize/flow.nit:293,2--297,4
redef fun accept_flow_visitor(v)
do
super
v.make_unreachable_flow
end
src/semantize/flow.nit:330,2--334,4
redef fun accept_flow_visitor(v)
do
super
v.merge_breaks(self.break_mark)
end
src/semantize/flow.nit:459,2--463,4
redef fun accept_flow_visitor(v)
do
var after_expr = v.visit_expr(self.n_expr)
v.make_true_false_flow(after_expr.when_false, after_expr.when_true)
end
src/semantize/flow.nit:525,2--530,4
redef fun accept_flow_visitor(v)
do
super
v.make_sub_true_false_flow
end
src/semantize/flow.nit:558,2--562,4
redef fun accept_flow_visitor(v)
do
super
self.after_flow_context = v.make_sub_flow
end
src/semantize/flow.nit:285,2--289,4
redef fun accept_flow_visitor(v)
do
super
end
src/semantize/flow.nit:534,2--537,4
redef fun accept_flow_visitor(v)
do
super
v.make_unreachable_flow
end
src/semantize/flow.nit:315,2--319,4
redef fun accept_flow_visitor(v)
do
# FlowContext before the block
var before_block = v.make_sub_flow
# Visit the bloc, then merge the breaks
v.enter_visit(self.n_block)
v.merge_breaks(self.break_mark)
var after_block = v.current_flow_context
# Visit the catch if there is one
if self.n_catch != null then
var before_catch = v.make_sub_flow
v.make_merge_flow(before_block, after_block)
v.enter_visit(self.n_catch)
var after_catch = v.current_flow_context
v.make_merge_flow(before_catch, after_catch)
end
end
src/semantize/flow.nit:346,2--364,4
redef fun accept_flow_visitor(v)
do
var before_loop = v.make_sub_flow
var after_expr = v.visit_expr(self.n_expr)
v.current_flow_context = after_expr.when_true
v.enter_visit(self.n_block)
var after_block = v.current_flow_context
before_loop.add_loop(after_block)
v.merge_continues_to(before_loop, self.continue_mark)
v.current_flow_context = after_expr.when_false
v.merge_breaks(self.break_mark)
end
src/semantize/flow.nit:402,2--417,4
redef fun accept_flow_visitor(v)
do
var before_loop = v.make_sub_flow
v.enter_visit(self.n_block)
var after_block = v.current_flow_context
before_loop.add_loop(after_block)
v.merge_continues_to(before_loop, self.continue_mark)
v.make_unreachable_flow
v.merge_breaks(self.break_mark)
end
src/semantize/flow.nit:421,2--434,4
redef fun accept_flow_visitor(v)
do
for g in n_groups do
v.enter_visit(g.n_expr)
end
var before_loop = v.make_sub_flow
v.enter_visit(self.n_block)
var after_block = v.current_flow_context
before_loop.add_loop(after_block)
v.merge_continues_to(before_loop, self.continue_mark)
v.make_merge_flow(v.current_flow_context, before_loop)
v.merge_breaks(self.break_mark)
end
src/semantize/flow.nit:438,2--455,4
redef fun accept_flow_visitor(v)
do
var after_expr = v.visit_expr(self.n_expr)
v.current_flow_context = after_expr.when_false
var after_expr2 = v.visit_expr(self.n_expr2)
var merge_true = v.make_merge_flow(after_expr.when_true, after_expr2.when_true)
merge_true.name = "OR TRUE"
v.make_true_false_flow(merge_true, after_expr2.when_false)
end
src/semantize/flow.nit:480,2--491,4
redef fun accept_flow_visitor(v)
do
var after_expr = v.visit_expr(self.n_expr)
v.current_flow_context = after_expr.when_true
var after_expr2 = v.visit_expr(self.n_expr2)
var merge_true = v.make_merge_flow(after_expr.when_false, after_expr2.when_true)
merge_true.name = "OR TRUE"
v.make_true_false_flow(merge_true, after_expr2.when_false)
end
src/semantize/flow.nit:495,2--506,4
redef fun accept_flow_visitor(v)
do
var after_expr = v.visit_expr(self.n_expr)
v.current_flow_context = after_expr.when_true
var after_expr2 = v.visit_expr(self.n_expr2)
var merge_false = v.make_merge_flow(after_expr.when_false, after_expr2.when_false)
merge_false.name = "AND FALSE"
v.make_true_false_flow(after_expr2.when_true, merge_false)
end
src/semantize/flow.nit:510,2--521,4
redef fun accept_flow_visitor(v)
do
super
v.make_sub_true_false_flow
end
src/semantize/flow.nit:541,2--545,4
redef fun accept_flow_visitor(v)
do
super
v.make_sub_true_false_flow
end
src/semantize/flow.nit:550,2--554,4