From 8ce32d680b77685ca9891dd4d3d217e8402cc33a Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Fri, 2 Aug 2013 13:13:37 -0400 Subject: [PATCH 1/1] model: add Type#length Signed-off-by: Jean Privat --- src/model/model.nit | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/model/model.nit b/src/model/model.nit index 80d643f..23ce2a0 100644 --- a/src/model/model.nit +++ b/src/model/model.nit @@ -776,6 +776,19 @@ abstract class MType return 1 end + # The length of the type seen as a tree. + # + # A -> 1 + # G[A] -> 2 + # H[A, B] -> 3 + # H[G[A], B] -> 4 + # + # Formal types have a length of 1. + fun length: Int + do + return 1 + end + # Compute all the classdefs inherited/imported. # The returned set contains: # * the class definitions from `mmodule` and its imported modules @@ -955,6 +968,15 @@ class MGenericType end return dmax + 1 end + + redef fun length + do + var res = 1 + for a in self.arguments do + res += a.length + end + return res + end end # A virtual formal type. @@ -1166,6 +1188,8 @@ class MNullableType redef fun depth do return self.mtype.depth + redef fun length do return self.mtype.length + redef fun collect_mclassdefs(mmodule) do assert not self.need_anchor @@ -1235,6 +1259,20 @@ class MSignature return dmax + 1 end + redef fun length + do + var res = 1 + var t = self.return_mtype + if t != null then res += t.length + for p in mparameters do + res += p.mtype.length + end + for p in mclosures do + res += p.mtype.length + end + return res + end + # REQUIRE: 1 <= mparameters.count p -> p.is_vararg init(mparameters: Array[MParameter], return_mtype: nullable MType) do -- 1.7.9.5