/** * */ 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 { static void addBuiltins(LTable table) { for ( int i=0; i 0 ) stdout.print( "\t" ); stdout.print( vm.getArg(i).luaAsString() ); } stdout.println(); vm.setResult(); } break; case PAIRS: case IPAIRS: vm.setResult( vm.getArg(0).luaPairs(id==PAIRS) ); break; case GETMETATABLE: vm.setResult( vm.getArg(0).luaGetMetatable() ); break; 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; 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 ); } } break; default: luaUnsupportedOperation(); } return false; } static void redirectOutput( OutputStream newStdOut ) { stdout = new PrintStream( newStdOut ); } static void restoreStandardOutput() { stdout = System.out; } }