From 0f70a8e96238615d9cae26934f1aa3a00e2f2321 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Wed, 19 Sep 2012 03:19:55 +0000 Subject: [PATCH] Fixes to luajc bytecode generation. --- src/core/org/luaj/vm2/LuaClosure.java | 2 -- src/core/org/luaj/vm2/LuaValue.java | 5 +---- src/jse/org/luaj/vm2/luajc/LuaJC.java | 11 ++++++----- src/jse/org/luaj/vm2/luajc/ProtoInfo.java | 8 ++++++-- src/jse/org/luaj/vm2/luajc/UpvalInfo.java | 9 ++++++--- test/java/org/luaj/luajc/TestLuaJC.java | 10 +++++----- test/junit/org/luaj/vm2/CompatibiltyTest.java | 10 +++++----- test/junit/org/luaj/vm2/FragmentsTest.java | 10 ++++++++++ test/junit/org/luaj/vm2/ScriptDrivenTest.java | 3 +++ test/lua/errors/debuglibargs.lua | 2 +- 10 files changed, 43 insertions(+), 27 deletions(-) diff --git a/src/core/org/luaj/vm2/LuaClosure.java b/src/core/org/luaj/vm2/LuaClosure.java index 1b059150..7575d7ee 100644 --- a/src/core/org/luaj/vm2/LuaClosure.java +++ b/src/core/org/luaj/vm2/LuaClosure.java @@ -21,8 +21,6 @@ ******************************************************************************/ package org.luaj.vm2; -import org.luaj.vm2.lib.DebugLib; - /** * Extension of {@link LuaFunction} which executes lua bytecode. *

diff --git a/src/core/org/luaj/vm2/LuaValue.java b/src/core/org/luaj/vm2/LuaValue.java index 913d417c..8f964d01 100644 --- a/src/core/org/luaj/vm2/LuaValue.java +++ b/src/core/org/luaj/vm2/LuaValue.java @@ -21,9 +21,6 @@ ******************************************************************************/ package org.luaj.vm2; -import org.luaj.vm2.Varargs.SubVarargs; - - /** * Base class for all concrete lua type values. *

@@ -432,7 +429,7 @@ public class LuaValue extends Varargs { */ public boolean isuserdata(Class c) { return false; } - /** Convert to boolean false if {@link #NIL} or {@link FALSE}, true if anything else + /** Convert to boolean false if {@link #NIL} or {@link #FALSE}, true if anything else * @return Value cast to byte if number or string convertible to number, otherwise 0 * @see #optboolean(boolean) * @see #checkboolean() diff --git a/src/jse/org/luaj/vm2/luajc/LuaJC.java b/src/jse/org/luaj/vm2/luajc/LuaJC.java index 8e09e98f..fa6f82f4 100644 --- a/src/jse/org/luaj/vm2/luajc/LuaJC.java +++ b/src/jse/org/luaj/vm2/luajc/LuaJC.java @@ -105,11 +105,12 @@ public class LuaJC implements LuaCompiler { private static String toStandardJavaClassName( String luachunkname ) { String stub = toStub( luachunkname ); - String classname = stub.replace('/','.').replaceAll(NON_IDENTIFIER, "_"); - int c = classname.charAt(0); - if ( c!='_' && !Character.isJavaIdentifierStart(c) ) - classname = "_"+classname; - return classname; + StringBuffer classname = new StringBuffer(); + for (int i = 0, n = stub.length(); i < n; ++i) { + final char c = stub.charAt(i); + classname.append((((i == 0) && Character.isJavaIdentifierStart(c)) || ((i > 0) && Character.isJavaIdentifierPart(c)))? c: '_'); + } + return classname.toString(); } private static String toStandardLuaFileName( String luachunkname ) { diff --git a/src/jse/org/luaj/vm2/luajc/ProtoInfo.java b/src/jse/org/luaj/vm2/luajc/ProtoInfo.java index 5bfa9dad..1b1ab08d 100644 --- a/src/jse/org/luaj/vm2/luajc/ProtoInfo.java +++ b/src/jse/org/luaj/vm2/luajc/ProtoInfo.java @@ -26,13 +26,13 @@ public class ProtoInfo { // A main chunk proto info. public ProtoInfo(Prototype p, String name) { // For the outer chunk, we have one upvalue which is the environment. - this(p,name,new UpvalInfo[] { new UpvalInfo() }); + this(p,name,null); } private ProtoInfo(Prototype p, String name, UpvalInfo[] u) { this.name = name; this.prototype = p; - this.upvals = u; + this.upvals = u != null? u: new UpvalInfo[] { new UpvalInfo(this) }; this.subprotos = p.p!=null&&p.p.length>0? new ProtoInfo[p.p.length]: null; // find basic blocks @@ -364,6 +364,10 @@ public class ProtoInfo { break; case Lua.OP_JMP: /* sBx pc+=sBx */ + a = Lua.GETARG_A( ins ); + if (a > 0) + for ( --a; a