niti, nitg & rta: use lookup_first_definition
authorJean Privat <jean@pryen.org>
Fri, 25 Jan 2013 18:15:45 +0000 (13:15 -0500)
committerJean Privat <jean@pryen.org>
Fri, 25 Jan 2013 18:15:45 +0000 (13:15 -0500)
Signed-off-by: Jean Privat <jean@pryen.org>

src/global_compiler.nit
src/naive_interpreter.nit
src/rapid_type_analysis.nit

index 468fc04..e09d040 100644 (file)
@@ -1371,13 +1371,7 @@ class GlobalCompilerVisitor
                                self.add("/* skip, no method {m} */")
                                return res
                        end
-                       var propdefs = m.lookup_definitions(self.compiler.mainmodule, mclasstype)
-                       if propdefs.length == 0 then
-                               self.add("/* skip, no method {m} */")
-                               return res
-                       end
-                       assert propdefs.length == 1
-                       var propdef = propdefs.first
+                       var propdef = m.lookup_first_definition(self.compiler.mainmodule, mclasstype)
                        var res2 = self.call(propdef, mclasstype, args)
                        if res != null then self.assign(res, res2.as(not null))
                        return res
@@ -1421,15 +1415,7 @@ class GlobalCompilerVisitor
                var last = types.last
                var defaultpropdef: nullable MMethodDef = null
                for t in types do
-                       var propdefs = m.lookup_definitions(self.compiler.mainmodule, t)
-                       if propdefs.length == 0 then
-                               self.add("/* skip {t}, no method {m} */")
-                               continue
-                       end
-                       if propdefs.length > 1 then
-                               self.debug("NOT YET IMPLEMENTED conflict for {t}.{m}: {propdefs.join(" ")}. choose the first")
-                       end
-                       var propdef = propdefs.first
+                       var propdef = m.lookup_first_definition(self.compiler.mainmodule, t)
                        if propdef.mclassdef.mclass.name == "Object" and t.ctype == "val*" then
                                defaultpropdef = propdef
                                continue
@@ -1459,14 +1445,7 @@ class GlobalCompilerVisitor
        fun monomorphic_send(m: MMethod, t: MType, args: Array[RuntimeVariable]): nullable RuntimeVariable
        do
                assert t isa MClassType
-               var propdefs = m.lookup_definitions(self.compiler.mainmodule, t)
-               if propdefs.length == 0 then
-                       abort
-               end
-               if propdefs.length > 1 then
-                       self.debug("NOT YET IMPLEMENTED conflict for {t}.{m}: {propdefs.join(" ")}. choose the first")
-               end
-               var propdef = propdefs.first
+               var propdef = m.lookup_first_definition(self.compiler.mainmodule, t)
                return self.call(propdef, t, args)
        end
 
index f82b235..4818e57 100644 (file)
@@ -415,16 +415,7 @@ private class NaiveInterpreter
                        fatal("Reciever is null")
                        abort
                end
-               var propdefs = mproperty.lookup_definitions(self.mainmodule, mtype)
-               if propdefs.length > 1 then
-                       fatal("NOT YET IMPLEMETED ERROR: Property conflict: {propdefs.join(", ")}")
-                       abort
-               end
-               assert propdefs.length == 1 else
-                       fatal("Fatal Error: No property '{mproperty}' for '{recv}'")
-                       abort
-               end
-               var propdef = propdefs.first
+               var propdef = mproperty.lookup_first_definition(self.mainmodule, mtype)
                return self.call(propdef, args)
        end
 
index fdea6f9..6675dcd 100644 (file)
@@ -173,10 +173,9 @@ class RapidTypeAnalysis
        fun add_monomorphic_send(mtype: MClassType, mmethod: MMethod)
        do
                assert self.live_types.has(mtype)
-               var defs = mmethod.lookup_definitions(self.mainmodule, mtype)
-               if defs.is_empty then return
-               assert defs.length == 1 else print "conflict on {mtype} for {mmethod}: {defs.join(" ")}"
-               self.add_static_call(mtype, defs.first)
+               if not mtype.has_mproperty(self.mainmodule, mmethod) then return
+               var def = mmethod.lookup_first_definition(self.mainmodule, mtype)
+               self.add_static_call(mtype, def)
        end
 
        # Add a customized_methoddefs to the pool