/** Runs a chunk of Lua code from an input stream. */ protected void runChunk(InputStream in) throws IOException { try { long start = System.nanoTime(); luaState.setTop(0); luaState.load(in, "console"); luaState.call(0, LuaState.MULTRET); long stop = System.nanoTime(); for (int i = 1; i <= luaState.getTop(); i++) { if (i > 1) { System.out.print(", "); } switch (luaState.type(i)) { case BOOLEAN: System.out.print(Boolean.valueOf(luaState.toBoolean(i))); break; case NUMBER: case STRING: System.out.print(luaState.toString(i)); break; default: System.out.print(luaState.typeName(i)); } } System.out.print("\t#msec="); System.out.print(String.format("%.3f", (stop - start) / 1000000.0)); System.out.println(); } catch (LuaRuntimeException e) { e.printLuaStackTrace(); e.printStackTrace(); } catch (LuaException e) { System.err.println(e.getMessage()); } }
/** * Creates a new instance with the specified command line arguments. The arguments are passed to * Lua as the <code>argv</code> global variable. * * @param args */ public LuaConsole(String[] args) { luaState = new LuaState(); // Process arguments luaState.newTable(args.length, 0); for (int i = 0; i < args.length; i++) { luaState.pushString(args[i]); luaState.rawSet(-2, i + 1); } luaState.setGlobal("argv"); // Open standard libraries luaState.openLibs(); // Set buffer mode luaState.load("io.stdout:setvbuf(\"no\")", "setvbuf"); luaState.call(0, 0); luaState.load("io.stderr:setvbuf(\"no\")", "setvbuf"); luaState.call(0, 0); }