From 6694c375c9b887940493751f6fd26f3ad9a55691 Mon Sep 17 00:00:00 2001 From: Enyby Date: Sat, 9 Mar 2019 17:38:32 +0200 Subject: [PATCH] Fix build errors for j2me. #32 --- examples/jse/SampleApplet.java | 4 +- examples/jse/SampleSandboxed.java | 50 ++++++++++++------- src/core/org/luaj/vm2/lib/StringLib.java | 20 ++++---- src/jse/org/luaj/vm2/lib/jse/JsePlatform.java | 21 ++++---- 4 files changed, 53 insertions(+), 42 deletions(-) diff --git a/examples/jse/SampleApplet.java b/examples/jse/SampleApplet.java index 42fe544d..adf77cb5 100644 --- a/examples/jse/SampleApplet.java +++ b/examples/jse/SampleApplet.java @@ -11,13 +11,13 @@ import org.luaj.vm2.lib.Bit32Lib; import org.luaj.vm2.lib.CoroutineLib; import org.luaj.vm2.lib.PackageLib; import org.luaj.vm2.lib.ResourceFinder; -import org.luaj.vm2.lib.StringLib; import org.luaj.vm2.lib.TableLib; import org.luaj.vm2.lib.jse.CoerceJavaToLua; import org.luaj.vm2.lib.jse.JseBaseLib; import org.luaj.vm2.lib.jse.JseIoLib; import org.luaj.vm2.lib.jse.JseMathLib; import org.luaj.vm2.lib.jse.JseOsLib; +import org.luaj.vm2.lib.jse.JseStringLib; import org.luaj.vm2.lib.jse.LuajavaLib; /** @@ -76,7 +76,7 @@ public class SampleApplet extends Applet implements ResourceFinder { globals.load(new PackageLib()); globals.load(new Bit32Lib()); globals.load(new TableLib()); - globals.load(new StringLib()); + globals.load(new JseStringLib()); globals.load(new CoroutineLib()); globals.load(new JseMathLib()); globals.load(new JseIoLib()); diff --git a/examples/jse/SampleSandboxed.java b/examples/jse/SampleSandboxed.java index 5b4e265f..ee1738af 100644 --- a/examples/jse/SampleSandboxed.java +++ b/examples/jse/SampleSandboxed.java @@ -1,12 +1,26 @@ -import org.luaj.vm2.*; +import org.luaj.vm2.Globals; +import org.luaj.vm2.LoadState; +import org.luaj.vm2.LuaBoolean; +import org.luaj.vm2.LuaString; +import org.luaj.vm2.LuaTable; +import org.luaj.vm2.LuaThread; +import org.luaj.vm2.LuaValue; +import org.luaj.vm2.Varargs; import org.luaj.vm2.compiler.LuaC; -import org.luaj.vm2.lib.*; -import org.luaj.vm2.lib.jse.*; +import org.luaj.vm2.lib.Bit32Lib; +import org.luaj.vm2.lib.DebugLib; +import org.luaj.vm2.lib.PackageLib; +import org.luaj.vm2.lib.TableLib; +import org.luaj.vm2.lib.TwoArgFunction; +import org.luaj.vm2.lib.ZeroArgFunction; +import org.luaj.vm2.lib.jse.JseBaseLib; +import org.luaj.vm2.lib.jse.JseMathLib; +import org.luaj.vm2.lib.jse.JseStringLib; /** Simple program that illustrates basic sand-boxing of client scripts * in a server environment. * - *

Although this sandboxing is done primarily in Java here, these + *

