X-Git-Url: http://nitlanguage.org diff --git a/src/semantize/typing.nit b/src/semantize/typing.nit index b37e4a4..ffd68e7 100644 --- a/src/semantize/typing.nit +++ b/src/semantize/typing.nit @@ -748,6 +748,9 @@ redef class AMethPropdef 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.") @@ -755,6 +758,19 @@ redef class AMethPropdef 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 @@ -1304,7 +1320,8 @@ redef class AOrElseExpr 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 @@ -1688,14 +1705,8 @@ redef class ABinopExpr 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