end
end
+redef class AImpliesExpr
+ redef fun expr(v)
+ do
+ var res = v.new_var(self.mtype.as(not null))
+ var i1 = v.expr_bool(self.n_expr)
+ v.add("if (!{i1}) \{")
+ v.add("{res} = 1;")
+ v.add("\} else \{")
+ var i2 = v.expr_bool(self.n_expr2)
+ v.add("{res} = {i2};")
+ v.add("\}")
+ return res
+ end
+end
+
redef class AAndExpr
redef fun expr(v)
do
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
end
end
+redef class AImpliesExpr
+ redef fun expr(v)
+ do
+ var cond = v.expr(self.n_expr)
+ if cond == null then return null
+ if not cond.is_true then return v.true_instance
+ return v.expr(self.n_expr2)
+ end
+end
+
redef class AAndExpr
redef fun expr(v)
do
end
end
+redef class AImpliesExpr
+ redef fun accept_transform_visitor(v)
+ do
+ # TODO
+ end
+end
+
redef class AAndExpr
# `x and y` is replaced with `if x then y else x`
redef fun accept_transform_visitor(v)
end
end
+redef class AImpliesExpr
+ redef fun accept_typing(v)
+ do
+ v.visit_expr_bool(n_expr)
+ v.visit_expr_bool(n_expr2)
+ self.mtype = v.type_bool(self)
+ end
+end
+
redef class AAndExpr
redef fun accept_typing(v)
do