From d2b58a3abffb52c1d1a007ade443eab360d557e0 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Fri, 16 Nov 2007 19:43:00 +0000 Subject: [PATCH] Fix tonumber() --- src/core/org/luaj/lib/BaseLib.java | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/core/org/luaj/lib/BaseLib.java b/src/core/org/luaj/lib/BaseLib.java index c220c5dc..d075ddcc 100644 --- a/src/core/org/luaj/lib/BaseLib.java +++ b/src/core/org/luaj/lib/BaseLib.java @@ -186,18 +186,25 @@ public class BaseLib extends LFunction { break; case TONUMBER: { - LValue input = vm.topointer(2); - vm.resettop(); - if ( input instanceof LNumber ) { - vm.pushlvalue(input); - } else if ( input instanceof LString ) { + switch ( vm.type(2) ) { + case Lua.LUA_TNUMBER: + break; + case Lua.LUA_TSTRING: + LString s = vm.tolstring(2); int base = 10; - if ( vm.gettop()>=3 ) { + if ( vm.gettop() >= 3 ) { base = vm.tointeger(3); + if ( base < 2 || base > 36 ) + vm.error("bad argument #2 to '?' (base out of range)"); } - vm.pushlvalue( ( (LString) input ).luaToNumber( base ) ); + vm.pushlvalue( s.luaToNumber(base) ); + break; + default: + vm.pushnil(); + break; } - vm.pushnil(); + vm.insert(1); + vm.settop(1); break; } case RAWGET: {