diff options
author | Chouser <chouser@n01se.net> | 2008-09-12 04:08:22 +0000 |
---|---|---|
committer | Chouser <chouser@n01se.net> | 2008-09-12 04:08:22 +0000 |
commit | 5d0db072443c34f3dbd45ae077260e270f53a65a (patch) | |
tree | 12b0bb13e6195aca0939f5add197555217c14ed0 /clojurescript/clojurescript-compiler.patch | |
parent | 0b0f94bc8258a31490092928b547614dcf25f722 (diff) |
Initial preliminary checkin of ClojureScript -- very incomplete.
Diffstat (limited to 'clojurescript/clojurescript-compiler.patch')
-rw-r--r-- | clojurescript/clojurescript-compiler.patch | 434 |
1 files changed, 434 insertions, 0 deletions
diff --git a/clojurescript/clojurescript-compiler.patch b/clojurescript/clojurescript-compiler.patch new file mode 100644 index 00000000..532c2646 --- /dev/null +++ b/clojurescript/clojurescript-compiler.patch @@ -0,0 +1,434 @@ +diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java +index afb25de..fd3cc49 100644 +--- a/src/jvm/clojure/lang/Compiler.java ++++ b/src/jvm/clojure/lang/Compiler.java +@@ -195,7 +195,7 @@ static final public Var RET_LOCAL_NUM = Var.create(); + //DynamicClassLoader + static final public Var LOADER = Var.create(); + +-enum C{ ++public enum C{ + STATEMENT, //value ignored + EXPRESSION, //value required + RETURN, //tail position relative to enclosing recur frame +@@ -212,7 +212,7 @@ interface Expr{ + Class getJavaClass() throws Exception; + } + +-static abstract class UntypedExpr implements Expr{ ++public static abstract class UntypedExpr implements Expr{ + + public Class getJavaClass(){ + throw new IllegalArgumentException("Has no Java class"); +@@ -256,11 +256,11 @@ static Symbol resolveSymbol(Symbol sym){ + + } + +-static class DefExpr implements Expr{ +- final Var var; +- final Expr init; +- final Expr meta; +- final boolean initProvided; ++public static class DefExpr implements Expr{ ++ public final Var var; ++ public final Expr init; ++ public final Expr meta; ++ public final boolean initProvided; + final static Method bindRootMethod = Method.getMethod("void bindRoot(Object)"); + final static Method setTagMethod = Method.getMethod("void setTag(clojure.lang.Symbol)"); + final static Method setMetaMethod = Method.getMethod("void setMeta(clojure.lang.IPersistentMap)"); +@@ -341,10 +341,9 @@ static class DefExpr implements Expr{ + } + } + +-static class AssignExpr implements Expr{ +- final AssignableExpr target; +- final Expr val; +- ++public static class AssignExpr implements Expr{ ++ public final AssignableExpr target; ++ public final Expr val; + + public AssignExpr(AssignableExpr target, Expr val){ + this.target = target; +@@ -380,9 +379,9 @@ static class AssignExpr implements Expr{ + } + } + +-static class VarExpr implements Expr, AssignableExpr{ +- final Var var; +- final Object tag; ++public static class VarExpr implements Expr, AssignableExpr{ ++ public final Var var; ++ public final Object tag; + final static Method getMethod = Method.getMethod("Object get()"); + final static Method setMethod = Method.getMethod("Object set(Object)"); + +@@ -426,8 +425,8 @@ static class VarExpr implements Expr, AssignableExpr{ + } + } + +-static class TheVarExpr implements Expr{ +- final Var var; ++public static class TheVarExpr implements Expr{ ++ public final Var var; + + public TheVarExpr(Var var){ + this.var = var; +@@ -462,8 +461,8 @@ static class TheVarExpr implements Expr{ + } + } + +-static class KeywordExpr implements Expr{ +- final Keyword k; ++public static class KeywordExpr implements Expr{ ++ public final Keyword k; + + public KeywordExpr(Keyword k){ + this.k = k; +@@ -489,7 +488,7 @@ static class KeywordExpr implements Expr{ + } + } + +-static abstract class LiteralExpr implements Expr{ ++public static abstract class LiteralExpr implements Expr{ + abstract Object val(); + + public Object eval(){ +@@ -909,9 +908,9 @@ static class InstanceFieldExpr extends FieldExpr implements AssignableExpr{ + + static class StaticFieldExpr extends FieldExpr implements AssignableExpr{ + //final String className; +- final String fieldName; +- final Class c; +- final java.lang.reflect.Field field; ++ public final String fieldName; ++ public final Class c; ++ public final java.lang.reflect.Field field; + final static Method getStaticFieldMethod = Method.getMethod("Object getStaticField(String,String)"); + final static Method setStaticFieldMethod = Method.getMethod("Object setStaticField(String,String,Object)"); + final int line; +@@ -1171,11 +1170,11 @@ static class InstanceMethodExpr extends MethodExpr{ + + static class StaticMethodExpr extends MethodExpr{ + //final String className; +- final Class c; +- final String methodName; +- final IPersistentVector args; +- final int line; +- final java.lang.reflect.Method method; ++ public final Class c; ++ public final String methodName; ++ public final IPersistentVector args; ++ public final int line; ++ public final java.lang.reflect.Method method; + final static Method invokeStaticMethodMethod = + Method.getMethod("Object invokeStaticMethod(String,String,Object[])"); + +@@ -1284,8 +1283,8 @@ static class StaticMethodExpr extends MethodExpr{ + static class ConstantExpr extends LiteralExpr{ + //stuff quoted vals in classloader at compile time, pull out at runtime + //this won't work for static compilation... +- final Object v; +- final int id; ++ public final Object v; ++ public final int id; + + public ConstantExpr(Object v){ + this.v = v; +@@ -1404,7 +1403,7 @@ final static BooleanExpr TRUE_EXPR = new BooleanExpr(true); + final static BooleanExpr FALSE_EXPR = new BooleanExpr(false); + + static class StringExpr extends LiteralExpr{ +- final String str; ++ public final String str; + + public StringExpr(String str){ + this.str = str; +@@ -1575,12 +1574,12 @@ static class MonitorExitExpr extends UntypedExpr{ + + } + +-static class TryExpr implements Expr{ +- final Expr tryExpr; +- final Expr finallyExpr; +- final PersistentVector catchExprs; +- final int retLocal; +- final int finallyLocal; ++public static class TryExpr implements Expr{ ++ public final Expr tryExpr; ++ public final Expr finallyExpr; ++ public final PersistentVector catchExprs; ++ public final int retLocal; ++ public final int finallyLocal; + + static class CatchClause{ + //final String className; +@@ -1955,10 +1954,10 @@ static int getMatchingParams(String methodName, ArrayList<Class[]> paramlists, I + return matchIdx; + } + +-static class NewExpr implements Expr{ +- final IPersistentVector args; +- final Constructor ctor; +- final Class c; ++public static class NewExpr implements Expr{ ++ public final IPersistentVector args; ++ public final Constructor ctor; ++ public final Class c; + final static Method invokeConstructorMethod = + Method.getMethod("Object invokeConstructor(Class,Object[])"); + final static Method forNameMethod = Method.getMethod("Class classForName(String)"); +@@ -2170,9 +2169,9 @@ static class NewExpr implements Expr{ + // } + //} + +-static class MetaExpr implements Expr{ +- final Expr expr; +- final MapExpr meta; ++public static class MetaExpr implements Expr{ ++ public final Expr expr; ++ public final MapExpr meta; + final static Type IOBJ_TYPE = Type.getType(IObj.class); + final static Method withMetaMethod = Method.getMethod("clojure.lang.IObj withMeta(clojure.lang.IPersistentMap)"); + +@@ -2207,11 +2206,11 @@ static class MetaExpr implements Expr{ + } + } + +-static class IfExpr implements Expr{ +- final Expr testExpr; +- final Expr thenExpr; +- final Expr elseExpr; +- final int line; ++public static class IfExpr implements Expr{ ++ public final Expr testExpr; ++ public final Expr thenExpr; ++ public final Expr elseExpr; ++ public final int line; + + + public IfExpr(int line, Expr testExpr, Expr thenExpr, Expr elseExpr){ +@@ -2336,8 +2335,8 @@ static public String munge(String name){ + return sb.toString(); + } + +-static class EmptyExpr implements Expr{ +- final Object coll; ++public static class EmptyExpr implements Expr{ ++ public final Object coll; + final static Type HASHMAP_TYPE = Type.getType(PersistentHashMap.class); + final static Type HASHSET_TYPE = Type.getType(PersistentHashSet.class); + final static Type VECTOR_TYPE = Type.getType(PersistentVector.class); +@@ -2388,8 +2387,8 @@ static class EmptyExpr implements Expr{ + } + } + +-static class ListExpr implements Expr{ +- final IPersistentVector args; ++public static class ListExpr implements Expr{ ++ public final IPersistentVector args; + final static Method arrayToListMethod = Method.getMethod("clojure.lang.ISeq arrayToList(Object[])"); + + +@@ -2421,8 +2420,8 @@ static class ListExpr implements Expr{ + + } + +-static class MapExpr implements Expr{ +- final IPersistentVector keyvals; ++public static class MapExpr implements Expr{ ++ public final IPersistentVector keyvals; + final static Method mapMethod = Method.getMethod("clojure.lang.IPersistentMap map(Object[])"); + + +@@ -2470,8 +2469,8 @@ static class MapExpr implements Expr{ + } + } + +-static class SetExpr implements Expr{ +- final IPersistentVector keys; ++public static class SetExpr implements Expr{ ++ public final IPersistentVector keys; + final static Method setMethod = Method.getMethod("clojure.lang.IPersistentSet set(Object[])"); + + +@@ -2518,8 +2517,8 @@ static class SetExpr implements Expr{ + } + } + +-static class VectorExpr implements Expr{ +- final IPersistentVector args; ++public static class VectorExpr implements Expr{ ++ public final IPersistentVector args; + final static Method vectorMethod = Method.getMethod("clojure.lang.IPersistentVector vector(Object[])"); + + +@@ -2563,11 +2562,11 @@ static class VectorExpr implements Expr{ + + } + +-static class InvokeExpr implements Expr{ +- final Expr fexpr; +- final Object tag; +- final IPersistentVector args; +- final int line; ++public static class InvokeExpr implements Expr{ ++ public final Expr fexpr; ++ public final Object tag; ++ public final IPersistentVector args; ++ public final int line; + + public InvokeExpr(int line, Symbol tag, Expr fexpr, IPersistentVector args){ + this.fexpr = fexpr; +@@ -2661,7 +2660,7 @@ static public class FnExpr implements Expr{ + String internalName; + String thisName; + Type fntype; +- final Object tag; ++ public final Object tag; + //localbinding->itself + IPersistentMap closes = PersistentHashMap.EMPTY; + //Keyword->KeywordExpr +@@ -2671,6 +2670,20 @@ static public class FnExpr implements Expr{ + int line; + PersistentVector constants; + int constantsID; ++ public final IPersistentCollection methods() { return methods;} ++ public final FnMethod variadicMethod() { return variadicMethod;} ++ public final String name() { return name;} ++ public final String simpleName() { return simpleName;} ++ public final String internalName() { return internalName;} ++ public final String thisName() { return thisName;} ++ public final Type fntype() { return fntype;} ++ public final IPersistentMap closes() { return closes;} ++ public final IPersistentMap keywords() { return keywords;} ++ public final IPersistentMap vars() { return vars;} ++ public final Class compiledClass() { return compiledClass;} ++ public final int line() { return line;} ++ public final PersistentVector constants() { return constants;} ++ public final int constantsID() { return constantsID;} + + final static Method kwintern = Method.getMethod("clojure.lang.Keyword intern(String, String)"); + final static Method symcreate = Method.getMethod("clojure.lang.Symbol create(String)"); +@@ -3098,10 +3111,10 @@ enum PSTATE{ + } + + +-static class FnMethod{ ++public static class FnMethod{ + //when closures are defined inside other closures, + //the closed over locals need to be propagated to the enclosing fn +- final FnMethod parent; ++ public final FnMethod parent; + //localbinding->localbinding + IPersistentMap locals = null; + //localbinding->localbinding +@@ -3113,6 +3126,14 @@ static class FnMethod{ + int maxLocal = 0; + int line; + PersistentHashSet localsUsedInCatchFinally = PersistentHashSet.EMPTY; ++ public final IPersistentMap locals() { return locals;} ++ public final PersistentVector reqParms() { return reqParms;} ++ public final LocalBinding restParm() { return restParm;} ++ public final Expr body() { return body;} ++ public final FnExpr fn() { return fn;} ++ public final PersistentVector argLocals() { return argLocals;} ++ public final int maxLocal() { return maxLocal;} ++ public final int line() { return line;} + + public FnMethod(FnExpr fn, FnMethod parent){ + this.parent = parent; +@@ -3252,12 +3273,12 @@ static class FnMethod{ + } + } + +-static class LocalBinding{ +- final Symbol sym; +- final Symbol tag; +- final Expr init; +- final int idx; +- final String name; ++public static class LocalBinding{ ++ public final Symbol sym; ++ public final Symbol tag; ++ public final Expr init; ++ public final int idx; ++ public final String name; + + public LocalBinding(int num, Symbol sym, Symbol tag, Expr init) throws Exception{ + if(maybePrimitiveType(init) != null && tag != null) +@@ -3288,9 +3309,9 @@ static class LocalBinding{ + } + } + +-static class LocalBindingExpr implements Expr, MaybePrimitiveExpr{ +- final LocalBinding b; +- final Symbol tag; ++public static class LocalBindingExpr implements Expr, MaybePrimitiveExpr{ ++ public final LocalBinding b; ++ public final Symbol tag; + + public LocalBindingExpr(LocalBinding b, Symbol tag) throws Exception{ + if(b.getPrimitiveType() != null && tag != null) +@@ -3325,8 +3346,9 @@ static class LocalBindingExpr implements Expr, MaybePrimitiveExpr{ + + } + +-static class BodyExpr implements Expr{ ++public static class BodyExpr implements Expr{ + PersistentVector exprs; ++ public final PersistentVector exprs() { return exprs;} + + public BodyExpr(PersistentVector exprs){ + this.exprs = exprs; +@@ -3386,9 +3408,11 @@ static class BodyExpr implements Expr{ + } + } + +-static class BindingInit{ ++public static class BindingInit{ + LocalBinding binding; + Expr init; ++ public final LocalBinding binding() { return binding;} ++ public final Expr init() { return init;} + + public BindingInit(LocalBinding binding, Expr init){ + this.binding = binding; +@@ -3396,10 +3420,10 @@ static class BindingInit{ + } + } + +-static class LetExpr implements Expr{ +- final PersistentVector bindingInits; +- final Expr body; +- final boolean isLoop; ++public static class LetExpr implements Expr{ ++ public final PersistentVector bindingInits; ++ public final Expr body; ++ public final boolean isLoop; + + public LetExpr(PersistentVector bindingInits, Expr body, boolean isLoop){ + this.bindingInits = bindingInits; +@@ -3522,9 +3546,9 @@ static class LetExpr implements Expr{ + } + } + +-static class RecurExpr implements Expr{ +- final IPersistentVector args; +- final IPersistentVector loopLocals; ++public static class RecurExpr implements Expr{ ++ public final IPersistentVector args; ++ public final IPersistentVector loopLocals; + + public RecurExpr(IPersistentVector loopLocals, IPersistentVector args){ + this.loopLocals = loopLocals; +@@ -3626,7 +3650,7 @@ private static int getAndIncLocalNum(){ + return num; + } + +-private static Expr analyze(C context, Object form) throws Exception{ ++public static Expr analyze(C context, Object form) throws Exception{ + return analyze(context, form, null); + } + |