From 70cb74b4d65851ef69240d35b58d9f8d20a73ed1 Mon Sep 17 00:00:00 2001 From: "Benjamin P. Jung" Date: Thu, 27 Aug 2015 15:50:46 +0200 Subject: [PATCH 1/6] Migrate CVS project to Git --- .cvsignore => .gitignore | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) rename .cvsignore => .gitignore (65%) diff --git a/.cvsignore b/.gitignore similarity index 65% rename from .cvsignore rename to .gitignore index 908e4e3e..d7642856 100644 --- a/.cvsignore +++ b/.gitignore @@ -1,8 +1,8 @@ -bin -target -build -lib -jit +bin/ +target/ +build/ +lib/ +jit/ *.ser *.gz *.jar -- 2.49.1 From 4d4a040a6bb7704682b24cac51dde75d072b4e13 Mon Sep 17 00:00:00 2001 From: "Benjamin P. Jung" Date: Fri, 26 Jan 2018 22:44:04 +0100 Subject: [PATCH 2/6] Rename README.html to README.md and add notice. To make sure that everyone knows immediately how this repository happend to be created, I felt that it might be a good idea to add a short notice about the project's heritage. --- README.html => README.md | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) rename README.html => README.md (98%) diff --git a/README.html b/README.md similarity index 98% rename from README.html rename to README.md index cd0f790a..f289746f 100644 --- a/README.html +++ b/README.md @@ -1,21 +1,18 @@ - - +# This is a fork! +
+This repository has been forked from the original CVS sources of Luaj. +The commit history has been converted to make sure that the original work of +James Roseborough and Ian Farmer is not lost. +Unfortunately, I was not able to contact either James or Ian to hand over +ownership of the Github organization/repo as I have originally intended to. +The community however seems interested enough to continue work on the original +sources and therefore I have decided to make sure that any useful pull requests +that may add some value to the original code base shall be merged in from now +on.
+-- Benjamin P. Jung, Jan. 26th 2018 +
- -Getting Started with LuaJ - - - - - - -
-

- - -Getting Started with LuaJ - -

+

Getting Started with LuaJ

James Roseborough, Ian Farmer, Version 3.0.1

