From: Jean Privat Date: Fri, 25 Jan 2013 18:15:45 +0000 (-0500) Subject: niti, nitg & rta: use lookup_first_definition X-Git-Tag: v0.6~119 X-Git-Url: http://nitlanguage.org niti, nitg & rta: use lookup_first_definition Signed-off-by: Jean Privat --- diff --git a/src/global_compiler.nit b/src/global_compiler.nit index 468fc04..e09d040 100644 --- a/src/global_compiler.nit +++ b/src/global_compiler.nit @@ -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 diff --git a/src/naive_interpreter.nit b/src/naive_interpreter.nit index f82b235..4818e57 100644 --- a/src/naive_interpreter.nit +++ b/src/naive_interpreter.nit @@ -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 diff --git a/src/rapid_type_analysis.nit b/src/rapid_type_analysis.nit index fdea6f9..6675dcd 100644 --- a/src/rapid_type_analysis.nit +++ b/src/rapid_type_analysis.nit @@ -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