Skip to content

Commit

Permalink
Make multi-cache aware of native containers.
Browse files Browse the repository at this point in the history
It should not just go decontainerizing them as if all containers are
objects, otherwise it'll end up with false equivalences.
  • Loading branch information
jnthn committed Feb 11, 2015
1 parent 0992e50 commit d4b00a8
Showing 1 changed file with 15 additions and 9 deletions.
24 changes: 15 additions & 9 deletions src/6model/reprs/MVMMultiCache.c
Expand Up @@ -157,9 +157,11 @@ MVMObject * MVM_multi_cache_add(MVMThreadContext *tc, MVMObject *cache_obj, MVMO
MVMContainerSpec const *contspec = STABLE(arg)->container_spec;
if (contspec && IS_CONCRETE(arg)) {
if (contspec->fetch_never_invokes) {
MVMRegister r;
contspec->fetch(tc, arg, &r);
arg = r.o;
if (REPR(arg)->ID != MVM_REPR_ID_NativeRef) {
MVMRegister r;
contspec->fetch(tc, arg, &r);
arg = r.o;
}
}
else {
return cache_obj;
Expand Down Expand Up @@ -240,9 +242,11 @@ MVMObject * MVM_multi_cache_find(MVMThreadContext *tc, MVMObject *cache_obj, MVM
MVMContainerSpec const *contspec = STABLE(arg)->container_spec;
if (contspec && IS_CONCRETE(arg)) {
if (contspec->fetch_never_invokes) {
MVMRegister r;
contspec->fetch(tc, arg, &r);
arg = r.o;
if (REPR(arg)->ID != MVM_REPR_ID_NativeRef) {
MVMRegister r;
contspec->fetch(tc, arg, &r);
arg = r.o;
}
}
else {
return NULL;
Expand Down Expand Up @@ -318,9 +322,11 @@ MVMObject * MVM_multi_cache_find_callsite_args(MVMThreadContext *tc, MVMObject *
MVMContainerSpec const *contspec = STABLE(arg)->container_spec;
if (contspec && IS_CONCRETE(arg)) {
if (contspec->fetch_never_invokes) {
MVMRegister r;
contspec->fetch(tc, arg, &r);
arg = r.o;
if (REPR(arg)->ID != MVM_REPR_ID_NativeRef) {
MVMRegister r;
contspec->fetch(tc, arg, &r);
arg = r.o;
}
}
else {
return NULL;
Expand Down

0 comments on commit d4b00a8

Please sign in to comment.