diff --git a/build-utils/cmake-64bit-llvm.bat b/build-utils/cmake-64bit-llvm.bat index dbc930b..8426ab2 100644 --- a/build-utils/cmake-64bit-llvm.bat +++ b/build-utils/cmake-64bit-llvm.bat @@ -4,4 +4,5 @@ rem pre LLVM 3.9 rem cmake -DCMAKE_INSTALL_PREFIX=c:\ravi -G "Visual Studio 14 Win64" -DLLVM_JIT=ON -DLLVM_DIR=c:\LLVM37\share\llvm\cmake .. rem cmake -DCMAKE_INSTALL_PREFIX=c:\ravi -G "Visual Studio 15 2017 Win64" -DLLVM_JIT=ON -DLLVM_DIR=c:\d\LLVM40_64\lib\cmake\llvm .. cmake -DCMAKE_INSTALL_PREFIX=c:\Software\ravi -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Release -DLLVM_JIT=ON -DLLVM_DIR=c:\Software\llvm501r\lib\cmake\llvm .. +rem cmake -DCMAKE_INSTALL_PREFIX=c:\Software\ravi -G "Visual Studio 15 2017 Win64" -DSTATIC_BUILD=ON -DLLVM_JIT=ON -DLLVM_DIR=c:\Software\llvm501r\lib\cmake\llvm .. cd .. diff --git a/ravi-tests/ravi_tests1.ravi b/ravi-tests/ravi_tests1.ravi index 541fddb..43b883e 100644 --- a/ravi-tests/ravi_tests1.ravi +++ b/ravi-tests/ravi_tests1.ravi @@ -120,6 +120,7 @@ opcodes_coverage.SELF_S = 0 opcodes_coverage.TOTYPE = 0 opcodes_coverage.TOSTRING = 0 opcodes_coverage.TOCLOSURE = 0 +opcodes_coverage.SELF_SK = 0 local compile = function(f) if ravi.jit() then @@ -1577,6 +1578,16 @@ ravi.compile(x) assert(x() == 'a') print 'Test 63 OK' +-- Codegen bug #issue 148 +function x() + assert(({pcall(function() comp 'x for __result' end)})[2] + :find'not contain __ prefix') +end +check(x, 'GETTABUP_SK', 'NEWTABLE', 'GETTABUP_SK', 'CLOSURE', + 'CALL', 'SETLIST', 'GETTABLE_I', 'SELF_SK', 'LOADK', + 'CALL', 'CALL', 'RETURN') +print 'Test 64 OK' + for k,v in pairs(opcodes_coverage) do print(k, v) diff --git a/src/lcode.c b/src/lcode.c index b94cddb..a20edbe 100644 --- a/src/lcode.c +++ b/src/lcode.c @@ -1047,10 +1047,12 @@ void luaK_self (FuncState *fs, expdesc *e, expdesc *key) { key->k == VK && key->ravi_type == RAVI_TSTRING && ttisshrstring(&fs->f->k[key->u.info]); - int table_and_string = - e->ravi_type == RAVI_TTABLE && - is_string_constant_key; luaK_exp2anyreg(fs, e); + // The check below needs to be + // after exp2anyreg as this can modify e->ravi_type + int table_and_string = + e->ravi_type == RAVI_TTABLE && + is_string_constant_key; ereg = e->u.info; /* register where 'e' was placed */ freeexp(fs, e); e->u.info = fs->freereg; /* base register for op_self */