aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-03-09 17:49:13 +0100
committerMike Pall <mike>2010-03-09 17:49:13 +0100
commitf49649d0055556ecf74d2b58bb4b819ed0ab900d (patch)
treea35a7573ac1b7bced1d05b214cc9ef29115184d1 /src
parent6e6034e809a7c59a1cb95ee1d4eb54f09ae19015 (diff)
downloadluajit-f49649d0055556ecf74d2b58bb4b819ed0ab900d.tar.gz
luajit-f49649d0055556ecf74d2b58bb4b819ed0ab900d.tar.bz2
luajit-f49649d0055556ecf74d2b58bb4b819ed0ab900d.zip
Fix recording of getmetatable() for non-tables.
Diffstat (limited to 'src')
-rw-r--r--src/lj_record.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/lj_record.c b/src/lj_record.c
index d8cd8962..fa4180b9 100644
--- a/src/lj_record.c
+++ b/src/lj_record.c
@@ -660,9 +660,11 @@ static int rec_mm_lookup(jit_State *J, RecordIndex *ix, MMS mm)
660 } else { 660 } else {
661 /* Specialize to base metatable. Must flush mcode in lua_setmetatable(). */ 661 /* Specialize to base metatable. Must flush mcode in lua_setmetatable(). */
662 mt = tabref(basemt_obj(J2G(J), &ix->tabv)); 662 mt = tabref(basemt_obj(J2G(J), &ix->tabv));
663 if (mt == NULL) 663 if (mt == NULL) {
664 ix->mt = TREF_NIL;
664 return 0; /* No metamethod. */ 665 return 0; /* No metamethod. */
665 mix.tab = lj_ir_ktab(J, mt); 666 }
667 ix->mt = mix.tab = lj_ir_ktab(J, mt);
666 goto nocheck; 668 goto nocheck;
667 } 669 }
668 ix->mt = mt ? mix.tab : TREF_NIL; 670 ix->mt = mt ? mix.tab : TREF_NIL;
@@ -1160,7 +1162,7 @@ static void LJ_FASTCALL recff_type(jit_State *J, RecordFFData *rd)
1160static void LJ_FASTCALL recff_getmetatable(jit_State *J, RecordFFData *rd) 1162static void LJ_FASTCALL recff_getmetatable(jit_State *J, RecordFFData *rd)
1161{ 1163{
1162 TRef tr = J->base[0]; 1164 TRef tr = J->base[0];
1163 if (tref_istab(tr)) { 1165 if (tr) {
1164 RecordIndex ix; 1166 RecordIndex ix;
1165 ix.tab = tr; 1167 ix.tab = tr;
1166 copyTV(J->L, &ix.tabv, &rd->argv[0]); 1168 copyTV(J->L, &ix.tabv, &rd->argv[0]);