From: Julien Pagès Date: Wed, 16 Jul 2014 13:10:33 +0000 (+0200) Subject: nitvm: use perfect hashing for atribute access X-Git-Tag: v0.6.7~45^2~1 X-Git-Url: http://nitlanguage.org nitvm: use perfect hashing for atribute access Signed-off-by: Julien Pagès --- diff --git a/src/vm.nit b/src/vm.nit index bda1458..eed0d47 100644 --- a/src/vm.nit +++ b/src/vm.nit @@ -133,13 +133,97 @@ class VirtualMachine super NaiveInterpreter redef fun init_instance(recv: Instance) do if not recv.mtype.as(MClassType).mclass.loaded then create_class(recv.mtype.as(MClassType).mclass) - super recv.vtable = recv.mtype.as(MClassType).mclass.vtable + + assert(recv isa MutableInstance) + + recv.internal_attributes = init_internal_attributes(null_instance, recv.mtype.as(MClassType).mclass.cached_attributes.length) + + super end - + + # Initialize the internal representation of an object (its attribute values) + private fun init_internal_attributes(null_instance: Instance, size: Int): Pointer + import Array[Instance].length, Array[Instance].[] `{ + + Instance* attributes = malloc(sizeof(Instance) * size); + + int i; + for(i=0; i