From cd4cb03525c3af65689019989e0efd0d54ea416b Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Wed, 12 May 2010 03:48:21 +0000 Subject: [PATCH] Improve table lib error reporting. --- src/core/org/luaj/vm2/lib/TableLib.java | 7 +++++- test/lua/errors/tablelibargs.lua | 32 ++++++++++++------------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/core/org/luaj/vm2/lib/TableLib.java b/src/core/org/luaj/vm2/lib/TableLib.java index 4ec4ccb7..d8217642 100644 --- a/src/core/org/luaj/vm2/lib/TableLib.java +++ b/src/core/org/luaj/vm2/lib/TableLib.java @@ -21,6 +21,9 @@ ******************************************************************************/ package org.luaj.vm2.lib; +import org.luaj.vm.LNil; +import org.luaj.vm.LTable; +import org.luaj.vm.LValue; import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; import org.luaj.vm2.Varargs; @@ -74,7 +77,9 @@ public class TableLib extends OneArgFunction { return NONE; } case 3: { // "sort" (table [, comp]) -> void - args.checktable(1).sort( args.optvalue(2,NIL) ); + LuaTable table = args.checktable(1); + LuaValue compare = (args.isnoneornil(2)? NIL: args.checkfunction(2)); + table.sort( compare ); return NONE; } case 4: { // (table, func) -> void diff --git a/test/lua/errors/tablelibargs.lua b/test/lua/errors/tablelibargs.lua index a53e242d..0e85f1f6 100644 --- a/test/lua/errors/tablelibargs.lua +++ b/test/lua/errors/tablelibargs.lua @@ -16,40 +16,40 @@ checkallpass('table.concat',{somestringstable}) checkallpass('table.concat',{somestringstable,somesep}) checkallpass('table.concat',{somestringstable,{'-'},somei}) checkallpass('table.concat',{somestringstable,{'-'},{2},somej}) -checkallerrors('table.concat',{notatable},'bad argument #1') -checkallerrors('table.concat',{somenonstringtable},'table contains non-strings') -checkallerrors('table.concat',{somestringstable,notasep},'bad argument #2') -checkallerrors('table.concat',{somestringstable,{'-'},notij},'bad argument #3') -checkallerrors('table.concat',{somestringstable,{'-'},{2},notij},'bad argument #4') +checkallerrors('table.concat',{notatable},'bad argument') +checkallerrors('table.concat',{somenonstringtable},'boolean') +checkallerrors('table.concat',{somestringstable,notasep},'bad argument') +checkallerrors('table.concat',{somestringstable,{'-'},notij},'bad argument') +checkallerrors('table.concat',{somestringstable,{'-'},{2},notij},'bad argument') -- table.insert banner('table.insert') checkallpass('table.insert',{sometable,notanil}) checkallpass('table.insert',{sometable,somei,notanil}) -checkallerrors('table.insert',{notatable,somestring},'bad argument #1') -checkallerrors('table.insert',{sometable,notij,notanil},'bad argument #2') +checkallerrors('table.insert',{notatable,somestring},'bad argument') +checkallerrors('table.insert',{sometable,notij,notanil},'bad argument') -- table.maxn banner('table.maxn') checkallpass('table.maxn',{sometable}) -checkallerrors('table.maxn',{notatable},'bad argument #1') +checkallerrors('table.maxn',{notatable},'bad argument') -- table.remove banner('table.remove') checkallpass('table.remove',{sometable}) checkallpass('table.remove',{sometable,somei}) -checkallerrors('table.remove',{notatable},'bad argument #1') -checkallerrors('table.remove',{notatable,somei},'bad argument #1') -checkallerrors('table.remove',{sometable,notij},'bad argument #2') +checkallerrors('table.remove',{notatable},'bad argument') +checkallerrors('table.remove',{notatable,somei},'bad argument') +checkallerrors('table.remove',{sometable,notij},'bad argument') -- table.sort -local somecomp = {nil,afunction} +local somecomp = {nil,afunction,n=2} local notacomp = {astring,anumber,aboolean,atable} banner('table.sort') checkallpass('table.sort',{somestringstable,somecomp}) -checkallerrors('table.sort',{sometable},'attempt to compare') -checkallerrors('table.sort',{notatable,somecomp},'bad argument #1') -checkallerrors('table.sort',{sometable,notacomp},'bad argument #2') +checkallerrors('table.sort',{sometable},'attempt to') +checkallerrors('table.sort',{notatable,somecomp},'bad argument') +checkallerrors('table.sort',{sometable,notacomp},'bad argument') -- table get banner('table_get - tbl[key]') @@ -61,6 +61,6 @@ banner('table_set - tbl[key]=val') function table_set(tbl,key,val) tbl[key]=val end function table_set_nil_key(tbl,val) tbl[nil]=val end checkallpass('table_set',{sometable,notanil,anylua}) -checkallerrors('table_set_nil_key',{sometable,anylua},'table index is nil') +checkallerrors('table_set_nil_key',{sometable,anylua},'table index')