From f335a25e6bb30315f141cf4727f2af7aa0efa5ff Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Fri, 11 Feb 2011 17:40:37 +0000 Subject: [PATCH] Improve jsr-223 bindings, allow ".lua" or "lua" as extensions, find classes when added as vm extension, enhance javadoc, add sources jar. --- README.html | 18 ++-- src/core/org/luaj/vm2/lib/BaseLib.java | 4 +- src/core/org/luaj/vm2/lib/IoLib.java | 2 +- src/core/org/luaj/vm2/lib/MathLib.java | 6 +- src/core/org/luaj/vm2/lib/PackageLib.java | 4 +- src/core/org/luaj/vm2/lib/StringLib.java | 8 +- src/core/org/luaj/vm2/lib/TableLib.java | 2 +- src/jse/org/luaj/vm2/lib/jse/LuajavaLib.java | 13 ++- .../vm2/script/LuaScriptEngineFactory.java | 8 +- .../luaj/vm2/lib/jse/LuaJavaCoercionTest.java | 84 +++++++++++++++---- 10 files changed, 106 insertions(+), 43 deletions(-) diff --git a/README.html b/README.html index 5c3bfb15..e851f777 100644 --- a/README.html +++ b/README.html @@ -714,19 +714,23 @@ and LuaForge:

Main Changes by Version

  2.0
    -
  • Initial release of 2.0 version +
  • Initial release of 2.0 version
  2.0.1
    -
  • Improve correctness of singleton construction related to static initialization -
  • Fix nan-related error in constant folding logic that was failing on some JVMs -
  • JSR-223 fixes: add META-INF/services entry in jse jar, improve bindings implementation +
  • Improve correctness of singleton construction related to static initialization
  • +
  • Fix nan-related error in constant folding logic that was failing on some JVMs
  • +
  • JSR-223 fixes: add META-INF/services entry in jse jar, improve bindings implementation
  2.0.2
    -
  • JSR-223 bindings change: non Java-primitives will now be passed as LuaValue -
  • Fix selection logic when picking from functions with same name +
  • JSR-223 bindings change: non Java-primitives will now be passed as LuaValue
  • +
  • JSR-223 enhancement: allow both ".lua" and "lua" as extensions in getScriptEngine()
  • +
  • Improve selection logic when binding to overloaded functions using luajava
  • +
  • Enhance javadoc, put it online +and in distribution +
  • +
  • Add lib/luaj-sources-2.0.2.jar for easier integration into an IDE such as Netbeans
-

