nitc :: MClass :: allocate_vtable
vm
The currently executed VirtualMachine
# Allocate a single vtable
# * `vm` The currently executed VirtualMachine
private fun allocate_vtable(vm: VirtualMachine)
do
var ids = new Array[Int]
var nb_methods_total = new Array[Int]
var nb_attributes_total = new Array[Int]
for cl in ordering do
ids.add(cl.vtable.id)
nb_methods_total.add(cl.intro_mmethods.length)
nb_attributes_total.add(cl.intro_mattributes.length)
end
# Calculate the delta to prepare object structure
var deltas = calculate_delta(nb_attributes_total)
vtable.internal_vtable = vm.memory_manager.init_vtable(ids, nb_methods_total, deltas, vtable.mask)
# The virtual table now needs to be filled with pointer to methods
for cl in ordering do
fill_vtable(vm, vtable.as(not null), cl)
end
loaded = true
end
src/vm/virtual_machine.nit:600,2--624,4