aboutsummaryrefslogtreecommitdiff
path: root/clojurescript/clojurescript-compiler.patch
blob: 532c2646be16e403df56e8ed6508e93b13cb43ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
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);
 }