From 51068f56d2094f8caabfc9e4bacd0cc34cea3fb7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Julien=20Pag=C3=A8s?= Date: Wed, 16 Jul 2014 15:10:33 +0200 Subject: [PATCH] nitvm: use perfect hashing for atribute access MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Julien Pagès --- src/vm.nit | 168 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 155 insertions(+), 13 deletions(-) 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