Although this sandboxing is done primarily in Java here, these * same techniques should all be possible directly from lua using metatables, * and examples are shown in examples/lua/samplesandboxed.lua. * @@ -29,7 +43,7 @@ public class SampleSandboxed { server_globals = new Globals(); server_globals.load(new JseBaseLib()); server_globals.load(new PackageLib()); - server_globals.load(new StringLib()); + server_globals.load(new JseStringLib()); // To load scripts, we occasionally need a math library in addition to compiler support. // To limit scripts using the debug library, they must be closures, so we only install LuaC. @@ -47,7 +61,7 @@ public class SampleSandboxed { runScriptInSandbox( "return getmetatable('abc').len" ); runScriptInSandbox( "return getmetatable('abc').__index" ); - // Example user scripts that attempt rogue operations, and will fail. + // Example user scripts that attempt rogue operations, and will fail. runScriptInSandbox( "return setmetatable('abc', {})" ); runScriptInSandbox( "getmetatable('abc').len = function() end" ); runScriptInSandbox( "getmetatable('abc').__index = {}" ); @@ -61,9 +75,9 @@ public class SampleSandboxed { LuaValue.ADD, new TwoArgFunction() { public LuaValue call(LuaValue x, LuaValue y) { return LuaValue.valueOf( - (x == TRUE ? 1.0 : x.todouble()) + + (x == TRUE ? 1.0 : x.todouble()) + (y == TRUE ? 1.0 : y.todouble()) ); - } + } }, })); runScriptInSandbox( "return 5 + 6, 5 + true, false + 6" ); @@ -75,21 +89,21 @@ public class SampleSandboxed { // that contain functions that can be abused. static void runScriptInSandbox(String script) { - // Each script will have it's own set of globals, which should + // Each script will have it's own set of globals, which should // prevent leakage between scripts running on the same server. Globals user_globals = new Globals(); user_globals.load(new JseBaseLib()); user_globals.load(new PackageLib()); user_globals.load(new Bit32Lib()); user_globals.load(new TableLib()); - user_globals.load(new StringLib()); + user_globals.load(new JseStringLib()); user_globals.load(new JseMathLib()); // This library is dangerous as it gives unfettered access to the - // entire Java VM, so it's not suitable within this lightweight sandbox. + // entire Java VM, so it's not suitable within this lightweight sandbox. // user_globals.load(new LuajavaLib()); - // Starting coroutines in scripts will result in threads that are + // Starting coroutines in scripts will result in threads that are // not under the server control, so this libary should probably remain out. // user_globals.load(new CoroutineLib()); @@ -98,12 +112,12 @@ public class SampleSandboxed { // user_globals.load(new JseIoLib()); // user_globals.load(new JseOsLib()); - // Loading and compiling scripts from within scripts may also be + // Loading and compiling scripts from within scripts may also be // prohibited, though in theory it should be fairly safe. // LoadState.install(user_globals); // LuaC.install(user_globals); - // The debug library must be loaded for hook functions to work, which + // The debug library must be loaded for hook functions to work, which // allow us to limit scripts to run a certain number of instructions at a time. // However we don't wish to expose the library in the user globals, // so it is immediately removed from the user globals once created. @@ -111,18 +125,18 @@ public class SampleSandboxed { LuaValue sethook = user_globals.get("debug").get("sethook"); user_globals.set("debug", LuaValue.NIL); - // Set up the script to run in its own lua thread, which allows us + // Set up the script to run in its own lua thread, which allows us // to set a hook function that limits the script to a specific number of cycles. - // Note that the environment is set to the user globals, even though the + // Note that the environment is set to the user globals, even though the // compiling is done with the server globals. LuaValue chunk = server_globals.load(script, "main", user_globals); LuaThread thread = new LuaThread(user_globals, chunk); - // Set the hook function to immediately throw an Error, which will not be + // Set the hook function to immediately throw an Error, which will not be // handled by any Lua code other than the coroutine. LuaValue hookfunc = new ZeroArgFunction() { public LuaValue call() { - // A simple lua error may be caught by the script, but a + // A simple lua error may be caught by the script, but a // Java Error will pass through to top and stop the script. throw new Error("Script overran resource limits."); } diff --git a/src/core/org/luaj/vm2/lib/StringLib.java b/src/core/org/luaj/vm2/lib/StringLib.java index 513f77ea..6b75ee8a 100644 --- a/src/core/org/luaj/vm2/lib/StringLib.java +++ b/src/core/org/luaj/vm2/lib/StringLib.java @@ -49,7 +49,7 @@ import org.luaj.vm2.compiler.DumpState; * Globals globals = new Globals(); * globals.load(new JseBaseLib()); * globals.load(new PackageLib()); - * globals.load(new StringLib()); + * globals.load(new JseStringLib()); * System.out.println( globals.get("string").get("upper").call( LuaValue.valueOf("abcde") ) ); * } *

@@ -230,7 +230,7 @@ public class StringLib extends TwoArgFunction { * This function does not accept string values containing embedded zeros, * except as arguments to the q option. */ - static final class format extends VarArgFunction { + final class format extends VarArgFunction { public Varargs invoke(Varargs args) { LuaString fmt = args.checkstring( 1 ); final int n = fmt.length(); @@ -330,7 +330,7 @@ public class StringLib extends TwoArgFunction { private static final String FLAGS = "-+ #0"; - static class FormatDesc { + class FormatDesc { private boolean leftAdjust; private boolean zeroPad; @@ -470,13 +470,7 @@ public class StringLib extends TwoArgFunction { } public void format(Buffer buf, double x) { - String out; - try { - out = String.format(src, x); - } catch (Throwable e) { - out = String.valueOf( x ); - } - buf.append( out ); + buf.append( StringLib.this.format(src, x) ); } public void format(Buffer buf, LuaString s) { @@ -486,13 +480,17 @@ public class StringLib extends TwoArgFunction { buf.append(s); } - public static final void pad(Buffer buf, char c, int n) { + public final void pad(Buffer buf, char c, int n) { byte b = (byte)c; while ( n-- > 0 ) buf.append(b); } } + protected String format(String src, double x) { + return String.valueOf(x); + } + /** * string.gmatch (s, pattern) * diff --git a/src/jse/org/luaj/vm2/lib/jse/JsePlatform.java b/src/jse/org/luaj/vm2/lib/jse/JsePlatform.java index e3ad8477..00575aaf 100644 --- a/src/jse/org/luaj/vm2/lib/jse/JsePlatform.java +++ b/src/jse/org/luaj/vm2/lib/jse/JsePlatform.java @@ -23,7 +23,6 @@ package org.luaj.vm2.lib.jse; import org.luaj.vm2.Globals; import org.luaj.vm2.LoadState; -import org.luaj.vm2.LuaThread; import org.luaj.vm2.LuaValue; import org.luaj.vm2.Varargs; import org.luaj.vm2.compiler.LuaC; @@ -35,10 +34,10 @@ import org.luaj.vm2.lib.ResourceFinder; import org.luaj.vm2.lib.StringLib; import org.luaj.vm2.lib.TableLib; -/** The {@link org.luaj.vm2.lib.jse.JsePlatform} class is a convenience class to standardize - * how globals tables are initialized for the JSE platform. +/** The {@link org.luaj.vm2.lib.jse.JsePlatform} class is a convenience class to standardize + * how globals tables are initialized for the JSE platform. *

- * It is used to allocate either a set of standard globals using + * It is used to allocate either a set of standard globals using * {@link #standardGlobals()} or debug globals using {@link #debugGlobals()} *

* A simple example of initializing globals and using them from Java is: @@ -52,7 +51,7 @@ import org.luaj.vm2.lib.TableLib; * globals.load( new FileInputStream("main.lua"), "main.lua" ).call(); * } *

- * although {@code require} could also be used: + * although {@code require} could also be used: *

 {@code
  * globals.get("require").call(LuaValue.valueOf("main"));
  * } 
@@ -73,8 +72,8 @@ import org.luaj.vm2.lib.TableLib; *
  • {@link org.luaj.vm2.lib.jse.JseOsLib}
  • *
  • {@link org.luaj.vm2.lib.jse.LuajavaLib}
  • * - * In addition, the {@link LuaC} compiler is installed so lua files may be loaded in their source form. - *

    + * In addition, the {@link LuaC} compiler is installed so lua files may be loaded in their source form. + *

    * The debug globals are simply the standard globals plus the {@code debug} library {@link DebugLib}. *

    * The class ensures that initialization is done in the correct order. @@ -98,7 +97,7 @@ public class JsePlatform { globals.load(new PackageLib()); globals.load(new Bit32Lib()); globals.load(new TableLib()); - globals.load(new StringLib()); + globals.load(new JseStringLib()); globals.load(new CoroutineLib()); globals.load(new JseMathLib()); globals.load(new JseIoLib()); @@ -106,7 +105,7 @@ public class JsePlatform { globals.load(new LuajavaLib()); LoadState.install(globals); LuaC.install(globals); - return globals; + return globals; } /** Create standard globals including the {@link DebugLib} library. @@ -124,9 +123,9 @@ public class JsePlatform { } - /** Simple wrapper for invoking a lua function with command line arguments. + /** Simple wrapper for invoking a lua function with command line arguments. * The supplied function is first given a new Globals object as its environment - * then the program is run with arguments. + * then the program is run with arguments. * @return {@link Varargs} containing any values returned by mainChunk. */ public static Varargs luaMain(LuaValue mainChunk, String[] args) {