diff options
author | Mike Pall <mike> | 2010-03-09 17:49:13 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2010-03-09 17:49:13 +0100 |
commit | f49649d0055556ecf74d2b58bb4b819ed0ab900d (patch) | |
tree | a35a7573ac1b7bced1d05b214cc9ef29115184d1 /src | |
parent | 6e6034e809a7c59a1cb95ee1d4eb54f09ae19015 (diff) | |
download | luajit-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.c | 8 |
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) | |||
1160 | static void LJ_FASTCALL recff_getmetatable(jit_State *J, RecordFFData *rd) | 1162 | static 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]); |