From ddd0385f6590f72996e6089a62da1d0324b459f9 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Sat, 31 Jul 2010 14:43:16 +0000 Subject: [PATCH] De-genericize sources to build jse using class file format 1.3 --- build.xml | 75 ++++++----- src/jse/org/luaj/vm2/ast/NameResolver.java | 14 +- src/jse/org/luaj/vm2/ast/NameScope.java | 2 +- src/jse/org/luaj/vm2/ast/Stat.java | 10 +- src/jse/org/luaj/vm2/ast/Visitor.java | 28 ++-- src/jse/org/luaj/vm2/lib/jse/LuajavaLib.java | 8 +- .../org/luaj/vm2/lua2java/JavaCodeGen.java | 125 +++++++++--------- src/jse/org/luaj/vm2/lua2java/JavaScope.java | 12 +- src/jse/org/luaj/vm2/lua2java/Lua2Java.java | 8 +- src/jse/org/luaj/vm2/luajc/JavaBuilder.java | 11 +- src/jse/org/luaj/vm2/luajc/JavaLoader.java | 2 +- 11 files changed, 157 insertions(+), 138 deletions(-) diff --git a/build.xml b/build.xml index bff8c1d2..b88fe22a 100644 --- a/build.xml +++ b/build.xml @@ -61,51 +61,64 @@ - - + + + + - - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + srcdir="build/jme/src"/> + + includes="**/script/*,**/Lua2Java*"/> - - - - + - - - - - - - - + diff --git a/src/jse/org/luaj/vm2/ast/NameResolver.java b/src/jse/org/luaj/vm2/ast/NameResolver.java index fb19a05c..73ea1ede 100644 --- a/src/jse/org/luaj/vm2/ast/NameResolver.java +++ b/src/jse/org/luaj/vm2/ast/NameResolver.java @@ -81,8 +81,10 @@ public class NameResolver extends Visitor { public void visit(Assign stat) { super.visit(stat); - for ( VarExp v : stat.vars ) + for ( int i=0, n=stat.vars.size(); i0 && m0 && m names) { - for ( Name n : names ) - defineLocalVar(n); + for ( int i=0, n=names.size(); i vars, List exps) { + public static Stat assignment(List vars, List exps) { return new Assign(vars,exps); } @@ -82,10 +82,10 @@ public class Stat { } public static class Assign extends Stat { - public final List vars; + public final List vars; public final List exps; - public Assign(List vars, List exps) { + public Assign(List vars, List exps) { this.vars = vars; this.exps = exps; } @@ -138,7 +138,7 @@ public class Stat { public int nreturns() { int n = values!=null? values.size(): 0; - if ( n>0 && values.get(n-1).isvarargexp() ) + if ( n>0 && ((Exp)values.get(n-1)).isvarargexp() ) n = -1; return n; } diff --git a/src/jse/org/luaj/vm2/ast/Visitor.java b/src/jse/org/luaj/vm2/ast/Visitor.java index adf8a962..8687a624 100644 --- a/src/jse/org/luaj/vm2/ast/Visitor.java +++ b/src/jse/org/luaj/vm2/ast/Visitor.java @@ -23,6 +23,8 @@ package org.luaj.vm2.ast; import java.util.List; +import org.luaj.vm2.ast.Exp.VarExp; + abstract public class Visitor { public void visit(Chunk chunk) { chunk.block.accept(this); @@ -30,8 +32,8 @@ abstract public class Visitor { public void visit(Block block) { visit(block.scope); if ( block.stats != null ) - for ( Stat s: block.stats ) - s.accept(this); + for ( int i=0, n=block.stats.size(); i vars) { + public void visitVars(List vars) { if ( vars != null ) - for ( Exp.VarExp v: vars ) - v.accept(this); + for ( int i=0, n=vars.size(); i exps) { if ( exps != null ) - for ( Exp e: exps ) - e.accept(this); + for ( int i=0, n=exps.size(); i names) { if ( names != null ) - for ( Name n: names ) - visit(n); + for ( int i=0, n=names.size(); i values = stat.values; int n = names.size(); int m = values != null? values.size(): 0; - boolean isvarlist = m>0 && m0 && m3? "varargsOf(new LuaValue[] {":"varargsOf(" ); for ( int i=1; i3 ) out( "}," ); - out( evalVarargs(values.get(n-1))+")" ); + out( evalVarargs((Exp) values.get(n-1))+")" ); return popWriter(x); } } @@ -404,14 +404,14 @@ public class JavaCodeGen { public String evalLuaValue(Exp exp) { Writer x = pushWriter(); - callerExpects.put(exp,1); + callerExpects.put(exp,Integer.valueOf(1)); exp.accept(this); return popWriter(x); } public String evalVarargs(Exp exp) { Writer x = pushWriter(); - callerExpects.put(exp,-1); + callerExpects.put(exp,Integer.valueOf(-1)); exp.accept(this); return popWriter(x); } @@ -634,7 +634,7 @@ public class JavaCodeGen { private String evalLuaStringConstant(LuaString str) { if ( stringConstants.containsKey(str) ) - return stringConstants.get(str); + return (String) stringConstants.get(str); String declvalue = quotedStringInitializer(str); String javaname = javascope.createConstantName(str.tojstring()); constantDeclarations.add( "static final LuaValue "+javaname+" = valueOf("+declvalue+");" ); @@ -646,12 +646,12 @@ public class JavaCodeGen { if ( value == 0 ) return "ZERO"; if ( value == -1 ) return "MINUSONE"; if ( value == 1 ) return "ONE"; - if ( numberConstants.containsKey(value) ) - return numberConstants.get(value); + if ( numberConstants.containsKey(Double.valueOf(value)) ) + return (String) numberConstants.get(Double.valueOf(value)); String declvalue = evalNumberLiteral(value); String javaname = javascope.createConstantName(declvalue); constantDeclarations.add( "static final LuaValue "+javaname+" = valueOf("+declvalue+");" ); - numberConstants.put(value,javaname); + numberConstants.put(Double.valueOf(value),javaname); return javaname; } @@ -685,14 +685,14 @@ public class JavaCodeGen { } public void visit(VarargsExp exp) { - int c = callerExpects.containsKey(exp)? callerExpects.get(exp): 0; + int c = callerExpects.containsKey(exp)? ((Integer)callerExpects.get(exp)).intValue(): 0; out( c==1? "$arg.arg1()": "$arg" ); } public void visit(MethodCall exp) { List e = exp.args.exps; int n = e != null? e.size(): 0; - int c = callerExpects.containsKey(exp)? callerExpects.get(exp): 0; + int c = callerExpects.containsKey(exp)? ((Integer)callerExpects.get(exp)).intValue(): 0; if ( c == -1 ) n = -1; out( evalLuaValue(exp.lhs) ); @@ -717,9 +717,9 @@ public class JavaCodeGen { public void visit(FuncCall exp) { List e = exp.args.exps; int n = e != null? e.size(): 0; - if ( n > 0 && e.get(n-1).isvarargexp() ) + if ( n > 0 && ((Exp)e.get(n-1)).isvarargexp() ) n = -1; - int c = callerExpects.containsKey(exp)? callerExpects.get(exp): 0; + int c = callerExpects.containsKey(exp)? ((Integer)callerExpects.get(exp)).intValue(): 0; if ( c == -1 ) n = -1; out( evalLuaValue(exp.lhs) ); @@ -754,8 +754,8 @@ public class JavaCodeGen { int n = args.exps.size(); if ( n > 0 ) { for ( int i=1; i0? "$arg.arg("+(i+1)+")": "$arg.arg1()"; singleLocalDeclareAssign( name, value ); } @@ -849,8 +849,8 @@ public class JavaCodeGen { } else { singleReference( stat.name.name ); for ( int i=0; i keyed = new ArrayList(); List list = new ArrayList(); for ( int i=0; i dest = Arrays.asList(new File[] { new File(binDirRoot) }); StandardJavaFileManager fm = compiler.getStandardFileManager( null, null, null); - fm.setLocation(StandardLocation.CLASS_OUTPUT, dest); + fm.setLocation(StandardLocation.CLASS_OUTPUT, Arrays.asList(new File[] { new File(binDirRoot) })); // compile the file - Iterable compilationUnits = fm.getJavaFileObjects(source); - CompilationTask task = compiler.getTask(null, fm, null, null, null, compilationUnits); - boolean success = task.call(); + CompilationTask task = compiler.getTask(null, fm, null, null, null, fm.getJavaFileObjects(source)); + boolean success = task.call().booleanValue(); // instantiate, config and return if (success) { diff --git a/src/jse/org/luaj/vm2/luajc/JavaBuilder.java b/src/jse/org/luaj/vm2/luajc/JavaBuilder.java index 1506e315..4ddc6414 100644 --- a/src/jse/org/luaj/vm2/luajc/JavaBuilder.java +++ b/src/jse/org/luaj/vm2/luajc/JavaBuilder.java @@ -247,7 +247,7 @@ public class JavaBuilder { } else { // fixed arg function between 0 and 3 arguments for ( slot=0; slot plainSlotVars = new HashMap(); private Map upvalueSlotVars = new HashMap(); private int findSlot( int slot, Map map, String prefix, Type type ) { - if ( map.containsKey(slot) ) - return map.get(slot); + Integer islot = Integer.valueOf(slot); + if ( map.containsKey(islot) ) + return ((Integer)map.get(islot)).intValue(); String name = prefix+slot; LocalVariableGen local = mg.addLocalVariable(name, type, null, null); int index = local.getIndex(); - map.put(slot, index); + map.put(islot, Integer.valueOf(index)); return index; } private int findSlotIndex( int slot, boolean isupvalue ) { @@ -620,7 +621,7 @@ public class JavaBuilder { break; case LuaValue.TNUMBER: case LuaValue.TSTRING: - String name = constants.get(value); + String name = (String) constants.get(value); if ( name == null ) { name = value.type() == LuaValue.TNUMBER? value.isinttype()? diff --git a/src/jse/org/luaj/vm2/luajc/JavaLoader.java b/src/jse/org/luaj/vm2/luajc/JavaLoader.java index 29edbdd5..2de6053b 100644 --- a/src/jse/org/luaj/vm2/luajc/JavaLoader.java +++ b/src/jse/org/luaj/vm2/luajc/JavaLoader.java @@ -67,7 +67,7 @@ public class JavaLoader extends ClassLoader { } public Class findClass(String classname) throws ClassNotFoundException { - byte[] bytes = unloaded.get(classname); + byte[] bytes = (byte[]) unloaded.get(classname); if ( bytes != null ) return defineClass(classname, bytes, 0, bytes.length); return super.findClass(classname);