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 | |
| parent | 6e6034e809a7c59a1cb95ee1d4eb54f09ae19015 (diff) | |
| download | luajit-f49649d0055556ecf74d2b58bb4b819ed0ab900d.tar.gz luajit-f49649d0055556ecf74d2b58bb4b819ed0ab900d.tar.bz2 luajit-f49649d0055556ecf74d2b58bb4b819ed0ab900d.zip | |
Fix recording of getmetatable() for non-tables.
| -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]); |
