From: Jean Privat Date: Wed, 24 Sep 2014 20:46:43 +0000 (-0400) Subject: typing: adapt for typed literal arrays. X-Git-Tag: v0.6.9~15^2~1 X-Git-Url: http://nitlanguage.org typing: adapt for typed literal arrays. Signed-off-by: Jean Privat --- diff --git a/src/semantize/typing.nit b/src/semantize/typing.nit index 8851413..7015efd 100644 --- a/src/semantize/typing.nit +++ b/src/semantize/typing.nit @@ -1097,19 +1097,37 @@ redef class AArrayExpr redef fun accept_typing(v) do + var mtype: nullable MType = null + var ntype = self.n_type + if ntype != null then + mtype = v.resolve_mtype(ntype) + if mtype == null then return # Skip error + end var mtypes = new Array[nullable MType] + var useless = false for e in self.n_exprs.n_exprs do var t = v.visit_expr(e) if t == null then return # Skip error end - mtypes.add(t) + if mtype != null then + if v.check_subtype(e, t, mtype) == null then return # Skip error + if t == mtype then useless = true + else + mtypes.add(t) + end + end + if mtype == null then + mtype = v.merge_types(self, mtypes) end - var mtype = v.merge_types(self, mtypes) if mtype == null then v.error(self, "Type Error: ambiguous array type {mtypes.join(" ")}") return end + if useless then + assert ntype != null + v.modelbuilder.warning(ntype, "useless-type", "Warning: useless type declaration `{mtype}` in literal Array since it can be inferred from the elements type.") + end var mclass = v.get_mclass(self, "Array") if mclass == null then return # Forward error var array_mtype = mclass.get_mtype([mtype])