Known Issues

  • debug code may not be completely removed by some obfuscators diff --git a/src/core/org/luaj/vm2/lib/BaseLib.java b/src/core/org/luaj/vm2/lib/BaseLib.java index aa9f7d16..cbbd8c2c 100644 --- a/src/core/org/luaj/vm2/lib/BaseLib.java +++ b/src/core/org/luaj/vm2/lib/BaseLib.java @@ -155,7 +155,7 @@ public class BaseLib extends OneArgFunction implements ResourceFinder { return c.getResourceAsStream(filename.startsWith("/")? filename: "/"+filename); } - public static final class BaseLib2 extends TwoArgFunction { + static final class BaseLib2 extends TwoArgFunction { public LuaValue call(LuaValue arg1, LuaValue arg2) { switch ( opcode ) { case 0: // "collectgarbage", // ( opt [,arg] ) -> value @@ -202,7 +202,7 @@ public class BaseLib extends OneArgFunction implements ResourceFinder { return f; } - public static final class BaseLibV extends VarArgFunction { + static final class BaseLibV extends VarArgFunction { public BaseLib baselib; public Varargs invoke(Varargs args) { switch ( opcode ) { diff --git a/src/core/org/luaj/vm2/lib/IoLib.java b/src/core/org/luaj/vm2/lib/IoLib.java index 429caefe..0afa7fe5 100644 --- a/src/core/org/luaj/vm2/lib/IoLib.java +++ b/src/core/org/luaj/vm2/lib/IoLib.java @@ -247,7 +247,7 @@ public class IoLib extends OneArgFunction { ((IoLibV) t.get(k[i])).iolib = this; } - public static final class IoLibV extends VarArgFunction { + static final class IoLibV extends VarArgFunction { public IoLib iolib; public IoLibV() { } diff --git a/src/core/org/luaj/vm2/lib/MathLib.java b/src/core/org/luaj/vm2/lib/MathLib.java index cf55d3e2..7146a8bc 100644 --- a/src/core/org/luaj/vm2/lib/MathLib.java +++ b/src/core/org/luaj/vm2/lib/MathLib.java @@ -104,7 +104,7 @@ public class MathLib extends OneArgFunction { return t; } - public static final class MathLib1 extends OneArgFunction { + static final class MathLib1 extends OneArgFunction { public LuaValue call(LuaValue arg) { switch ( opcode ) { case 0: return valueOf(Math.abs(arg.checkdouble())); @@ -122,7 +122,7 @@ public class MathLib extends OneArgFunction { } } - public static final class MathLib2 extends TwoArgFunction { + static final class MathLib2 extends TwoArgFunction { protected MathLib mathlib; public LuaValue call(LuaValue arg1, LuaValue arg2) { switch ( opcode ) { @@ -189,7 +189,7 @@ public class MathLib extends OneArgFunction { return p; } - public static final class MathLibV extends VarArgFunction { + static final class MathLibV extends VarArgFunction { protected MathLib mathlib; public Varargs invoke(Varargs args) { switch ( opcode ) { diff --git a/src/core/org/luaj/vm2/lib/PackageLib.java b/src/core/org/luaj/vm2/lib/PackageLib.java index 15a6be81..256c2519 100644 --- a/src/core/org/luaj/vm2/lib/PackageLib.java +++ b/src/core/org/luaj/vm2/lib/PackageLib.java @@ -126,7 +126,7 @@ public class PackageLib extends OneArgFunction { return env; } - public static final class PkgLib1 extends OneArgFunction { + static final class PkgLib1 extends OneArgFunction { PackageLib lib; public PkgLib1(LuaValue env,String name, int opcode, PackageLib lib) { this.env = env; @@ -151,7 +151,7 @@ public class PackageLib extends OneArgFunction { } } - public static final class PkgLibV extends VarArgFunction { + static final class PkgLibV extends VarArgFunction { PackageLib lib; public PkgLibV(LuaValue env,String name, int opcode, PackageLib lib) { this.env = env; diff --git a/src/core/org/luaj/vm2/lib/StringLib.java b/src/core/org/luaj/vm2/lib/StringLib.java index 0c9d47e3..fa9aa05c 100644 --- a/src/core/org/luaj/vm2/lib/StringLib.java +++ b/src/core/org/luaj/vm2/lib/StringLib.java @@ -82,7 +82,7 @@ public class StringLib extends OneArgFunction { return t; } - public static final class StringLib1 extends OneArgFunction { + static final class StringLib1 extends OneArgFunction { public LuaValue call(LuaValue arg) { switch ( opcode ) { case 0: return dump(arg); // dump (function) @@ -95,7 +95,7 @@ public class StringLib extends OneArgFunction { } } - public static final class StringLibV extends VarArgFunction { + static final class StringLibV extends VarArgFunction { public Varargs invoke(Varargs args) { switch ( opcode ) { case 0: return StringLib.byte_( args ); @@ -319,7 +319,7 @@ public class StringLib extends OneArgFunction { private static final String FLAGS = "-+ #0"; - private static class FormatDesc { + static class FormatDesc { private boolean leftAdjust; private boolean zeroPad; @@ -810,7 +810,7 @@ public class StringLib extends OneArgFunction { CHAR_TABLE['\f'] |= MASK_SPACE; }; - private static class MatchState { + static class MatchState { final LuaString s; final LuaString p; final Varargs args; diff --git a/src/core/org/luaj/vm2/lib/TableLib.java b/src/core/org/luaj/vm2/lib/TableLib.java index 6fd3b394..c26b9d40 100644 --- a/src/core/org/luaj/vm2/lib/TableLib.java +++ b/src/core/org/luaj/vm2/lib/TableLib.java @@ -83,7 +83,7 @@ public class TableLib extends OneArgFunction { return NIL; } - public static final class TableLibV extends VarArgFunction { + static final class TableLibV extends VarArgFunction { public Varargs invoke(Varargs args) { switch ( opcode ) { case 0: { // "remove" (table [, pos]) -> removed-ele diff --git a/src/jse/org/luaj/vm2/lib/jse/LuajavaLib.java b/src/jse/org/luaj/vm2/lib/jse/LuajavaLib.java index 9b0eebb3..7f30952c 100644 --- a/src/jse/org/luaj/vm2/lib/jse/LuajavaLib.java +++ b/src/jse/org/luaj/vm2/lib/jse/LuajavaLib.java @@ -123,14 +123,14 @@ public class LuajavaLib extends VarArgFunction { return t; } case BINDCLASS: { - final Class clazz = Class.forName(args.checkjstring(1)); + final Class clazz = classForName(args.checkjstring(1)); return toUserdata( clazz, clazz ); } case NEWINSTANCE: case NEW: { // get constructor final LuaValue c = args.checkvalue(1); - final Class clazz = (opcode==NEWINSTANCE? Class.forName(c.tojstring()): (Class) c.checkuserdata(Class.class)); + final Class clazz = (opcode==NEWINSTANCE? classForName(c.tojstring()): (Class) c.checkuserdata(Class.class)); final Varargs consargs = args.subargs(2); final long paramssig = LuajavaLib.paramsSignatureOf( consargs ); final Constructor con = resolveConstructor( clazz, paramssig ); @@ -153,7 +153,7 @@ public class LuajavaLib extends VarArgFunction { // get the interfaces final Class[] ifaces = new Class[niface]; for ( int i=0; i