diff options
author | Mike Pall <mike> | 2010-01-09 21:11:35 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2010-01-09 21:11:35 +0100 |
commit | a33204ae5eae25291f003c386ab993278194b96b (patch) | |
tree | c56a9e30ee74f455ae6d9cab8dd366f08946174b /src/lj_gc.c | |
parent | ece20f8ca28f16519a6d4b6a7fc0e5d3e668b314 (diff) | |
download | luajit-a33204ae5eae25291f003c386ab993278194b96b.tar.gz luajit-a33204ae5eae25291f003c386ab993278194b96b.tar.bz2 luajit-a33204ae5eae25291f003c386ab993278194b96b.zip |
Fix 32/64 bit portability issue with upval->v.
Diffstat (limited to 'src/lj_gc.c')
-rw-r--r-- | src/lj_gc.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/lj_gc.c b/src/lj_gc.c index e3d02cd4..ffe5d4b1 100644 --- a/src/lj_gc.c +++ b/src/lj_gc.c | |||
@@ -62,7 +62,7 @@ static void gc_mark(global_State *g, GCobj *o) | |||
62 | gc_markobj(g, tabref(gco2ud(o)->env)); | 62 | gc_markobj(g, tabref(gco2ud(o)->env)); |
63 | } else if (LJ_UNLIKELY(o->gch.gct == ~LJ_TUPVAL)) { | 63 | } else if (LJ_UNLIKELY(o->gch.gct == ~LJ_TUPVAL)) { |
64 | GCupval *uv = gco2uv(o); | 64 | GCupval *uv = gco2uv(o); |
65 | gc_marktv(g, uv->v); | 65 | gc_marktv(g, uvval(uv)); |
66 | if (uv->closed) | 66 | if (uv->closed) |
67 | gray2black(o); /* Closed upvalues are never gray. */ | 67 | gray2black(o); /* Closed upvalues are never gray. */ |
68 | } else if (o->gch.gct != ~LJ_TSTR) { | 68 | } else if (o->gch.gct != ~LJ_TSTR) { |
@@ -102,7 +102,7 @@ static void gc_mark_uv(global_State *g) | |||
102 | for (uv = uvnext(&g->uvhead); uv != &g->uvhead; uv = uvnext(uv)) { | 102 | for (uv = uvnext(&g->uvhead); uv != &g->uvhead; uv = uvnext(uv)) { |
103 | lua_assert(uvprev(uvnext(uv)) == uv && uvnext(uvprev(uv)) == uv); | 103 | lua_assert(uvprev(uvnext(uv)) == uv && uvnext(uvprev(uv)) == uv); |
104 | if (isgray(obj2gco(uv))) | 104 | if (isgray(obj2gco(uv))) |
105 | gc_marktv(g, uv->v); | 105 | gc_marktv(g, uvval(uv)); |
106 | } | 106 | } |
107 | } | 107 | } |
108 | 108 | ||
@@ -727,16 +727,16 @@ void lj_gc_closeuv(global_State *g, GCupval *uv) | |||
727 | { | 727 | { |
728 | GCobj *o = obj2gco(uv); | 728 | GCobj *o = obj2gco(uv); |
729 | /* Copy stack slot to upvalue itself and point to the copy. */ | 729 | /* Copy stack slot to upvalue itself and point to the copy. */ |
730 | copyTV(mainthread(g), &uv->tv, uv->v); | 730 | copyTV(mainthread(g), &uv->tv, uvval(uv)); |
731 | uv->v = &uv->tv; | 731 | setmref(uv->v, &uv->tv); |
732 | uv->closed = 1; | 732 | uv->closed = 1; |
733 | setgcrefr(o->gch.nextgc, g->gc.root); | 733 | setgcrefr(o->gch.nextgc, g->gc.root); |
734 | setgcref(g->gc.root, o); | 734 | setgcref(g->gc.root, o); |
735 | if (isgray(o)) { /* A closed upvalue is never gray, so fix this. */ | 735 | if (isgray(o)) { /* A closed upvalue is never gray, so fix this. */ |
736 | if (g->gc.state == GCSpropagate) { | 736 | if (g->gc.state == GCSpropagate) { |
737 | gray2black(o); /* Make it black and preserve invariant. */ | 737 | gray2black(o); /* Make it black and preserve invariant. */ |
738 | if (tviswhite(uv->v)) | 738 | if (tviswhite(&uv->tv)) |
739 | lj_gc_barrierf(g, o, gcV(uv->v)); | 739 | lj_gc_barrierf(g, o, gcV(&uv->tv)); |
740 | } else { | 740 | } else { |
741 | makewhite(g, o); /* Make it white, i.e. sweep the upvalue. */ | 741 | makewhite(g, o); /* Make it white, i.e. sweep the upvalue. */ |
742 | lua_assert(g->gc.state != GCSfinalize && g->gc.state != GCSpause); | 742 | lua_assert(g->gc.state != GCSfinalize && g->gc.state != GCSpause); |