diff --git a/src/core/org/luaj/vm/LuaState.java b/src/core/org/luaj/vm/LuaState.java index f6d7af52..1c268cad 100644 --- a/src/core/org/luaj/vm/LuaState.java +++ b/src/core/org/luaj/vm/LuaState.java @@ -71,11 +71,11 @@ import org.luaj.lib.TableLib; */ public class LuaState extends Lua { /* thread status; 0 is OK */ - private static final int LUA_YIELD = 1; - private static final int LUA_ERRRUN = 2; - private static final int LUA_ERRSYNTAX = 3; - private static final int LUA_ERRMEM = 4; - private static final int LUA_ERRERR = 5; + public static final int LUA_YIELD = 1; + public static final int LUA_ERRRUN = 2; + public static final int LUA_ERRSYNTAX = 3; + public static final int LUA_ERRMEM = 4; + public static final int LUA_ERRERR = 5; private static final int LUA_MINSTACK = 20; private static final int LUA_MINCALLS = 10; diff --git a/src/j2se/lua.java b/src/j2se/lua.java new file mode 100644 index 00000000..6d303d8e --- /dev/null +++ b/src/j2se/lua.java @@ -0,0 +1,190 @@ +/******************************************************************************* +* Copyright (c) 2008 LuaJ. All rights reserved. +* +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in +* all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +* THE SOFTWARE. +******************************************************************************/ + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +import org.luaj.compiler.LuaC; +import org.luaj.platform.J2sePlatform; +import org.luaj.vm.LFunction; +import org.luaj.vm.Lua; +import org.luaj.vm.LuaState; +import org.luaj.vm.Platform; + + +/** + * lua command for use in java se environments. + */ +public class lua { + private static final String version = Lua._VERSION + "Copyright (C) 2008 luaj.org"; + + private static final String usage = + "usage: java -cp luaj-j2se.jar lua [options] [script [args]].\n" + + "Available options are:\n" + + " -e stat execute string 'stat'\n" + + " -l name require library 'name'\n" + + " -i enter interactive mode after executing 'script'\n" + + " -v show version information\n" + + " -- stop handling options\n" + + " - execute stdin and stop handling options"; + + private static void usageExit() { + System.out.println(usage); + System.exit(-1); + } + + public static void main( String[] args ) throws IOException { + + // new lua state + Platform.setInstance(new J2sePlatform()); + LuaC.install(); + LuaState vm = Platform.newLuaState(); + + // process args + boolean interactive = (args.length == 0); + boolean versioninfo = false; + boolean processing = true; + try { + // stateful argument processing + for ( int i=0; i= args.length ) + usageExit(); + // input script - defer to last stage + break; + case 'l': + if ( ++i >= args.length ) + usageExit(); + loadLibrary( vm, args[i] ); + break; + case 'i': + interactive = true; + break; + case 'v': + versioninfo = true; + break; + case '-': + if ( args[i].length() > 2 ) + usageExit(); + processing = false; + break; + default: + usageExit(); + break; + } + } + } + + // echo version + if ( versioninfo ) + System.out.println(version); + + // input script processing + processing = true; + for ( int i=0; i "); + System.out.flush(); + String line = reader.readLine(); + if ( line == null ) + return; + processScript( vm, new ByteArrayInputStream(line.getBytes()), "-", null, 0 ); + } + } +} diff --git a/src/j2se/luac.java b/src/j2se/luac.java new file mode 100644 index 00000000..97eadbdf --- /dev/null +++ b/src/j2se/luac.java @@ -0,0 +1,183 @@ +/******************************************************************************* +* Copyright (c) 2008 LuaJ. All rights reserved. +* +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in +* all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +* THE SOFTWARE. +******************************************************************************/ + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.luaj.compiler.DumpState; +import org.luaj.compiler.LuaC; +import org.luaj.platform.J2sePlatform; +import org.luaj.vm.LPrototype; +import org.luaj.vm.Lua; +import org.luaj.vm.LuaState; +import org.luaj.vm.Platform; +import org.luaj.vm.Print; + + +/** + * luac command for use in java se environments. + */ +public class luac { + private static final String version = Lua._VERSION + "Copyright (C) 2008 luaj.org"; + + private static final String usage = + "usage: java -cp luaj-j2se.jar luac [options] [filenames].\n" + + "Available options are:\n" + + " - process stdin\n" + + " -l list\n" + + " -o name output to file 'name' (default is \"luac.out\")\n" + + " -p parse only\n" + + " -s strip debug information\n" + + " -e little endian format for numbers\n" + + " -i int32 format for all numbers\n" + + " -v show version information\n" + + " -- stop handling options\n"; + + private static void usageExit() { + System.out.println(usage); + System.exit(-1); + } + + private boolean list = false; + private String output = "luac.out"; + private boolean parseonly = false; + private boolean stripdebug = false; + private boolean littleendian = false; + private boolean intsonly = false; + private boolean versioninfo = false; + private boolean processing = true; + + public static void main( String[] args ) throws IOException { + new luac( args ); + } + + private luac( String[] args ) throws IOException { + // new lua state + Platform.setInstance(new J2sePlatform()); + LuaC.install(); + LuaState vm = Platform.newLuaState(); + + // process args + try { + // get stateful args + for ( int i=0; i= args.length ) + usageExit(); + output = args[i]; + break; + case 'p': + parseonly = true; + break; + case 's': + stripdebug = true; + break; + case 'e': + littleendian = true; + break; + case 'i': + intsonly = true; + break; + case 'v': + versioninfo = true; + break; + case '-': + if ( args[i].length() > 2 ) + usageExit(); + processing = false; + break; + default: + usageExit(); + break; + } + } + } + + // echo version + if ( versioninfo ) + System.out.println(version); + + // open output file + OutputStream fos = new FileOutputStream( output ); + + // process input files + try { + processing = true; + for ( int i=0; i