X-Git-Url: http://nitlanguage.org diff --git a/src/flow.nit b/src/flow.nit index 05a40b9..4717d9b 100644 --- a/src/flow.nit +++ b/src/flow.nit @@ -17,10 +17,7 @@ # Intraprocedural static flow. module flow -import parser -import toolcontext import scope -import phase redef class ToolContext var flow_phase: Phase = new FlowPhase(self, [scope_phase]) @@ -193,7 +190,7 @@ class FlowContext var previous: Array[FlowContext] = new Array[FlowContext] # Additional reachable flow that loop up to self. - # Loops apears in `loop`, `while`, `for`, closure and with `continue` + # Loops apears in `loop`, `while`, `for`, and with `continue` var loops: Array[FlowContext] = new Array[FlowContext] private var is_marked_unreachable: Bool = false @@ -485,6 +482,21 @@ redef class AOrExpr end end +redef class AImpliesExpr + 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 +end + redef class AAndExpr redef fun accept_flow_visitor(v) do @@ -533,29 +545,6 @@ redef class ANeExpr end end -redef class AClosureCallExpr - redef fun accept_flow_visitor(v) - do - super - # FIXME: break closure call? - # v.make_unreachable_flow - end -end - -redef class AClosureDef - redef fun accept_flow_visitor(v) - do - var before_loop = v.make_sub_flow - - v.enter_visit(self.n_expr) - - var after_block = v.current_flow_context - before_loop.add_loop(after_block) - - v.make_merge_flow(v.current_flow_context, before_loop) - end -end - redef class AIsaExpr redef fun accept_flow_visitor(v) do