-- 2.49.1 From 6f9395f3aa3ed1e1a4caada26b7cad0d8f177b09 Mon Sep 17 00:00:00 2001 From: Enyby Date: Mon, 2 Jul 2018 04:12:54 +0300 Subject: [PATCH 3/6] Fix gmatch for pass testsuites Test suites from lua.org: ``` -- tests for gmatch local a = 0 for i in string.gmatch('abcde', '()') do assert(i == a+1); a=i end assert(a==6) t = {n=0} for w in string.gmatch("first second word", "%w+") do t.n=t.n+1; t[t.n] = w end assert(t[1] == "first" and t[2] == "second" and t[3] == "word") t = {3, 6, 9} for i in string.gmatch ("xuxx uu ppar r", "()(.)%2") do assert(i == table.remove(t, 1)) end assert(#t == 0) t = {} for i,j in string.gmatch("13 14 10 = 11, 15= 16, 22=23", "(%d+)%s*=%s*(%d+)") do t[tonumber(i)] = tonumber(j) end a = 0 for k,v in pairs(t) do assert(k+1 == v+0); a=a+1 end assert(a == 3) -- tests for `%f' (`frontiers') assert(string.gsub("aaa aa a aaa a", "%f[%w]a", "x") == "xaa xa x xaa x") assert(string.gsub("[[]] [][] [[[[", "%f[[].", "x") == "x[]] x]x] x[[[") assert(string.gsub("01abc45de3", "%f[%d]", ".") == ".01abc.45de.3") assert(string.gsub("01abc45 de3x", "%f[%D]%w", ".") == "01.bc45 de3.") assert(string.gsub("function", "%f[\1-\255]%w", ".") == ".unction") assert(string.gsub("function", "%f[^\1-\255]", ".") == "function.") assert(string.find("a", "%f[a]") == 1) assert(string.find("a", "%f[^%z]") == 1) assert(string.find("a", "%f[^%l]") == 2) assert(string.find("aba", "%f[a%z]") == 3) assert(string.find("aba", "%f[%z]") == 4) assert(not string.find("aba", "%f[%l%z]")) assert(not string.find("aba", "%f[^%l%z]")) local i, e = string.find(" alo aalo allo", "%f[%S].-%f[%s].-%f[%S]") assert(i == 2 and e == 5) local k = string.match(" alo aalo allo", "%f[%S](.-%f[%s].-%f[%S])") assert(k == 'alo ') local a = {1, 5, 9, 14, 17,} for k in string.gmatch("alo alo th02 is 1hat", "()%f[%w%d]") do assert(table.remove(a, 1) == k) end assert(#a == 0) ``` Code from lua: https://www.lua.org/source/5.2/lstrlib.c.html ``` static int gmatch_aux (lua_State *L) { MatchState ms; size_t ls, lp; const char *s = lua_tolstring(L, lua_upvalueindex(1), &ls); const char *p = lua_tolstring(L, lua_upvalueindex(2), &lp); const char *src; ms.L = L; ms.matchdepth = MAXCCALLS; ms.src_init = s; ms.src_end = s+ls; ms.p_end = p + lp; for (src = s + (size_t)lua_tointeger(L, lua_upvalueindex(3)); src <= ms.src_end; src++) { const char *e; ms.level = 0; lua_assert(ms.matchdepth == MAXCCALLS); if ((e = match(&ms, src, p)) != NULL) { lua_Integer newstart = e-s; if (e == src) newstart++; /* empty match? go at least one position */ lua_pushinteger(L, newstart); lua_replace(L, lua_upvalueindex(3)); return push_captures(&ms, src, e); } } return 0; /* not found */ } ``` On empty match need increase string offset. --- src/core/org/luaj/vm2/lib/StringLib.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/org/luaj/vm2/lib/StringLib.java b/src/core/org/luaj/vm2/lib/StringLib.java index 1189fc7e..0b1f755f 100644 --- a/src/core/org/luaj/vm2/lib/StringLib.java +++ b/src/core/org/luaj/vm2/lib/StringLib.java @@ -525,12 +525,13 @@ public class StringLib extends TwoArgFunction { this.soffset = 0; } public Varargs invoke(Varargs args) { - for ( ; soffset=0 ) { int soff = soffset; soffset = res; + if (soff == res) soffset++; /* empty match? go at least one position */ return ms.push_captures( true, soff, res ); } } -- 2.49.1 From 828e4be019a60ff19e2ec5a6554c5524b8042867 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Thu, 13 Sep 2018 11:53:00 +0200 Subject: [PATCH 4/6] Fix JsePlatform.luaMain() to provide an "arg" table in the chunk's environment. --- README.html | 42 ++++++++++--------- src/core/org/luaj/vm2/LuaClosure.java | 7 +++- src/jse/org/luaj/vm2/lib/jse/JsePlatform.java | 10 +++-- test/junit/org/luaj/vm2/AllTests.java | 2 + .../org/luaj/vm2/lib/jse/JsePlatformTest.java | 21 ++++++++++ version.properties | 2 +- 6 files changed, 59 insertions(+), 25 deletions(-) create mode 100644 test/junit/org/luaj/vm2/lib/jse/JsePlatformTest.java diff --git a/README.html b/README.html index cd0f790a..f8b9a896 100644 --- a/README.html +++ b/README.html @@ -16,7 +16,7 @@ Getting Started with LuaJ -James Roseborough, Ian Farmer, Version 3.0.1 +James Roseborough, Ian Farmer, Version 3.0.2

Copyright © 2009-2014 Luaj.org. @@ -120,7 +120,7 @@ in comparison with the standard C distribution. 16.794 11.274 Java - java -cp luaj-jse-3.0.1.jar;bcel-5.2.jar lua -b fannkuch.lua 10 + java -cp luaj-jse-3.0.2.jar;bcel-5.2.jar lua -b fannkuch.lua 10 @@ -130,7 +130,7 @@ in comparison with the standard C distribution. 36.894 15.163 - java -cp luaj-jse-3.0.1.jar lua -n fannkuch.lua 10 + java -cp luaj-jse-3.0.2.jar lua -n fannkuch.lua 10 lua 5.1.4 @@ -186,7 +186,7 @@ It is also faster than Java-lua implementations Jill, Kahlua, and Mochalua for a From the main distribution directory line type:

-	java -cp lib/luaj-jse-3.0.1.jar lua examples/lua/hello.lua
+	java -cp lib/luaj-jse-3.0.2.jar lua examples/lua/hello.lua
 

@@ -198,7 +198,7 @@ You should see the following output: To see how luaj can be used to acccess most Java API's including swing, try:

-	java -cp lib/luaj-jse-3.0.1.jar lua examples/lua/swingapp.lua
+	java -cp lib/luaj-jse-3.0.2.jar lua examples/lua/swingapp.lua
 

@@ -213,8 +213,8 @@ Links to sources:

 From the main distribution directory line type:
 
 
-	java -cp lib/luaj-jse-3.0.1.jar luac examples/lua/hello.lua
-	java -cp lib/luaj-jse-3.0.1.jar lua luac.out
+	java -cp lib/luaj-jse-3.0.2.jar luac examples/lua/hello.lua
+	java -cp lib/luaj-jse-3.0.2.jar lua luac.out
 

@@ -228,8 +228,8 @@ Luaj can compile lua sources or binaries directly to java bytecode if the bcel l

 	ant bcel-lib
-	java -cp "lib/luaj-jse-3.0.1.jar;lib/bcel-5.2.jar" luajc -s examples/lua -d . hello.lua
-	java -cp "lib/luaj-jse-3.0.1.jar;." lua -l hello
+	java -cp "lib/luaj-jse-3.0.2.jar;lib/bcel-5.2.jar" luajc -s examples/lua -d . hello.lua
+	java -cp "lib/luaj-jse-3.0.2.jar;." lua -l hello
 

@@ -240,7 +240,7 @@ but the compiled classes must be in the class path at runtime, unless runtime ji

Lua scripts can also be run directly in this mode without precompiling using the lua command with the -b option and providing the bcel library in the class path:

-	java -cp "lib/luaj-jse-3.0.1.jar;lib/bcel-5.2.jar" lua -b examples/lua/hello.lua
+	java -cp "lib/luaj-jse-3.0.2.jar;lib/bcel-5.2.jar" lua -b examples/lua/hello.lua
 
@@ -284,7 +284,7 @@ A simple example may be found in

-You must include the library lib/luaj-jse-3.0.1.jar in your class path. +You must include the library lib/luaj-jse-3.0.2.jar in your class path.

Run a script in a MIDlet

@@ -311,7 +311,7 @@ A simple example may be found in

-You must include the library lib/luaj-jme-3.0.1.jar in your midlet jar. +You must include the library lib/luaj-jme-3.0.2.jar in your midlet jar.

An ant script to build and run the midlet is in @@ -341,7 +341,7 @@ You can also look up the engine by language "lua" or mimetypes "text/lua" or "ap All standard aspects of script engines including compiled statements are supported.

-You must include the library lib/luaj-jse-3.0.1.jar in your class path. +You must include the library lib/luaj-jse-3.0.2.jar in your class path.

A working example may be found in @@ -352,8 +352,8 @@ A working example may be found in To compile and run it using Java 1.6 or higher:

-	javac -cp lib/luaj-jse-3.0.1.jar examples/jse/ScriptEngineSample.java
-	java -cp "lib/luaj-jse-3.0.1.jar;examples/jse" ScriptEngineSample
+	javac -cp lib/luaj-jse-3.0.2.jar examples/jse/ScriptEngineSample.java
+	java -cp "lib/luaj-jse-3.0.2.jar;examples/jse" ScriptEngineSample
 

Excluding the lua bytecode compiler

@@ -593,7 +593,7 @@ The following lua script will open a swing frame on Java SE: See a longer sample in examples/lua/swingapp.lua for details, including a simple animation loop, rendering graphics, mouse and key handling, and image loading. Or try running it using:
-	java -cp lib/luaj-jse-3.0.1.jar lua examples/lua/swingapp.lua
+	java -cp lib/luaj-jse-3.0.2.jar lua examples/lua/swingapp.lua
 

@@ -842,7 +842,7 @@ For JSE projects, add this dependency for the luaj-jse jar: <dependency> <groupId>org.luaj</groupId> <artifactId>luaj-jse</artifactId> - <version>3.0.1</version> + <version>3.0.2</version> </dependency> while for JME projects, use the luaj-jme jar: @@ -850,7 +850,7 @@ while for JME projects, use the luaj-jme jar: <dependency> <groupId>org.luaj</groupId> <artifactId>luaj-jme</artifactId> - <version>3.0.1</version> + <version>3.0.2</version> </dependency> @@ -880,7 +880,7 @@ Unit test scripts can be found in these locations test/lua/*.lua test/lua/errors/*.lua test/lua/perf/*.lua - test/lua/luaj3.0.1-tests.zip + test/lua/luaj3.0.2-tests.zip

Code coverage

@@ -1017,6 +1017,10 @@ and at http://luaj.sour
  • Move online docs to http://luaj.org/luaj/3.0/api/
  • Fix os.time() conversions for pm times.
  • +  3.0.2
      +
    • Fix JsePlatform.luaMain() to provide an "arg" table in the chunk's environment.
    • +
    • Let JsePlatform.luaMain() return values returned by the main chunk.
    • +
    diff --git a/src/core/org/luaj/vm2/LuaClosure.java b/src/core/org/luaj/vm2/LuaClosure.java index 4d176b5d..9f766924 100644 --- a/src/core/org/luaj/vm2/LuaClosure.java +++ b/src/core/org/luaj/vm2/LuaClosure.java @@ -97,14 +97,19 @@ public class LuaClosure extends LuaFunction { */ public LuaClosure(Prototype p, LuaValue env) { this.p = p; + this.initupvalue1(env); + globals = env instanceof Globals? (Globals) env: null; + } + + public void initupvalue1(LuaValue env) { if (p.upvalues == null || p.upvalues.length == 0) this.upValues = NOUPVALUES; else { this.upValues = new UpValue[p.upvalues.length]; this.upValues[0] = new UpValue(new LuaValue[] {env}, 0); } - globals = env instanceof Globals? (Globals) env: null; } + public boolean isclosure() { return true; diff --git a/src/jse/org/luaj/vm2/lib/jse/JsePlatform.java b/src/jse/org/luaj/vm2/lib/jse/JsePlatform.java index 196ea8ba..e3ad8477 100644 --- a/src/jse/org/luaj/vm2/lib/jse/JsePlatform.java +++ b/src/jse/org/luaj/vm2/lib/jse/JsePlatform.java @@ -25,6 +25,7 @@ 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; import org.luaj.vm2.lib.Bit32Lib; import org.luaj.vm2.lib.CoroutineLib; @@ -124,10 +125,11 @@ public class JsePlatform { /** Simple wrapper for invoking a lua function with command line arguments. - * The supplied function is first given a new Globals object, - * then the program is run with arguments. + * The supplied function is first given a new Globals object as its environment + * then the program is run with arguments. + * @return {@link Varargs} containing any values returned by mainChunk. */ - public static void luaMain(LuaValue mainChunk, String[] args) { + public static Varargs luaMain(LuaValue mainChunk, String[] args) { Globals g = standardGlobals(); int n = args.length; LuaValue[] vargs = new LuaValue[args.length]; @@ -137,6 +139,6 @@ public class JsePlatform { arg.set("n", n); g.set("arg", arg); mainChunk.initupvalue1(g); - mainChunk.invoke(LuaValue.varargsOf(vargs)); + return mainChunk.invoke(LuaValue.varargsOf(vargs)); } } diff --git a/test/junit/org/luaj/vm2/AllTests.java b/test/junit/org/luaj/vm2/AllTests.java index f7f60dd7..0062371f 100644 --- a/test/junit/org/luaj/vm2/AllTests.java +++ b/test/junit/org/luaj/vm2/AllTests.java @@ -32,6 +32,7 @@ import org.luaj.vm2.compiler.DumpLoadEndianIntTest; import org.luaj.vm2.compiler.LuaParserTests; import org.luaj.vm2.compiler.RegressionTests; import org.luaj.vm2.compiler.SimpleTests; +import org.luaj.vm2.lib.jse.JsePlatformTest; import org.luaj.vm2.lib.jse.LuaJavaCoercionTest; import org.luaj.vm2.lib.jse.LuajavaAccessibleMembersTest; import org.luaj.vm2.lib.jse.LuajavaClassMembersTest; @@ -85,6 +86,7 @@ public class AllTests { // library tests TestSuite lib = new TestSuite("Library Tests"); + lib.addTestSuite(JsePlatformTest.class); lib.addTestSuite(LuajavaAccessibleMembersTest.class); lib.addTestSuite(LuajavaClassMembersTest.class); lib.addTestSuite(LuaJavaCoercionTest.class); diff --git a/test/junit/org/luaj/vm2/lib/jse/JsePlatformTest.java b/test/junit/org/luaj/vm2/lib/jse/JsePlatformTest.java new file mode 100644 index 00000000..80f3e773 --- /dev/null +++ b/test/junit/org/luaj/vm2/lib/jse/JsePlatformTest.java @@ -0,0 +1,21 @@ +package org.luaj.vm2.lib.jse; + +import junit.framework.TestCase; + +import org.luaj.vm2.Globals; +import org.luaj.vm2.LuaValue; +import org.luaj.vm2.Varargs; + + +public class JsePlatformTest extends TestCase { + public void testLuaMainPassesArguments() { + Globals globals = JsePlatform.standardGlobals(); + LuaValue chunk = globals.load("return #arg, arg.n, arg[2], arg[1]"); + Varargs results = JsePlatform.luaMain(chunk, new String[] { "aaa", "bbb" }); + assertEquals(results.narg(), 4); + assertEquals(results.arg(1), LuaValue.valueOf(2)); + assertEquals(results.arg(2), LuaValue.valueOf(2)); + assertEquals(results.arg(3), LuaValue.valueOf("bbb")); + assertEquals(results.arg(4), LuaValue.valueOf("aaa")); + } +} diff --git a/version.properties b/version.properties index 0138b12c..fa48e2d2 100644 --- a/version.properties +++ b/version.properties @@ -1 +1 @@ -version: 3.0.1 \ No newline at end of file +version: 3.0.2 \ No newline at end of file -- 2.49.1 From 194b7763174dcdce0764bbaa99be20984dd654d3 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Thu, 13 Sep 2018 11:53:24 +0200 Subject: [PATCH 5/6] Add synchronization to CoerceJavaToLua.COERCIONS map. --- README.html | 1 + src/jse/org/luaj/vm2/lib/jse/CoerceJavaToLua.java | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.html b/README.html index f8b9a896..15503b3d 100644 --- a/README.html +++ b/README.html @@ -1020,6 +1020,7 @@ and at http://luaj.sour   3.0.2
    • Fix JsePlatform.luaMain() to provide an "arg" table in the chunk's environment.
    • Let JsePlatform.luaMain() return values returned by the main chunk.
    • +
    • Add synchronization to CoerceJavaToLua.COERCIONS map.
    diff --git a/src/jse/org/luaj/vm2/lib/jse/CoerceJavaToLua.java b/src/jse/org/luaj/vm2/lib/jse/CoerceJavaToLua.java index 36c5d824..177f9acf 100644 --- a/src/jse/org/luaj/vm2/lib/jse/CoerceJavaToLua.java +++ b/src/jse/org/luaj/vm2/lib/jse/CoerceJavaToLua.java @@ -21,6 +21,7 @@ ******************************************************************************/ package org.luaj.vm2.lib.jse; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -133,7 +134,7 @@ public class CoerceJavaToLua { } - static final Map COERCIONS = new HashMap(); + static final Map COERCIONS = Collections.synchronizedMap(new HashMap()); static { Coercion boolCoercion = new BoolCoercion() ; -- 2.49.1 From 3d22990e3c1cd4911d9ad569ee6a9e0417b49f87 Mon Sep 17 00:00:00 2001 From: "Benjamin P. Jung" Date: Thu, 13 Sep 2018 11:56:02 +0200 Subject: [PATCH 6/6] Migrate CVS project to Git * Delete .svnignore and move stuff to .gitignore * Add note to README to show that this is an inofficial fork as of now. * Change file suffix of README file from .html to .md for better Github integration and readability --- .cvsignore => .gitignore | 10 +++++----- README.html | 30 +++++++++++++++--------------- 2 files changed, 20 insertions(+), 20 deletions(-) rename .cvsignore => .gitignore (65%) diff --git a/.cvsignore b/.gitignore similarity index 65% rename from .cvsignore rename to .gitignore index 908e4e3e..d7642856 100644 --- a/.cvsignore +++ b/.gitignore @@ -1,8 +1,8 @@ -bin -target -build -lib -jit +bin/ +target/ +build/ +lib/ +jit/ *.ser *.gz *.jar diff --git a/README.html b/README.html index 15503b3d..c3caa4c1 100644 --- a/README.html +++ b/README.html @@ -1,21 +1,21 @@ - - +# This is a fork! +
    +This repository has been forked from the original CVS sources of Luaj. +The commit history has been converted to make sure that the original work of +James Roseborough and Ian Farmer is not lost. +Unfortunately, I was not able to contact either James or Ian to hand over +ownership of the Github organization/repo as I have originally intended to. +The community however seems interested enough to continue work on the original +sources and therefore I have decided to make sure that any useful pull requests +that may add some value to the original code base shall be merged in from now +on.
    +-- Benjamin P. Jung, Jan. 26th 2018 +
    - -Getting Started with LuaJ - - - +

    Getting Started with LuaJ

    - -
    -

    - - -Getting Started with LuaJ - -

    +

    Getting Started with LuaJ

    James Roseborough, Ian Farmer, Version 3.0.2

    -- 2.49.1