rta: use callsites in AFor instead re-resolving stuff
authorJean Privat <jean@pryen.org>
Wed, 26 Mar 2014 19:45:50 +0000 (15:45 -0400)
committerJean Privat <jean@pryen.org>
Wed, 26 Mar 2014 19:45:50 +0000 (15:45 -0400)
The code is so much simple now

Signed-off-by: Jean Privat <jean@pryen.org>

src/rapid_type_analysis.nit

index ff72fac..c609772 100644 (file)
@@ -605,22 +605,17 @@ end
 redef class AForExpr
        redef fun accept_rapid_type_visitor(v)
        do
-               var recvtype = self.n_expr.mtype.as(not null)
-               var colltype = self.coltype.as(not null)
-               var itmeth = v.get_method(colltype, "iterator")
-               v.add_send(recvtype, itmeth)
-               var iteratortype = itmeth.intro.msignature.return_mtype.as(MClassType).mclass.intro.bound_mtype
-               var objtype = v.get_class("Object").mclass_type
-               v.add_send(objtype, v.get_method(iteratortype, "is_ok"))
+               v.add_callsite(self.method_iterator)
+               v.add_callsite(self.method_is_ok)
                if self.variables.length == 1 then
-                       v.add_send(objtype, v.get_method(iteratortype, "item"))
+                       v.add_callsite(self.method_item)
                else if self.variables.length == 2 then
-                       v.add_send(objtype, v.get_method(iteratortype, "key"))
-                       v.add_send(objtype, v.get_method(iteratortype, "item"))
+                       v.add_callsite(self.method_key)
+                       v.add_callsite(self.method_item)
                else
                        abort
                end
-               v.add_send(objtype, v.get_method(iteratortype, "next"))
+               v.add_callsite(self.method_next)
        end
 end