From 62a35102728ed0de1b8c48aa20ecac5a0a2629f3 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Tue, 20 Nov 2007 00:10:18 +0000 Subject: [PATCH] Fix next() --- src/core/org/luaj/lib/BaseLib.java | 10 +- src/core/org/luaj/vm/LTable.java | 84 +++++------ src/debug/org/luaj/debug/DebugLuaState.java | 5 +- src/test/java/org/luaj/vm/LuaJTest.java | 6 +- src/test/res/baselib.lua | 147 ++++++++++++++++---- src/test/res/baselib.luac | Bin 12173 -> 19531 bytes src/test/res/next.lua | 23 +++ src/test/res/next.luac | Bin 0 -> 1983 bytes src/test/res/pcalls.lua | 16 +++ src/test/res/pcalls.luac | Bin 2083 -> 3035 bytes 10 files changed, 217 insertions(+), 74 deletions(-) create mode 100644 src/test/res/next.lua create mode 100644 src/test/res/next.luac diff --git a/src/core/org/luaj/lib/BaseLib.java b/src/core/org/luaj/lib/BaseLib.java index e45aa7ec..a43a1306 100644 --- a/src/core/org/luaj/lib/BaseLib.java +++ b/src/core/org/luaj/lib/BaseLib.java @@ -214,7 +214,7 @@ public class BaseLib extends LFunction { LString s = vm.tolstring(2); int base = 10; if ( vm.isnumber(3) ) { - base = vm.tointeger(3); + base = vm.tolnumber(3).toJavaInt(); if ( base < 2 || base > 36 ) vm.error("bad argument #2 to '?' (base out of range)"); } @@ -281,9 +281,9 @@ public class BaseLib extends LFunction { } case SELECT: { checkargexists(vm,2,Lua.LUA_TNUMBER); - int n = vm.gettop(); + int n = vm.gettop(); if ( vm.isnumber(2) ) { - int index = vm.tointeger(2); + int index = vm.tolnumber(2).toJavaInt(); if ( index < 0 ) index += n-1; if ( index <= 0 ) @@ -339,11 +339,11 @@ public class BaseLib extends LFunction { int i=1,j; if ( n >= 3 ) { checkargtype(vm,3,Lua.LUA_TNUMBER); - i = vm.tointeger(3); + i = vm.tolnumber(3).toJavaInt(); } if ( n >= 4 ) { checkargtype(vm,4,Lua.LUA_TNUMBER); - j = vm.tointeger(4); + j = vm.tolnumber(4).toJavaInt(); } else { j = list.luaLength(); } diff --git a/src/core/org/luaj/vm/LTable.java b/src/core/org/luaj/vm/LTable.java index a24c4061..6116390e 100644 --- a/src/core/org/luaj/vm/LTable.java +++ b/src/core/org/luaj/vm/LTable.java @@ -636,58 +636,64 @@ public class LTable extends LValue { } /** - * Leave nil on top, or index,value pair - * @param vm - * @param index + * Leave key,value pair on top, or nil if at end of list. + * @param vm the LuaState to leave the values on + * @param index index to start search */ - public void next(LuaState vm, LValue index) { + public void next(LuaState vm, LValue key ) { + + // find place to start looking + int start = nextKey2StartIndex( vm, key ); - // look through vector first - int start = index.toJavaInt(); - if ( start > 0 && start <= m_vector.length ) { - for ( int i=start; i m_vector.length) ) { - for ( int i=0; i 0 && key.isInteger() ) { + final int index = key.toJavaInt() - 1; + if ( index >= 0 && index < n ) { + if ( m_vector[index] == LNil.NIL ) + vm.error( "invalid key to 'next'" ); + return index + 1; + } + } + + if ( m_hashKeys == null ) + vm.error( "invalid key to 'next'" ); + + int slot = findSlot( key ); + if ( m_hashKeys[slot] == null ) + vm.error( "invalid key to 'next'" ); + + return n + slot + 1; + } } diff --git a/src/debug/org/luaj/debug/DebugLuaState.java b/src/debug/org/luaj/debug/DebugLuaState.java index 0888b99c..1f536362 100644 --- a/src/debug/org/luaj/debug/DebugLuaState.java +++ b/src/debug/org/luaj/debug/DebugLuaState.java @@ -135,7 +135,8 @@ public class DebugLuaState extends LuaState implements DebugRequestListener { if (exiting) { throw new AbortException("aborted by debug client"); } - + +/* if (DebugUtils.IS_DEBUG) { DebugUtils.println("entered debugHook on pc=" + pc + "...Line: " + getFileLine(cc)); for (int j = 0; j <= cc; j++) { @@ -143,7 +144,7 @@ public class DebugLuaState extends LuaState implements DebugRequestListener { dumpStack(j); } } - + */ synchronized (this) { while (bSuspendOnStart) { try { diff --git a/src/test/java/org/luaj/vm/LuaJTest.java b/src/test/java/org/luaj/vm/LuaJTest.java index f656c0eb..eda119dd 100644 --- a/src/test/java/org/luaj/vm/LuaJTest.java +++ b/src/test/java/org/luaj/vm/LuaJTest.java @@ -78,6 +78,10 @@ public class LuaJTest extends TestCase { runTest( "metatables" ); } + public void testNext() throws IOException, InterruptedException { + runTest( "next" ); + } + public void testPcalls() throws IOException, InterruptedException { runTest( "pcalls" ); } @@ -117,7 +121,7 @@ public class LuaJTest extends TestCase { public void testUpvalues2() throws IOException, InterruptedException { runTest( "upvalues2" ); } -//*/ + private void runTest( String testName ) throws IOException, InterruptedException { // new lua state diff --git a/src/test/res/baselib.lua b/src/test/res/baselib.lua index 1abf58d9..155eecce 100644 --- a/src/test/res/baselib.lua +++ b/src/test/res/baselib.lua @@ -1,20 +1,20 @@ -- unit tests for functions in BaseLib.java +local ids = {} +local function id(obj) + local v = ids[obj] + if v then + return v + end + table.insert(ids,obj) + ids[obj] = type(obj)..'.'..tostring(#ids) + return ids[obj] +end + +-- print +print() +print(11) +print("abc",123,nil,"pqr") --- error, pcall -print( 'pcall(error)', pcall(error) ) -print( 'pcall(error,"msg")', pcall(error,"msg") ) -print( 'pcall(error,"msg",1)', pcall(error,"msg",1) ) -print( 'pcall(error,"msg",2)', pcall(error,"msg",2) ) -local function le(level) - error("msg",level) -end -function ge(level) - error("msg",level) -end -for i = 0,4 do - print( 'pcall(le,i)', i, pcall(le,i) ) - print( 'pcall(ge,i)', i, pcall(ge,i) ) -end -- assert print( 'assert(true)', assert(true) ) @@ -27,7 +27,36 @@ print( 'pcall(assert,nil,"msg")', pcall(assert,nil,"msg") ) print( 'pcall(assert,false,"msg","msg2")', pcall(assert,false,"msg","msg2") ) -- collectgarbage (not supported) +print( 'collectgarbage("count")', id(collectgarbage("count"))) +print( 'collectgarbage("collect")', collectgarbage("collect")) +print( 'collectgarbage("count")', id(collectgarbage("count"))) + -- dofile (not supported) +-- ipairs +print( 'pcall(ipairs)', pcall(ipairs) ) +print( 'pcall(ipairs,nil)', pcall(ipairs,nil) ) +print( 'pcall(ipairs,"a")', pcall(ipairs,"a") ) +print( 'pcall(ipairs,1)', pcall(ipairs,1) ) +for k,v in ipairs({}) do print('ipairs1',k,v)end +for k,v in ipairs({'one','two'}) do print('ipairs2',k,v)end +for k,v in ipairs({aa='aaa',bb='bbb'}) do print('ipairs3',k,v)end +for k,v in ipairs({aa='aaa',bb='bbb','one','two'}) do print('ipairs4',k,v)end +for k,v in ipairs({[30]='30',[20]='20'}) do print('ipairs5',k,v)end + +-- load +-- loadfile +-- loadstring + +-- pairs +print( 'pcall(pairs)', pcall(pairs) ) +print( 'pcall(pairs,nil)', pcall(pairs,nil) ) +print( 'pcall(pairs,"a")', pcall(pairs,"a") ) +print( 'pcall(pairs,1)', pcall(pairs,1) ) +for k,v in pairs({}) do print('pairs1',k,v)end +for k,v in pairs({'one','two'}) do print('pairs2',k,v)end +for k,v in pairs({aa='aaa',bb='bbb'}) do print('pairs3',k,v)end +for k,v in pairs({aa='aaa',bb='bbb','one','two'}) do print('pairs4',k,v)end +for k,v in pairs({[30]='30',[20]='20'}) do print('pairs5',k,v)end -- _G print( '_G["abc"] (before)', _G["abc"] ) @@ -67,16 +96,80 @@ print( 'pcall(setmetatable,nil)', pcall(setmetatable,nil) ) print( 'pcall(setmetatable,"ABC")', pcall(setmetatable,"ABC") ) print( 'pcall(setmetatable,function() end)', pcall(setmetatable,function() end) ) --- ipairs --- load --- loadfile --- loadstring --- next --- pairs --- print --- rawget --- rawset + +-- rawget,rawset +local mt = {aa="aaa", bb="bbb"} +mt.__index = mt +mt.__newindex = mt +local s = {cc="ccc", dd="ddd", } +local t = {cc="ccc", dd="ddd"} +setmetatable(t,mt) +print( 'pcall(rawget)', pcall(rawget)) +print( 'pcall(rawget,"a")', pcall(rawget,"a")) +print( 'pcall(rawget,s)', pcall(rawget,s)) +print( 'pcall(rawget,t)', pcall(rawget,t)) + +function printtables() + function printtable(name,t) + print( ' '..name, t["aa"], t["bb"], t["cc"], t["dd"], t["ee"], t["ff"], t["gg"] ) + print( ' '..name, + rawget(t,"aa"), + rawget(t,"bb"), + rawget(t,"cc"), + rawget(t,"dd"), + rawget(t,"ee"), + rawget(t,"ff"), + rawget(t,"gg") ) + end + printtable( 's', s ) + printtable( 't', t ) + printtable( 'mt', mt ) +end +printtables() +print( 'pcall(rawset,s,"aa","www")', id(rawset(s,"aa","www"))) +printtables() +print( 'pcall(rawset,s,"cc","xxx")', id(rawset(s,"cc","xxx"))) +printtables() +print( 'pcall(rawset,t,"bb","yyy")', id(rawset(t,"aa","yyy"))) +printtables() +print( 'pcall(rawset,t,"dd","zzz")', id(rawset(s,"dd","zzz"))) +printtables() + +printtables() +print( 's["ee"]="ppp"' ); s["ee"]="ppp" +printtables() +print( 's["cc"]="qqq"' ); s["cc"]="qqq" +printtables() +print( 's["bb"]="rrr"' ); t["bb"]="rrr" +printtables() +print( 's["dd"]="sss"' ); t["dd"]="sss" +printtables() +print( 's["gg"]="ttt"' ); mt["gg"]="ttt" +printtables() + + -- select +print( 'pcall(select)', pcall(select) ) +print( 'select(1,11,22,33,44,55)', select(1,11,22,33,44,55) ) +print( 'select(2,11,22,33,44,55)', select(2,11,22,33,44,55) ) +print( 'select(3,11,22,33,44,55)', select(3,11,22,33,44,55) ) +print( 'select(4,11,22,33,44,55)', select(4,11,22,33,44,55) ) +print( 'pcall(select,5,11,22,33,44,55)', pcall(select,5,11,22,33,44,55) ) +print( 'pcall(select,6,11,22,33,44,55)', pcall(select,6,11,22,33,44,55) ) +print( 'pcall(select,7,11,22,33,44,55)', pcall(select,7,11,22,33,44,55) ) +print( 'pcall(select,0,11,22,33,44,55)', pcall(select,0,11,22,33,44,55) ) +print( 'pcall(select,-1,11,22,33,44,55)', pcall(select,-1,11,22,33,44,55) ) +print( 'pcall(select,-2,11,22,33,44,55)', pcall(select,-2,11,22,33,44,55) ) +print( 'pcall(select,-4,11,22,33,44,55)', pcall(select,-4,11,22,33,44,55) ) +print( 'pcall(select,-5,11,22,33,44,55)', pcall(select,-5,11,22,33,44,55) ) +print( 'pcall(select,-6,11,22,33,44,55)', pcall(select,-6,11,22,33,44,55) ) +print( 'pcall(select,1)', pcall(select,1) ) +print( 'pcall(select,select)', pcall(select,select) ) +print( 'pcall(select,{})', pcall(select,{}) ) +print( 'pcall(select,"2",11,22,33)', pcall(select,"2",11,22,33) ) +print( 'pcall(select,"abc",11,22,33)', pcall(select,"abc",11,22,33) ) + + -- tonumber print( 'pcall(tonumber)', pcall(tostring) ) print( 'pcall(tonumber,nil)', pcall(tonumber,nil) ) @@ -116,9 +209,9 @@ print( 'pcall(tostring,"abc","def")', pcall(tostring,"abc","def") ) print( 'pcall(tostring,123)', pcall(tostring,123) ) print( 'pcall(tostring,true)', pcall(tostring,true) ) print( 'pcall(tostring,false)', pcall(tostring,false) ) -print( 'tostring(tostring):sub(1,10)', tostring(tostring):sub(1,10) ) -print( 'tostring(function() end)', tostring(function() end):sub(1,10) ) -print( 'tostring({"one","two",a="aa",b="bb"})', tostring({"one","two",a="aa",b="bb"}):sub(1,7) ) +print( 'tostring(tostring)', id(tostring(tostring)) ) +print( 'tostring(function() end)', id(tostring(function() end)) ) +print( 'tostring({"one","two",a="aa",b="bb"})', id(tostring({"one","two",a="aa",b="bb"})) ) -- unpack print( 'pcall(unpack)', pcall(unpack) ); diff --git a/src/test/res/baselib.luac b/src/test/res/baselib.luac index 08d2915901e9385cf3abb45951656fec0fb844fe..2ad89cde91a51fa25f1b81b520ee701d94ec9357 100644 GIT binary patch literal 19531 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 literal 12173 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 NI}f*L`x|Js&mTLj{>K0S literal 0 HcmV?d00001 diff --git a/src/test/res/pcalls.lua b/src/test/res/pcalls.lua index 12aa0385..066a3ee8 100644 --- a/src/test/res/pcalls.lua +++ b/src/test/res/pcalls.lua @@ -34,3 +34,19 @@ print( 'pcall(ct,le,22,33,44)', pcall(ct,le,22,33,44) ) print( "assert(true,'a','b','c')", assert( true, 'a', 'b', 'c' ) ) print( "pcall(assert,true,'a','b','c')", pcall(assert, true, 'a', 'b', 'c' ) ) print( "pcall(assert,false,'a','b','c')", pcall(assert, false, 'a', 'b', 'c' ) ) + +-- more error, pcall tests +print( 'pcall(error)', pcall(error) ) +print( 'pcall(error,"msg")', pcall(error,"msg") ) +print( 'pcall(error,"msg",1)', pcall(error,"msg",1) ) +print( 'pcall(error,"msg",2)', pcall(error,"msg",2) ) +local function le(level) + error("msg",level) +end +function ge(level) + error("msg",level) +end +for i = 0,4 do + print( 'pcall(le,i)', i, pcall(le,i) ) + print( 'pcall(ge,i)', i, pcall(ge,i) ) +end diff --git a/src/test/res/pcalls.luac b/src/test/res/pcalls.luac index 4063726f0e3448e719f9e0d7058c570743183d9d..fc04bd0dc8ccbc997db1ac90c7b8a162091a0ea6 100644 GIT binary patch literal 3035 zcmbtWO>f*(6ur-WGZQE@l_&^knnr1)nNYX1NyHXARmz4<_m!x}aiWo&W;8RYx~m<; zFX#p&mTZ7O5m)NJK&Dc$W-oBRPT%)Jee(5ad8}KX(vA|2fOEaF7->F&^9{SP5^QOF{ z#kEsKpVHEPwu zpofXIA{UnE){jbDd}3^iUbAEMWM3rn@0b3AhaIWQ7+E&Ot8f5HHE9k7*G#A{P=G%khoebvGCB*LuHSXKeIV#=i|!O&(P+Q;=G8Z^ zK=iGmeiOvGB*;dcbL22$eosN*3OO(mgmSzTL^JILy35o^D7(vBN3|u8-E(s(KFTy(d@zF z=(O)goRw8{74OTi3Om6(>?-?q1eorWJ!P-Tp5~hADYbm?v~z2*W*&ul%{Otap;oD` zDtXr%z*w_&ao?16B%D)z@mAj5>%Km-60KCu^;Y)B9;RZO1 zum;XDxC!1eSO;$rc;haE4e*x1CU}c*8=PgZ1>Q2~f_E8uus2~FzIpfx{(0d3=5FII zeo(^>^m*8Ye;ycb58%CK15uD|>OXQd%+7eO2E&Y0sQ3>8Vy;G^yqc=~k?9?sjy49* j4#OAQ@^jrD4NeA=(tai9k0;@h3En2@;11z<%m+2j(iJ`fiK0N{fV@&Et;