nitc :: MClass :: compile_vft
# Compile the virtual function table for the mclass
private fun compile_vft(v: JavaCompilerVisitor) do
# TODO handle generics
if mclass_type.need_anchor then return
var mclassdefs = mclass_type.collect_mclassdefs(v.compiler.mainmodule).to_a
v.compiler.mainmodule.linearize_mclassdefs(mclassdefs)
var mainmodule = v.compiler.mainmodule
for mclassdef in mclassdefs.reversed do
for mprop in mclassdef.intro_mproperties do
var mpropdef = mprop.lookup_first_definition(mainmodule, intro.bound_mtype)
if not mpropdef isa MMethodDef then continue
var rt_name = mpropdef.rt_name
v.add("this.vft.put(\"{mprop.full_name}\", {rt_name}.get{rt_name}());")
# fill super next definitions
while mpropdef.has_supercall do
var prefix = mpropdef.full_name
mpropdef = mpropdef.lookup_next_definition(mainmodule, intro.bound_mtype)
rt_name = mpropdef.rt_name
v.add("this.vft.put(\"{prefix}\", {rt_name}.get{rt_name}());")
end
end
end
end
src/compiler/java_compiler.nit:1353,2--1377,4