if not v.has_loop or not v.dirty then break
end
+ var post_visitor = new PostTypingVisitor(v)
+ post_visitor.enter_visit(self)
+
if not nblock.after_flow_context.is_unreachable and msignature.return_mtype != null then
# We reach the end of the function without having a return, it is bad
v.error(self, "Error: reached end of function; expected `return` with a value.")
end
end
+private class PostTypingVisitor
+ super Visitor
+ var type_visitor: TypeVisitor
+ redef fun visit(n) do
+ n.visit_all(self)
+ n.accept_post_typing(type_visitor)
+ end
+end
+
+redef class ANode
+ private fun accept_post_typing(v: TypeVisitor) do end
+end
+
redef class AAttrPropdef
redef fun do_typing(modelbuilder: ModelBuilder)
do
end
if t1 isa MNullType then
- v.error(n_expr, "Type Error: `or else` on `null`.")
+ self.mtype = t2
+ return
else if v.check_can_be_null(n_expr, t1) then
t1 = t1.as_notnull
end
redef fun property_name do return operator
redef fun property_node do return n_op
end
-redef class AEqExpr
- redef fun accept_typing(v)
- do
- super
- v.null_test(self)
- end
-end
-redef class ANeExpr
+
+redef class AEqFormExpr
redef fun accept_typing(v)
do
super