Let ant build download bcel jar as needed.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src/core"/>
|
||||
<classpathentry kind="src" path="src/jse"/>
|
||||
<classpathentry excluding="org/luaj/vm2/luajc/antlr/|org/luaj/vm2/luajc/lst/|org/luaj/vm2/luajc/JavaCodeGenerator.java" kind="src" path="src/jse"/>
|
||||
<classpathentry kind="src" path="src/jme"/>
|
||||
<classpathentry kind="src" path="test/java"/>
|
||||
<classpathentry kind="src" path="test/junit"/>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
bin
|
||||
target
|
||||
build
|
||||
lib
|
||||
luaj*.jar
|
||||
jit
|
||||
*.ser
|
||||
|
||||
65
build.xml
65
build.xml
@@ -7,13 +7,15 @@
|
||||
<property name="jar.name.jse" value="luaj-jse-${version}.jar"/>
|
||||
|
||||
<import file="wtk.xml"/>
|
||||
|
||||
|
||||
<!--
|
||||
<property name="antlr.version" value="3.1.3"/>
|
||||
<property name="antlr.home" value="${env.ANTLR_HOME}"/>
|
||||
<property name="antlr.tool.jar" value="${antlr.home}/lib/antlr-${antlr.version}.jar"/>
|
||||
<property name="antlr.runtime.jar" value="${antlr.home}/lib/antlr-runtime-${antlr.version}.jar"/>
|
||||
<property name="grammar.dir" value="src/jse/org/luaj/vm2/luajc/antlr"/>
|
||||
<property name="grammar.name" value="Lua"/>
|
||||
<property name="grammar.name" value="Lua"/>
|
||||
-->
|
||||
|
||||
<target name="clean">
|
||||
<delete dir="build"/>
|
||||
@@ -21,45 +23,49 @@
|
||||
<fileset dir="." includes="luaj-*.jar"/>
|
||||
</delete>
|
||||
</target>
|
||||
|
||||
<target name="generate">
|
||||
<fail unless="env.ANTLR_HOME" message="ANTLR_HOME must be set."/>
|
||||
<available file="${antlr.tool.jar}" property="antlr.tool.exists"/>
|
||||
<fail unless="antlr.tool.exists" message="ANTLR tool not found: ${antlr.tool.jar}"/>
|
||||
<echo>Generating files using ${antlr.tool.jar}</echo>
|
||||
<java classpath="${antlr.tool.jar}"
|
||||
classname="org.antlr.Tool"
|
||||
dir="${grammar.dir}"
|
||||
fork="true"
|
||||
failonerror="true">
|
||||
<arg line="${grammar.name}.g"/>
|
||||
</java>
|
||||
|
||||
<available file="lib/bcel-5.2.jar" property="bcel.lib.exists"/>
|
||||
|
||||
<target name="bcel-lib" unless="bcel.lib.exists">
|
||||
<mkdir dir="lib"/>
|
||||
<get src="http://archive.apache.org/dist/jakarta/bcel/binaries/bcel-5.2.tar.gz" dest="lib/bcel-5.2.tar.gz"/>
|
||||
<gunzip src="lib/bcel-5.2.tar.gz" dest="lib/bcel-5.2.tar"/>
|
||||
<untar src="lib/bcel-5.2.tar" dest="lib" overwrite="true">
|
||||
<patternset>
|
||||
<include name="**/*.jar"/>
|
||||
</patternset>
|
||||
<mapper type="flatten"/>
|
||||
</untar>
|
||||
</target>
|
||||
|
||||
<target name="compile" depends="wtk-or-fail">
|
||||
<target name="compile" depends="wtk-or-fail,bcel-lib">
|
||||
<mkdir dir="build/core/src"/>
|
||||
<mkdir dir="build/core/classes"/>
|
||||
<mkdir dir="build/jme/classes"/>
|
||||
<mkdir dir="build/jse/classes"/>
|
||||
<copy todir="build/core/src">
|
||||
<fileset dir="src/core"/>
|
||||
<fileset dir="src/core">
|
||||
<include name="**/Lua.java"/>
|
||||
</fileset>
|
||||
<filterchain>
|
||||
<tokenfilter>
|
||||
<replacestring from='"Luaj 0.0"' to='"Luaj ${version}"'/>
|
||||
</tokenfilter>
|
||||
</filterchain>
|
||||
</copy>
|
||||
<javac destdir="build/core/classes" encoding="utf-8" source="1.3" target="1.2" bootclasspathref="wtk-libs">
|
||||
<src path="build/core/src"/>
|
||||
</javac>
|
||||
<javac destdir="build/jme/classes" encoding="utf-8" source="1.3" target="1.2" bootclasspathref="wtk-libs">
|
||||
<classpath path="build/core/classes"/>
|
||||
<src path="src/jme"/>
|
||||
</javac>
|
||||
<javac destdir="build/jse/classes" encoding="utf-8" source="1.5" target="1.5">
|
||||
<classpath path="build/core/classes;${antlr.runtime.jar}"/>
|
||||
<src path="src/jse"/>
|
||||
</javac>
|
||||
<javac destdir="build/core/classes" encoding="utf-8" source="1.3" target="1.2" bootclasspathref="wtk-libs"
|
||||
srcdir="src/core"/>
|
||||
<javac destdir="build/core/classes" encoding="utf-8" source="1.3" target="1.2" bootclasspathref="wtk-libs"
|
||||
classpath="build/core/classes"
|
||||
srcdir="build/core/src"
|
||||
excludes="**/Lua.java"/>
|
||||
<javac destdir="build/jme/classes" encoding="utf-8" source="1.3" target="1.2" bootclasspathref="wtk-libs"
|
||||
classpath="build/core/classes"
|
||||
srcdir="src/jme"/>
|
||||
<javac destdir="build/jse/classes" encoding="utf-8" source="1.5" target="1.5"
|
||||
classpath="build/core/classes;lib/bcel-5.2.jar"
|
||||
srcdir="src/jse"
|
||||
excludes="**/antlr/**,**/lst/**,**/JavaCodeGenerator.java" />
|
||||
</target>
|
||||
|
||||
<target name="jar-jme" depends="compile">
|
||||
@@ -107,6 +113,9 @@
|
||||
<copy todir="build/luaj-${version}/src">
|
||||
<fileset dir="src">
|
||||
<exclude name="src/test/**"/>
|
||||
<exclude name="**/antlr/**"/>
|
||||
<exclude name="**/lst/**"/>
|
||||
<exclude name="**/JavaCodeGenerator.java"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
<copy todir="build/luaj-${version}/test">
|
||||
|
||||
@@ -28,7 +28,7 @@ import java.io.OutputStream;
|
||||
|
||||
import org.luaj.vm2.Lua;
|
||||
import org.luaj.vm2.compiler.DumpState;
|
||||
import org.luaj.vm2.luajc.antlr.AntlrLuaJCompiler;
|
||||
import org.luaj.vm2.luajc.JavaBytecodeCompiler;
|
||||
|
||||
|
||||
/**
|
||||
@@ -41,7 +41,6 @@ public class luajc {
|
||||
"usage: java -cp luaj-jse.jar,antlr-3.1.3.jar luajc [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" +
|
||||
@@ -55,7 +54,6 @@ public class luajc {
|
||||
System.exit(-1);
|
||||
}
|
||||
|
||||
private boolean list = false;
|
||||
private String output = "luacj.out";
|
||||
private boolean parseonly = false;
|
||||
private boolean stripdebug = false;
|
||||
@@ -80,9 +78,6 @@ public class luajc {
|
||||
// input file - defer to next stage
|
||||
} else {
|
||||
switch ( args[i].charAt(1) ) {
|
||||
case 'l':
|
||||
list = true;
|
||||
break;
|
||||
case 'o':
|
||||
if ( ++i >= args.length )
|
||||
usageExit();
|
||||
@@ -157,16 +152,12 @@ public class luajc {
|
||||
private void processScript( InputStream script, String chunkname, OutputStream out ) throws IOException {
|
||||
try {
|
||||
// create the chunk
|
||||
String source = AntlrLuaJCompiler.compile(script, chunkname);
|
||||
|
||||
// list the chunk
|
||||
if (list)
|
||||
System.out.println(source);
|
||||
byte[] bytes = JavaBytecodeCompiler.loadClass(script, chunkname);
|
||||
|
||||
// write out the chunk
|
||||
if (!parseonly) {
|
||||
FileOutputStream fos = new FileOutputStream( chunkname+".java" );
|
||||
fos.write( source.getBytes() );
|
||||
fos.write( bytes );
|
||||
fos.close();
|
||||
}
|
||||
|
||||
|
||||
@@ -74,15 +74,17 @@ public class JavaBytecodeCompiler implements LuaCompiler {
|
||||
return luac.compile(firstByte, stream, chunkname);
|
||||
}
|
||||
|
||||
/** Compile and load a chunk
|
||||
* @throws IOException */
|
||||
public static byte[] loadClass(InputStream is, String filename) throws IOException {
|
||||
return getInstance().loadClass( is.read(), is, filename );
|
||||
}
|
||||
|
||||
/** Compile into class form. */
|
||||
public LuaFunction load(int firstByte, InputStream stream, String filename, LuaValue env) throws IOException {
|
||||
Prototype p = compile( firstByte, stream, filename);
|
||||
try {
|
||||
String classname = filename.endsWith(".lua")? filename.substring(0,filename.length()-4): filename;
|
||||
classname = classname.replace('/', '.');
|
||||
classname = classname.replace('\\', '.');
|
||||
String sourcename = filename.substring( filename.lastIndexOf('/')+1 );
|
||||
Class c = gen.toJavaBytecode(p, classname, sourcename);
|
||||
Class c = gen.toJavaBytecode(p, toClassname(filename), toSourcename(filename));
|
||||
Object o = c.newInstance();
|
||||
LuaFunction f = (LuaFunction) o;
|
||||
f.setfenv(env);
|
||||
@@ -91,7 +93,24 @@ public class JavaBytecodeCompiler implements LuaCompiler {
|
||||
t.printStackTrace();
|
||||
return new LuaClosure( p, env );
|
||||
}
|
||||
}
|
||||
|
||||
/** Compile into a class */
|
||||
private byte[] loadClass(int firstByte, InputStream stream, String filename) throws IOException {
|
||||
Prototype p = compile(firstByte, stream, filename);
|
||||
return gen.generateBytecode(p, toClassname(filename), toSourcename(filename));
|
||||
}
|
||||
|
||||
/** Convert filename to class name */
|
||||
private static final String toClassname( String filename ) {
|
||||
String classname = filename.endsWith(".lua")? filename.substring(0,filename.length()-4): filename;
|
||||
classname = classname.replace('/', '.');
|
||||
classname = classname.replace('\\', '.');
|
||||
return classname;
|
||||
}
|
||||
|
||||
private static final String toSourcename( String filename ) {
|
||||
return filename.substring( filename.lastIndexOf('/')+1 );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ package org.luaj.vm2.luajc;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Hashtable;
|
||||
|
||||
import org.apache.bcel.Constants;
|
||||
import org.apache.bcel.classfile.Field;
|
||||
@@ -60,8 +61,6 @@ import org.luaj.vm2.Prototype;
|
||||
import org.luaj.vm2.Varargs;
|
||||
import org.luaj.vm2.lib.VarArgFunction;
|
||||
|
||||
import com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable;
|
||||
|
||||
|
||||
public class JavaBytecodeGenerator {
|
||||
public static boolean DUMPCLASSES = "true".equals(System.getProperty("DUMPCLASSES"));
|
||||
@@ -164,7 +163,7 @@ public class JavaBytecodeGenerator {
|
||||
return (i >> 14) & 0x1ff;
|
||||
}
|
||||
|
||||
private byte[] generateBytecode(Prototype p, String classname, String filename)
|
||||
byte[] generateBytecode(Prototype p, String classname, String filename)
|
||||
throws IOException {
|
||||
|
||||
// compile our class next
|
||||
@@ -211,6 +210,7 @@ public class JavaBytecodeGenerator {
|
||||
k[i].getName(), k[i].getType()));
|
||||
break;
|
||||
case LuaValue.TSTRING:
|
||||
// TODO: quote non-utf8 byte sequences
|
||||
il.append(new PUSH(cp, ki.toString()));
|
||||
il.append(factory.createInvoke(STR_LUASTRING, "valueOf",
|
||||
TYPE_LUASTRING, new Type[] { Type.STRING },
|
||||
|
||||
@@ -35,7 +35,6 @@ import javax.tools.ToolProvider;
|
||||
import javax.tools.JavaCompiler.CompilationTask;
|
||||
|
||||
import org.luaj.vm2.LuaValue;
|
||||
import org.luaj.vm2.luajc.antlr.AntlrLuaJCompiler;
|
||||
|
||||
public class LuaJCompiler {
|
||||
|
||||
@@ -47,7 +46,8 @@ public class LuaJCompiler {
|
||||
}
|
||||
|
||||
public static String compileToJava( InputStream luaSource, String chunkName ) throws Exception {
|
||||
return AntlrLuaJCompiler.compile( luaSource, chunkName );
|
||||
// return AntlrLuaJCompiler.compile( luaSource, chunkName );
|
||||
throw new RuntimeException( "not supported" );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
# on the way to version 2.0
|
||||
version: 1.9.50
|
||||
version: 1.9.51
|
||||
|
||||
Reference in New Issue
Block a user