VM: makes some factor_vm methods to free functions
parent
941c9fabd4
commit
b027285b48
|
@ -2,20 +2,16 @@
|
||||||
|
|
||||||
namespace factor {
|
namespace factor {
|
||||||
|
|
||||||
cell factor_vm::search_lookup_alist(cell table, cell klass) {
|
static cell search_lookup_alist(cell table, cell klass) {
|
||||||
array* elements = untag<array>(table);
|
array* elements = untag<array>(table);
|
||||||
fixnum index = array_capacity(elements) - 2;
|
for (fixnum index = array_capacity(elements) - 2; index >= 0; index -= 2) {
|
||||||
while (index >= 0) {
|
|
||||||
if (array_nth(elements, index) == klass)
|
if (array_nth(elements, index) == klass)
|
||||||
return array_nth(elements, index + 1);
|
return array_nth(elements, index + 1);
|
||||||
else
|
|
||||||
index -= 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false_object;
|
return false_object;
|
||||||
}
|
}
|
||||||
|
|
||||||
cell factor_vm::search_lookup_hash(cell table, cell klass, cell hashcode) {
|
static cell search_lookup_hash(cell table, cell klass, cell hashcode) {
|
||||||
array* buckets = untag<array>(table);
|
array* buckets = untag<array>(table);
|
||||||
cell bucket = array_nth(buckets, hashcode & (array_capacity(buckets) - 1));
|
cell bucket = array_nth(buckets, hashcode & (array_capacity(buckets) - 1));
|
||||||
if (TAG(bucket) == ARRAY_TYPE)
|
if (TAG(bucket) == ARRAY_TYPE)
|
||||||
|
@ -23,12 +19,12 @@ cell factor_vm::search_lookup_hash(cell table, cell klass, cell hashcode) {
|
||||||
return bucket;
|
return bucket;
|
||||||
}
|
}
|
||||||
|
|
||||||
cell factor_vm::nth_superclass(tuple_layout* layout, fixnum echelon) {
|
static cell nth_superclass(tuple_layout* layout, fixnum echelon) {
|
||||||
cell* ptr = (cell*)(layout + 1);
|
cell* ptr = (cell*)(layout + 1);
|
||||||
return ptr[echelon * 2];
|
return ptr[echelon * 2];
|
||||||
}
|
}
|
||||||
|
|
||||||
cell factor_vm::nth_hashcode(tuple_layout* layout, fixnum echelon) {
|
static cell nth_hashcode(tuple_layout* layout, fixnum echelon) {
|
||||||
cell* ptr = (cell*)(layout + 1);
|
cell* ptr = (cell*)(layout + 1);
|
||||||
return ptr[echelon * 2 + 1];
|
return ptr[echelon * 2 + 1];
|
||||||
}
|
}
|
||||||
|
|
|
@ -660,10 +660,6 @@ struct factor_vm {
|
||||||
void primitive_quotation_compiled_p();
|
void primitive_quotation_compiled_p();
|
||||||
|
|
||||||
// dispatch
|
// dispatch
|
||||||
cell search_lookup_alist(cell table, cell klass);
|
|
||||||
cell search_lookup_hash(cell table, cell klass, cell hashcode);
|
|
||||||
cell nth_superclass(tuple_layout* layout, fixnum echelon);
|
|
||||||
cell nth_hashcode(tuple_layout* layout, fixnum echelon);
|
|
||||||
cell lookup_tuple_method(cell obj, cell methods);
|
cell lookup_tuple_method(cell obj, cell methods);
|
||||||
cell lookup_method(cell obj, cell methods);
|
cell lookup_method(cell obj, cell methods);
|
||||||
void primitive_lookup_method();
|
void primitive_lookup_method();
|
||||||
|
|
Loading…
Reference in New Issue