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
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
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
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
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