From 0353660299124114463ad4bf7f426f68b6a649d5 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Fri, 5 Oct 2007 22:00:31 +0000 Subject: [PATCH] Convert to new JavaFunction api --- src/main/java/lua/Builtin.java | 76 +++++++++++++++++----------------- 1 file changed, 39 insertions(+), 37 deletions(-) diff --git a/src/main/java/lua/Builtin.java b/src/main/java/lua/Builtin.java index 61a4ce2c..83702fba 100644 --- a/src/main/java/lua/Builtin.java +++ b/src/main/java/lua/Builtin.java @@ -6,13 +6,10 @@ package lua; import java.io.OutputStream; import java.io.PrintStream; -import lua.value.LBoolean; -import lua.value.LFunction; -import lua.value.LNil; import lua.value.LTable; import lua.value.LValue; -final class Builtin extends LFunction { +final class Builtin extends JavaFunction { static void addBuiltins(LTable table) { for ( int i=0; i 0 ) - stdout.print( "\t" ); - stdout.print( vm.getArg(i).luaAsString() ); - } - stdout.println(); - vm.setResult(); + int n = vm.gettop(); + for ( int i=1; i<=n; i++ ) { + if ( i > 1 ) + stdout.print( "\t" ); + stdout.print( vm.topointer(i).luaAsString() ); } - break; + stdout.println(); + return 0; + } case PAIRS: - case IPAIRS: - vm.setResult( vm.getArg(0).luaPairs(id==PAIRS) ); - break; + case IPAIRS: { + LValue v = vm.topointer(1); + LValue r = v.luaPairs(id==PAIRS); + vm.pushlvalue( r ); + return 1; + } case GETMETATABLE: - vm.setResult( vm.getArg(0).luaGetMetatable() ); - break; + return vm.getmetatable(1); case SETMETATABLE: - LValue t = vm.getArg(0); - t.luaSetMetatable(vm.getArg(1)); - vm.setResult( t ); - break; - case TYPE: - vm.setResult( vm.getArg(0).luaGetTypeName() ); - break; + vm.setmetatable(1); + return 1; + case TYPE: { + LValue v = vm.topointer(1); + vm.pushlstring( v.luaGetTypeName() ); + return 1; + } case PCALL: { - int n = vm.getArgCount(); - int s = vm.pcall( n-1, Lua.LUA_MULTRET, 0 ); - if ( s != 0 ) { - LValue v = vm.topointer(-1); - vm.setResult( LBoolean.FALSE ); - vm.push( v ); - } else { - vm.setResult( LBoolean.TRUE ); - } + int n = vm.gettop(); + int s = vm.pcall( n-1, Lua.LUA_MULTRET, 0 ); + if ( s == 0 ) { // success + vm.pushboolean( true ); + vm.insert( 1 ); + return vm.gettop(); + } else { // error, error message is on the stack + vm.pushboolean( false ); + vm.insert( -2 ); + return 2; } - break; + } default: luaUnsupportedOperation(); + return 0; } - return false; } static void redirectOutput( OutputStream newStdOut ) {