Property definitions

nitc :: flow $ 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

nitc :: flow $ AAbortExpr :: accept_flow_visitor
	redef fun accept_flow_visitor(v)
	do
		super
		v.make_unreachable_flow
	end
src/semantize/flow.nit:338,2--342,4

nitc :: flow $ AIfExpr :: accept_flow_visitor
	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

nitc :: flow $ AIfexprExpr :: accept_flow_visitor
	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

nitc :: flow $ AAssertExpr :: accept_flow_visitor
	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

nitc :: flow $ AParExpr :: accept_flow_visitor
	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

nitc :: flow $ AOnceExpr :: accept_flow_visitor
	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

nitc :: flow $ AReassignFormExpr :: accept_flow_visitor
	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

nitc :: flow $ AEscapeExpr :: accept_flow_visitor
	redef fun accept_flow_visitor(v)
	do
		super
		v.make_unreachable_flow
	end
src/semantize/flow.nit:330,2--334,4

nitc :: flow $ AWithExpr :: accept_flow_visitor
	redef fun accept_flow_visitor(v)
	do
		super
		v.merge_breaks(self.break_mark)
	end
src/semantize/flow.nit:459,2--463,4

nitc :: flow $ ANotExpr :: accept_flow_visitor
	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

nitc :: flow $ AIsaExpr :: accept_flow_visitor
	redef fun accept_flow_visitor(v)
	do
		super
		v.make_sub_true_false_flow
	end
src/semantize/flow.nit:558,2--562,4

nitc :: flow $ AVarAssignExpr :: accept_flow_visitor
	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

nitc :: flow $ AOrElseExpr :: accept_flow_visitor
	redef fun accept_flow_visitor(v)
	do
		super
	end
src/semantize/flow.nit:534,2--537,4

nitc :: flow $ AReturnExpr :: accept_flow_visitor
	redef fun accept_flow_visitor(v)
	do
		super
		v.make_unreachable_flow
	end
src/semantize/flow.nit:315,2--319,4

nitc :: flow $ ADoExpr :: accept_flow_visitor
	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

nitc :: flow $ AWhileExpr :: accept_flow_visitor
	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

nitc :: flow $ ALoopExpr :: accept_flow_visitor
	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

nitc :: flow $ AForExpr :: accept_flow_visitor
	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

nitc :: flow $ AOrExpr :: accept_flow_visitor
	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

nitc :: flow $ AImpliesExpr :: accept_flow_visitor
	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

nitc :: flow $ AAndExpr :: accept_flow_visitor
	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

nitc :: flow $ AEqExpr :: accept_flow_visitor
	redef fun accept_flow_visitor(v)
	do
		super
		v.make_sub_true_false_flow
	end
src/semantize/flow.nit:541,2--545,4

nitc :: flow $ ANeExpr :: accept_flow_visitor
	redef fun accept_flow_visitor(v)
	do
		super
		v.make_sub_true_false_flow
	end
src/semantize/flow.nit:550,2--554,4