Slightly more space-efficient dispatch table representation

Slava Pestov 2009-05-09 20:24:32 -05:00
parent b86a419b6e
commit 0b7eee6e61
2 changed files with 6 additions and 7 deletions

View File

@ -163,7 +163,7 @@ M: hi-tag-dispatch-engine compile-engine
: build-fast-hash ( methods -- buckets )
>alist V{ } clone [ hashcode 1array ] distribute-buckets
[ compile-engines* >alist >array ] map ;
[ compile-engines* >alist { } join ] map ;
M: echelon-dispatch-engine compile-engine
dup n>> 0 = [

View File

@ -8,15 +8,14 @@ cell megamorphic_cache_misses;
static cell search_lookup_alist(cell table, cell klass)
{
array *pairs = untag<array>(table);
fixnum index = array_capacity(pairs) - 1;
array *elements = untag<array>(table);
fixnum index = array_capacity(elements) - 2;
while(index >= 0)
{
array *pair = untag<array>(array_nth(pairs,index));
if(array_nth(pair,0) == klass)
return array_nth(pair,1);
if(array_nth(elements,index) == klass)
return array_nth(elements,index + 1);
else
index--;
index -= 2;
}
return F;