Fix midlet example including luajc-compiled scripts
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<project name="sample" default="build" basedir=".">
|
<project name="sample" default="all" basedir=".">
|
||||||
|
|
||||||
<!-- find wtk -->
|
<!-- find wtk -->
|
||||||
<property environment="env"/>
|
<property environment="env"/>
|
||||||
@@ -16,42 +16,75 @@
|
|||||||
<delete failonerror="false" dir="build"/>
|
<delete failonerror="false" dir="build"/>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="build">
|
<target name="dirs">
|
||||||
<mkdir dir="build"/>
|
<mkdir dir="build"/>
|
||||||
|
<mkdir dir="build/tool"/>
|
||||||
<mkdir dir="build/classes"/>
|
<mkdir dir="build/classes"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="tools" depends="dirs">
|
||||||
|
<ant antfile="build.xml" target="bcel-lib"/>
|
||||||
|
<javac destdir="build/tool" classpath="lib/bcel-5.2.jar">
|
||||||
|
<src path="src/core"/>
|
||||||
|
<src path="src/jse"/>
|
||||||
|
</javac>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="scripts" depends="tools">
|
||||||
|
<java classname="luajc" classpath="build/tool:lib/bcel-5.2.jar">
|
||||||
|
<arg line="-verbose"/>
|
||||||
|
<arg line="-srcdir examples/lua"/>
|
||||||
|
<arg line="-destdir build/classes"/>
|
||||||
|
<arg line="hello.lua"/>
|
||||||
|
</java>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="classes" depends="dirs">
|
||||||
<wtkbuild srcdir="src/core" destdir="build/classes" preverify="false"/>
|
<wtkbuild srcdir="src/core" destdir="build/classes" preverify="false"/>
|
||||||
<wtkbuild srcdir="src/jme" destdir="build/classes" preverify="false"/>
|
<wtkbuild srcdir="src/jme" destdir="build/classes" preverify="false"/>
|
||||||
<wtkbuild srcdir="examples/jme" destdir="build/classes" preverify="false"/>
|
<wtkbuild srcdir="examples/jme" destdir="build/classes" preverify="false"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="jad">
|
||||||
<wtkjad jadfile="build/sample.jad"
|
<wtkjad jadfile="build/sample.jad"
|
||||||
manifest="build/MANIFEST.MF"
|
manifest="build/MANIFEST.MF"
|
||||||
name="LuaJ Sample Midlet"
|
name="LuaJ Sample Midlet"
|
||||||
vendor="luaj.org"
|
vendor="luaj.org"
|
||||||
version="0.1" >
|
version="0.1" >
|
||||||
<midlet name="LuaJ Sample Midlet" class="SampleMIDlet"/>
|
<midlet name="LuaJ Sample Midlet" class="SampleMIDlet"/>
|
||||||
|
<attribute name="script" value="hello"/>
|
||||||
</wtkjad>
|
</wtkjad>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="jar" depends="scripts,classes,jad">
|
||||||
<wtkpackage jarfile="build/sample.jar"
|
<wtkpackage jarfile="build/sample.jar"
|
||||||
jadfile="build/sample.jad"
|
jadfile="build/sample.jad"
|
||||||
obfuscate="false"
|
obfuscate="false"
|
||||||
preverify="false"
|
preverify="false"
|
||||||
autoversion="true">
|
autoversion="true">
|
||||||
|
|
||||||
<fileset dir="build/classes"/>
|
<fileset dir="build/classes"/>
|
||||||
</wtkpackage>
|
</wtkpackage>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="obf" depends="jar">
|
||||||
<wtkobfuscate jarfile="build/sample.jar"
|
<wtkobfuscate jarfile="build/sample.jar"
|
||||||
jadfile="build/sample.jad">
|
jadfile="build/sample.jad">
|
||||||
|
<preserve class="hello"/>
|
||||||
<argument value="-printmapping build/mapping.txt"/>
|
<argument value="-printmapping build/mapping.txt"/>
|
||||||
<argument value="-repackageclasses"/>
|
<argument value="-repackageclasses"/>
|
||||||
<argument value='""'/>
|
<argument value='""'/>
|
||||||
</wtkobfuscate>
|
</wtkobfuscate>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="package" depends="jad,jar,obf">
|
||||||
<wtkpreverify jarfile="build/sample.jar"
|
<wtkpreverify jarfile="build/sample.jar"
|
||||||
jadfile="build/sample.jad"/>
|
jadfile="build/sample.jad"/>
|
||||||
|
|
||||||
<wtkrun jadfile="build/sample.jad" device="DefaultColorPhone"/>
|
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
|
<target name="run" depends="package">
|
||||||
|
<wtkrun jadfile="build/sample.jad" device="DefaultColorPhone"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="all" depends="package,run"/>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public class SampleMIDlet extends MIDlet {
|
|||||||
// create an environment to run in
|
// create an environment to run in
|
||||||
LuaC.install();
|
LuaC.install();
|
||||||
LuaValue _G = JmePlatform.standardGlobals();
|
LuaValue _G = JmePlatform.standardGlobals();
|
||||||
_G.get("dofile").call( LuaValue.valueOf(script) );
|
_G.get("require").call( LuaValue.valueOf(script) );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
|
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
|
||||||
|
|||||||
@@ -24,18 +24,16 @@ import java.io.FileInputStream;
|
|||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
import org.luaj.vm2.Lua;
|
import org.luaj.vm2.Lua;
|
||||||
import org.luaj.vm2.compiler.DumpState;
|
import org.luaj.vm2.compiler.DumpState;
|
||||||
import org.luaj.vm2.luajc.LuaJC;
|
import org.luaj.vm2.luajc.LuaJC;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compiler for lua files to compile lua sources into java sources.
|
* Compiler for lua files to compile lua sources or lua binaries into java classes.
|
||||||
*/
|
*/
|
||||||
public class luajc {
|
public class luajc {
|
||||||
private static final String version = Lua._VERSION + "Copyright (C) 2009 luaj.org";
|
private static final String version = Lua._VERSION + "Copyright (C) 2009 luaj.org";
|
||||||
@@ -44,9 +42,9 @@ public class luajc {
|
|||||||
"usage: java -cp luaj-jse.jar,bcel-5.2.jar luajc [options] [filenames].\n" +
|
"usage: java -cp luaj-jse.jar,bcel-5.2.jar luajc [options] [filenames].\n" +
|
||||||
"Available options are:\n" +
|
"Available options are:\n" +
|
||||||
" - process stdin\n" +
|
" - process stdin\n" +
|
||||||
" -o name output to file 'name' (default is \"luac.out\")\n" +
|
" -s source directory\n" +
|
||||||
" -p parse only\n" +
|
" -d destination directory\n" +
|
||||||
" -s strip debug information\n" +
|
" -n no debug information (strip debug)\n" +
|
||||||
" -e little endian format for numbers\n" +
|
" -e little endian format for numbers\n" +
|
||||||
" -i<n> number format 'n', (n=0,1 or 4, default="+DumpState.NUMBER_FORMAT_DEFAULT+")\n" +
|
" -i<n> number format 'n', (n=0,1 or 4, default="+DumpState.NUMBER_FORMAT_DEFAULT+")\n" +
|
||||||
" -v show version information\n" +
|
" -v show version information\n" +
|
||||||
@@ -57,13 +55,12 @@ public class luajc {
|
|||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String output = "luacj.out";
|
private String srcdir = null;
|
||||||
private boolean parseonly = false;
|
private String destdir = null;
|
||||||
private boolean stripdebug = false;
|
private boolean stripdebug = false;
|
||||||
private boolean littleendian = false;
|
private boolean littleendian = false;
|
||||||
private int numberformat = DumpState.NUMBER_FORMAT_DEFAULT;
|
private int numberformat = DumpState.NUMBER_FORMAT_DEFAULT;
|
||||||
private boolean versioninfo = false;
|
private boolean verbose = false;
|
||||||
private boolean processing = true;
|
|
||||||
|
|
||||||
public static void main( String[] args ) throws IOException {
|
public static void main( String[] args ) throws IOException {
|
||||||
new luajc( args );
|
new luajc( args );
|
||||||
@@ -73,23 +70,25 @@ public class luajc {
|
|||||||
|
|
||||||
// process args
|
// process args
|
||||||
try {
|
try {
|
||||||
|
Vector files = new Vector();
|
||||||
|
|
||||||
// get stateful args
|
// get stateful args
|
||||||
for ( int i=0; i<args.length; i++ ) {
|
for ( int i=0; i<args.length; i++ ) {
|
||||||
if ( ! processing || ! args[i].startsWith("-") ) {
|
if ( ! args[i].startsWith("-") ) {
|
||||||
// input file - defer to next stage
|
files.add(args[i]);
|
||||||
} else if ( args[i].length() <= 1 ) {
|
|
||||||
// input file - defer to next stage
|
|
||||||
} else {
|
} else {
|
||||||
switch ( args[i].charAt(1) ) {
|
switch ( args[i].charAt(1) ) {
|
||||||
case 'o':
|
case 's':
|
||||||
if ( ++i >= args.length )
|
if ( ++i >= args.length )
|
||||||
usageExit();
|
usageExit();
|
||||||
output = args[i];
|
srcdir = args[i];
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'd':
|
||||||
parseonly = true;
|
if ( ++i >= args.length )
|
||||||
|
usageExit();
|
||||||
|
destdir = args[i];
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 'n':
|
||||||
stripdebug = true;
|
stripdebug = true;
|
||||||
break;
|
break;
|
||||||
case 'e':
|
case 'e':
|
||||||
@@ -101,12 +100,7 @@ public class luajc {
|
|||||||
numberformat = Integer.parseInt(args[i].substring(2));
|
numberformat = Integer.parseInt(args[i].substring(2));
|
||||||
break;
|
break;
|
||||||
case 'v':
|
case 'v':
|
||||||
versioninfo = true;
|
verbose = true;
|
||||||
break;
|
|
||||||
case '-':
|
|
||||||
if ( args[i].length() > 2 )
|
|
||||||
usageExit();
|
|
||||||
processing = false;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
usageExit();
|
usageExit();
|
||||||
@@ -116,34 +110,28 @@ public class luajc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// echo version
|
// echo version
|
||||||
if ( versioninfo )
|
if ( verbose ) {
|
||||||
System.out.println(version);
|
System.out.println(version);
|
||||||
|
System.out.println("srcdir: "+srcdir);
|
||||||
// open output file
|
System.out.println("destdir: "+srcdir);
|
||||||
OutputStream fos = new FileOutputStream( output );
|
System.out.println("stripdebug: "+stripdebug);
|
||||||
|
System.out.println("littleendian: "+littleendian);
|
||||||
|
System.out.println("numberformat: "+numberformat);
|
||||||
|
System.out.println("files: "+files);
|
||||||
|
}
|
||||||
|
|
||||||
// process input files
|
// process input files
|
||||||
try {
|
for ( int i=0; i<files.size(); i++ ) {
|
||||||
processing = true;
|
String filename = (String) files.elementAt(i);
|
||||||
for ( int i=0; i<args.length; i++ ) {
|
int index = filename.lastIndexOf('.');
|
||||||
if ( ! processing || ! args[i].startsWith("-") ) {
|
if ( index < 0 )
|
||||||
String chunkname = args[i];
|
usageExit();
|
||||||
processScript( new FileInputStream(args[i]), chunkname, fos );
|
String chunkname = filename.substring(0,index);
|
||||||
} else if ( args[i].length() <= 1 ) {
|
String sourcepath = srcdir!=null? srcdir+"/"+filename: filename;
|
||||||
processScript( System.in, "stdin", fos );
|
if ( verbose )
|
||||||
} else {
|
System.out.println("filename="+filename+" chunkname="+filename+" sourcepath="+sourcepath);
|
||||||
switch ( args[i].charAt(1) ) {
|
InputStream is = new FileInputStream( sourcepath );
|
||||||
case 'o':
|
processScript( is, chunkname, filename );
|
||||||
++i;
|
|
||||||
break;
|
|
||||||
case '-':
|
|
||||||
processing = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
fos.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch ( IOException ioe ) {
|
} catch ( IOException ioe ) {
|
||||||
@@ -152,23 +140,25 @@ public class luajc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processScript( InputStream script, String chunkname, OutputStream out ) throws IOException {
|
private void processScript( InputStream script, String chunkname, String filename) throws IOException {
|
||||||
try {
|
try {
|
||||||
// create the chunk
|
// create the chunk
|
||||||
Hashtable t = LuaJC.getInstance().compileAll(script, chunkname, chunkname);
|
Hashtable t = LuaJC.getInstance().compileAll(script, chunkname, filename);
|
||||||
|
|
||||||
// write out the chunk
|
// write out the chunk
|
||||||
if (!parseonly) {
|
for ( Enumeration e = t.keys(); e.hasMoreElements(); ) {
|
||||||
for ( Enumeration e = t.keys(); e.hasMoreElements(); ) {
|
String key = (String) e.nextElement();
|
||||||
String key = (String) e.nextElement();
|
byte[] bytes = (byte[]) t.get(key);
|
||||||
byte[] bytes = (byte[]) t.get(key);
|
String destpath = (destdir!=null? destdir+"/": "") + key + ".class";
|
||||||
String filename = key + ".class";
|
if ( verbose )
|
||||||
if ( versioninfo )
|
System.out.println(
|
||||||
System.out.println(filename+": "+bytes.length+" bytes");
|
"chunk "+chunkname+
|
||||||
FileOutputStream fos = new FileOutputStream( filename );
|
" from "+filename+
|
||||||
fos.write( bytes );
|
" written to "+destpath
|
||||||
fos.close();
|
+" length="+bytes.length+" bytes");
|
||||||
}
|
FileOutputStream fos = new FileOutputStream( destpath );
|
||||||
|
fos.write( bytes );
|
||||||
|
fos.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch ( Throwable t ) {
|
} catch ( Throwable t ) {
|
||||||
|
|||||||
Reference in New Issue
Block a user