diff options
author | Rickard Green <[email protected]> | 2015-08-26 19:47:10 +0200 |
---|---|---|
committer | Rickard Green <[email protected]> | 2015-11-12 15:25:47 +0100 |
commit | b21b604137c5cb5f5039a40994e429871e5b707b (patch) | |
tree | 9dacd474126fd82c022c5fb7881c3c9b685324ef /erts/emulator/beam/erl_gc.h | |
parent | 7858ca939f8bf2db918396616fee13364d150a1e (diff) | |
download | otp-b21b604137c5cb5f5039a40994e429871e5b707b.tar.gz otp-b21b604137c5cb5f5039a40994e429871e5b707b.tar.bz2 otp-b21b604137c5cb5f5039a40994e429871e5b707b.zip |
Introduce literal tag
Diffstat (limited to 'erts/emulator/beam/erl_gc.h')
-rw-r--r-- | erts/emulator/beam/erl_gc.h | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/erts/emulator/beam/erl_gc.h b/erts/emulator/beam/erl_gc.h index ecd1bf4d22..fdbf948f9d 100644 --- a/erts/emulator/beam/erl_gc.h +++ b/erts/emulator/beam/erl_gc.h @@ -76,10 +76,10 @@ do { \ int within(Eterm *ptr, Process *p); #endif -ERTS_GLB_INLINE Eterm follow_moved(Eterm term); +ERTS_GLB_INLINE Eterm follow_moved(Eterm term, Eterm xptr_tag); #if ERTS_GLB_INLINE_INCL_FUNC_DEF -ERTS_GLB_INLINE Eterm follow_moved(Eterm term) +ERTS_GLB_INLINE Eterm follow_moved(Eterm term, Eterm xptr_tag) { Eterm* ptr; switch (primary_tag(term)) { @@ -87,11 +87,11 @@ ERTS_GLB_INLINE Eterm follow_moved(Eterm term) break; case TAG_PRIMARY_BOXED: ptr = boxed_val(term); - if (IS_MOVED_BOXED(*ptr)) term = *ptr; + if (IS_MOVED_BOXED(*ptr)) term = (*ptr) | xptr_tag; break; case TAG_PRIMARY_LIST: ptr = list_val(term); - if (IS_MOVED_CONS(ptr[0])) term = ptr[1]; + if (IS_MOVED_CONS(ptr[0])) term = (ptr[1]) | xptr_tag; break; default: ASSERT(!"strange tag in follow_moved"); |