rlm@10
|
1 /**
|
rlm@10
|
2 * Copyright (c) Rich Hickey. All rights reserved.
|
rlm@10
|
3 * The use and distribution terms for this software are covered by the
|
rlm@10
|
4 * Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
|
rlm@10
|
5 * which can be found in the file epl-v10.html at the root of this distribution.
|
rlm@10
|
6 * By using this software in any fashion, you are agreeing to be bound by
|
rlm@10
|
7 * the terms of this license.
|
rlm@10
|
8 * You must not remove this notice, or any other, from this software.
|
rlm@10
|
9 **/
|
rlm@10
|
10
|
rlm@10
|
11 /* rich Jul 31, 2007 */
|
rlm@10
|
12
|
rlm@10
|
13 package clojure.lang;
|
rlm@10
|
14
|
rlm@10
|
15 import java.util.concurrent.atomic.AtomicInteger;
|
rlm@10
|
16
|
rlm@10
|
17
|
rlm@10
|
18 public final class Var extends ARef implements IFn, IRef, Settable{
|
rlm@10
|
19
|
rlm@10
|
20
|
rlm@10
|
21 static class Frame{
|
rlm@10
|
22 //Var->Box
|
rlm@10
|
23 Associative bindings;
|
rlm@10
|
24 //Var->val
|
rlm@10
|
25 Associative frameBindings;
|
rlm@10
|
26 Frame prev;
|
rlm@10
|
27
|
rlm@10
|
28
|
rlm@10
|
29 public Frame(){
|
rlm@10
|
30 this(PersistentHashMap.EMPTY, PersistentHashMap.EMPTY, null);
|
rlm@10
|
31 }
|
rlm@10
|
32
|
rlm@10
|
33 public Frame(Associative frameBindings, Associative bindings, Frame prev){
|
rlm@10
|
34 this.frameBindings = frameBindings;
|
rlm@10
|
35 this.bindings = bindings;
|
rlm@10
|
36 this.prev = prev;
|
rlm@10
|
37 }
|
rlm@10
|
38 }
|
rlm@10
|
39
|
rlm@10
|
40 static ThreadLocal<Frame> dvals = new ThreadLocal<Frame>(){
|
rlm@10
|
41
|
rlm@10
|
42 protected Frame initialValue(){
|
rlm@10
|
43 return new Frame();
|
rlm@10
|
44 }
|
rlm@10
|
45 };
|
rlm@10
|
46
|
rlm@10
|
47 static Keyword privateKey = Keyword.intern(null, "private");
|
rlm@10
|
48 static IPersistentMap privateMeta = new PersistentArrayMap(new Object[]{privateKey, Boolean.TRUE});
|
rlm@10
|
49 static Keyword macroKey = Keyword.intern(null, "macro");
|
rlm@10
|
50 static Keyword nameKey = Keyword.intern(null, "name");
|
rlm@10
|
51 static Keyword nsKey = Keyword.intern(null, "ns");
|
rlm@10
|
52 //static Keyword tagKey = Keyword.intern(null, "tag");
|
rlm@10
|
53
|
rlm@10
|
54 volatile Object root;
|
rlm@10
|
55 transient final AtomicInteger count;
|
rlm@10
|
56 public final Symbol sym;
|
rlm@10
|
57 public final Namespace ns;
|
rlm@10
|
58
|
rlm@10
|
59 //IPersistentMap _meta;
|
rlm@10
|
60
|
rlm@10
|
61 public static Var intern(Namespace ns, Symbol sym, Object root){
|
rlm@10
|
62 return intern(ns, sym, root, true);
|
rlm@10
|
63 }
|
rlm@10
|
64
|
rlm@10
|
65 public static Var intern(Namespace ns, Symbol sym, Object root, boolean replaceRoot){
|
rlm@10
|
66 Var dvout = ns.intern(sym);
|
rlm@10
|
67 if(!dvout.hasRoot() || replaceRoot)
|
rlm@10
|
68 dvout.bindRoot(root);
|
rlm@10
|
69 return dvout;
|
rlm@10
|
70 }
|
rlm@10
|
71
|
rlm@10
|
72
|
rlm@10
|
73 public String toString(){
|
rlm@10
|
74 if(ns != null)
|
rlm@10
|
75 return "#'" + ns.name + "/" + sym;
|
rlm@10
|
76 return "#<Var: " + (sym != null ? sym.toString() : "--unnamed--") + ">";
|
rlm@10
|
77 }
|
rlm@10
|
78
|
rlm@10
|
79 public static Var find(Symbol nsQualifiedSym){
|
rlm@10
|
80 if(nsQualifiedSym.ns == null)
|
rlm@10
|
81 throw new IllegalArgumentException("Symbol must be namespace-qualified");
|
rlm@10
|
82 Namespace ns = Namespace.find(Symbol.create(nsQualifiedSym.ns));
|
rlm@10
|
83 if(ns == null)
|
rlm@10
|
84 throw new IllegalArgumentException("No such namespace: " + nsQualifiedSym.ns);
|
rlm@10
|
85 return ns.findInternedVar(Symbol.create(nsQualifiedSym.name));
|
rlm@10
|
86 }
|
rlm@10
|
87
|
rlm@10
|
88 public static Var intern(Symbol nsName, Symbol sym){
|
rlm@10
|
89 Namespace ns = Namespace.findOrCreate(nsName);
|
rlm@10
|
90 return intern(ns, sym);
|
rlm@10
|
91 }
|
rlm@10
|
92
|
rlm@10
|
93 public static Var internPrivate(String nsName, String sym){
|
rlm@10
|
94 Namespace ns = Namespace.findOrCreate(Symbol.intern(nsName));
|
rlm@10
|
95 Var ret = intern(ns, Symbol.intern(sym));
|
rlm@10
|
96 ret.setMeta(privateMeta);
|
rlm@10
|
97 return ret;
|
rlm@10
|
98 }
|
rlm@10
|
99
|
rlm@10
|
100 public static Var intern(Namespace ns, Symbol sym){
|
rlm@10
|
101 return ns.intern(sym);
|
rlm@10
|
102 }
|
rlm@10
|
103
|
rlm@10
|
104
|
rlm@10
|
105 public static Var create(){
|
rlm@10
|
106 return new Var(null, null);
|
rlm@10
|
107 }
|
rlm@10
|
108
|
rlm@10
|
109 public static Var create(Object root){
|
rlm@10
|
110 return new Var(null, null, root);
|
rlm@10
|
111 }
|
rlm@10
|
112
|
rlm@10
|
113 Var(Namespace ns, Symbol sym){
|
rlm@10
|
114 this.ns = ns;
|
rlm@10
|
115 this.sym = sym;
|
rlm@10
|
116 this.count = new AtomicInteger();
|
rlm@10
|
117 this.root = dvals; //use dvals as magic not-bound value
|
rlm@10
|
118 setMeta(PersistentHashMap.EMPTY);
|
rlm@10
|
119 }
|
rlm@10
|
120
|
rlm@10
|
121 Var(Namespace ns, Symbol sym, Object root){
|
rlm@10
|
122 this(ns, sym);
|
rlm@10
|
123 this.root = root;
|
rlm@10
|
124 }
|
rlm@10
|
125
|
rlm@10
|
126 public boolean isBound(){
|
rlm@10
|
127 return hasRoot() || (count.get() > 0 && dvals.get().bindings.containsKey(this));
|
rlm@10
|
128 }
|
rlm@10
|
129
|
rlm@10
|
130 final public Object get(){
|
rlm@10
|
131 if(count.get() == 0 && root != dvals)
|
rlm@10
|
132 return root;
|
rlm@10
|
133 return deref();
|
rlm@10
|
134 }
|
rlm@10
|
135
|
rlm@10
|
136 final public Object deref(){
|
rlm@10
|
137 Box b = getThreadBinding();
|
rlm@10
|
138 if(b != null)
|
rlm@10
|
139 return b.val;
|
rlm@10
|
140 if(hasRoot())
|
rlm@10
|
141 return root;
|
rlm@10
|
142 throw new IllegalStateException(String.format("Var %s/%s is unbound.", ns, sym));
|
rlm@10
|
143 }
|
rlm@10
|
144
|
rlm@10
|
145 public void setValidator(IFn vf){
|
rlm@10
|
146 if(hasRoot())
|
rlm@10
|
147 validate(vf, getRoot());
|
rlm@10
|
148 validator = vf;
|
rlm@10
|
149 }
|
rlm@10
|
150
|
rlm@10
|
151 public Object alter(IFn fn, ISeq args) throws Exception{
|
rlm@10
|
152 set(fn.applyTo(RT.cons(deref(), args)));
|
rlm@10
|
153 return this;
|
rlm@10
|
154 }
|
rlm@10
|
155
|
rlm@10
|
156 public Object set(Object val){
|
rlm@10
|
157 validate(getValidator(), val);
|
rlm@10
|
158 Box b = getThreadBinding();
|
rlm@10
|
159 if(b != null)
|
rlm@10
|
160 return (b.val = val);
|
rlm@10
|
161 //jury still out on this
|
rlm@10
|
162 // if(hasRoot())
|
rlm@10
|
163 // {
|
rlm@10
|
164 // bindRoot(val);
|
rlm@10
|
165 // return val;
|
rlm@10
|
166 // }
|
rlm@10
|
167 throw new IllegalStateException(String.format("Can't change/establish root binding of: %s with set", sym));
|
rlm@10
|
168 }
|
rlm@10
|
169
|
rlm@10
|
170 public Object doSet(Object val) throws Exception {
|
rlm@10
|
171 return set(val);
|
rlm@10
|
172 }
|
rlm@10
|
173
|
rlm@10
|
174 public Object doReset(Object val) throws Exception {
|
rlm@10
|
175 bindRoot(val);
|
rlm@10
|
176 return val;
|
rlm@10
|
177 }
|
rlm@10
|
178
|
rlm@10
|
179 public void setMeta(IPersistentMap m) {
|
rlm@10
|
180 //ensure these basis keys
|
rlm@10
|
181 resetMeta(m.assoc(nameKey, sym).assoc(nsKey, ns));
|
rlm@10
|
182 }
|
rlm@10
|
183
|
rlm@10
|
184 public void setMacro() {
|
rlm@10
|
185 try
|
rlm@10
|
186 {
|
rlm@10
|
187 alterMeta(assoc, RT.list(macroKey, RT.T));
|
rlm@10
|
188 }
|
rlm@10
|
189 catch (Exception e)
|
rlm@10
|
190 {
|
rlm@10
|
191 throw new RuntimeException(e);
|
rlm@10
|
192 }
|
rlm@10
|
193 }
|
rlm@10
|
194
|
rlm@10
|
195 public boolean isMacro(){
|
rlm@10
|
196 return RT.booleanCast(meta().valAt(macroKey));
|
rlm@10
|
197 }
|
rlm@10
|
198
|
rlm@10
|
199 //public void setExported(boolean state){
|
rlm@10
|
200 // _meta = _meta.assoc(privateKey, state);
|
rlm@10
|
201 //}
|
rlm@10
|
202
|
rlm@10
|
203 public boolean isPublic(){
|
rlm@10
|
204 return !RT.booleanCast(meta().valAt(privateKey));
|
rlm@10
|
205 }
|
rlm@10
|
206
|
rlm@10
|
207 public Object getRoot(){
|
rlm@10
|
208 if(hasRoot())
|
rlm@10
|
209 return root;
|
rlm@10
|
210 throw new IllegalStateException(String.format("Var %s/%s is unbound.", ns, sym));
|
rlm@10
|
211 }
|
rlm@10
|
212
|
rlm@10
|
213 public Object getRawRoot(){
|
rlm@10
|
214 return root;
|
rlm@10
|
215 }
|
rlm@10
|
216
|
rlm@10
|
217 public Object getTag(){
|
rlm@10
|
218 return meta().valAt(RT.TAG_KEY);
|
rlm@10
|
219 }
|
rlm@10
|
220
|
rlm@10
|
221 public void setTag(Symbol tag) {
|
rlm@10
|
222 try
|
rlm@10
|
223 {
|
rlm@10
|
224 alterMeta(assoc, RT.list(RT.TAG_KEY, tag));
|
rlm@10
|
225 }
|
rlm@10
|
226 catch (Exception e)
|
rlm@10
|
227 {
|
rlm@10
|
228 throw new RuntimeException(e);
|
rlm@10
|
229 }
|
rlm@10
|
230 }
|
rlm@10
|
231
|
rlm@10
|
232 final public boolean hasRoot(){
|
rlm@10
|
233 return root != dvals;
|
rlm@10
|
234 }
|
rlm@10
|
235
|
rlm@10
|
236 //binding root always clears macro flag
|
rlm@10
|
237 synchronized public void bindRoot(Object root){
|
rlm@10
|
238 validate(getValidator(), root);
|
rlm@10
|
239 Object oldroot = hasRoot()?this.root:null;
|
rlm@10
|
240 this.root = root;
|
rlm@10
|
241 try
|
rlm@10
|
242 {
|
rlm@10
|
243 alterMeta(dissoc, RT.list(macroKey));
|
rlm@10
|
244 }
|
rlm@10
|
245 catch (Exception e)
|
rlm@10
|
246 {
|
rlm@10
|
247 throw new RuntimeException(e);
|
rlm@10
|
248 }
|
rlm@10
|
249 notifyWatches(oldroot,this.root);
|
rlm@10
|
250 }
|
rlm@10
|
251
|
rlm@10
|
252 synchronized void swapRoot(Object root){
|
rlm@10
|
253 validate(getValidator(), root);
|
rlm@10
|
254 Object oldroot = hasRoot()?this.root:null;
|
rlm@10
|
255 this.root = root;
|
rlm@10
|
256 notifyWatches(oldroot,root);
|
rlm@10
|
257 }
|
rlm@10
|
258
|
rlm@10
|
259 synchronized public void unbindRoot(){
|
rlm@10
|
260 this.root = dvals;
|
rlm@10
|
261 }
|
rlm@10
|
262
|
rlm@10
|
263 synchronized public void commuteRoot(IFn fn) throws Exception{
|
rlm@10
|
264 Object newRoot = fn.invoke(root);
|
rlm@10
|
265 validate(getValidator(), newRoot);
|
rlm@10
|
266 Object oldroot = getRoot();
|
rlm@10
|
267 this.root = newRoot;
|
rlm@10
|
268 notifyWatches(oldroot,newRoot);
|
rlm@10
|
269 }
|
rlm@10
|
270
|
rlm@10
|
271 synchronized public Object alterRoot(IFn fn, ISeq args) throws Exception{
|
rlm@10
|
272 Object newRoot = fn.applyTo(RT.cons(root, args));
|
rlm@10
|
273 validate(getValidator(), newRoot);
|
rlm@10
|
274 Object oldroot = getRoot();
|
rlm@10
|
275 this.root = newRoot;
|
rlm@10
|
276 notifyWatches(oldroot,newRoot);
|
rlm@10
|
277 return newRoot;
|
rlm@10
|
278 }
|
rlm@10
|
279
|
rlm@10
|
280 public static void pushThreadBindings(Associative bindings){
|
rlm@10
|
281 Frame f = dvals.get();
|
rlm@10
|
282 Associative bmap = f.bindings;
|
rlm@10
|
283 for(ISeq bs = bindings.seq(); bs != null; bs = bs.next())
|
rlm@10
|
284 {
|
rlm@10
|
285 IMapEntry e = (IMapEntry) bs.first();
|
rlm@10
|
286 Var v = (Var) e.key();
|
rlm@10
|
287 v.validate(v.getValidator(), e.val());
|
rlm@10
|
288 v.count.incrementAndGet();
|
rlm@10
|
289 bmap = bmap.assoc(v, new Box(e.val()));
|
rlm@10
|
290 }
|
rlm@10
|
291 dvals.set(new Frame(bindings, bmap, f));
|
rlm@10
|
292 }
|
rlm@10
|
293
|
rlm@10
|
294 public static void popThreadBindings(){
|
rlm@10
|
295 Frame f = dvals.get();
|
rlm@10
|
296 if(f.prev == null)
|
rlm@10
|
297 throw new IllegalStateException("Pop without matching push");
|
rlm@10
|
298 for(ISeq bs = RT.keys(f.frameBindings); bs != null; bs = bs.next())
|
rlm@10
|
299 {
|
rlm@10
|
300 Var v = (Var) bs.first();
|
rlm@10
|
301 v.count.decrementAndGet();
|
rlm@10
|
302 }
|
rlm@10
|
303 dvals.set(f.prev);
|
rlm@10
|
304 }
|
rlm@10
|
305
|
rlm@10
|
306 public static void releaseThreadBindings(){
|
rlm@10
|
307 Frame f = dvals.get();
|
rlm@10
|
308 if(f.prev == null)
|
rlm@10
|
309 throw new IllegalStateException("Release without full unwind");
|
rlm@10
|
310 for(ISeq bs = RT.keys(f.bindings); bs != null; bs = bs.next())
|
rlm@10
|
311 {
|
rlm@10
|
312 Var v = (Var) bs.first();
|
rlm@10
|
313 v.count.decrementAndGet();
|
rlm@10
|
314 }
|
rlm@10
|
315 dvals.set(null);
|
rlm@10
|
316 }
|
rlm@10
|
317
|
rlm@10
|
318 public static Associative getThreadBindings(){
|
rlm@10
|
319 Frame f = dvals.get();
|
rlm@10
|
320 IPersistentMap ret = PersistentHashMap.EMPTY;
|
rlm@10
|
321 for(ISeq bs = f.bindings.seq(); bs != null; bs = bs.next())
|
rlm@10
|
322 {
|
rlm@10
|
323 IMapEntry e = (IMapEntry) bs.first();
|
rlm@10
|
324 Var v = (Var) e.key();
|
rlm@10
|
325 Box b = (Box) e.val();
|
rlm@10
|
326 ret = ret.assoc(v, b.val);
|
rlm@10
|
327 }
|
rlm@10
|
328 return ret;
|
rlm@10
|
329 }
|
rlm@10
|
330
|
rlm@10
|
331 public final Box getThreadBinding(){
|
rlm@10
|
332 if(count.get() > 0)
|
rlm@10
|
333 {
|
rlm@10
|
334 IMapEntry e = dvals.get().bindings.entryAt(this);
|
rlm@10
|
335 if(e != null)
|
rlm@10
|
336 return (Box) e.val();
|
rlm@10
|
337 }
|
rlm@10
|
338 return null;
|
rlm@10
|
339 }
|
rlm@10
|
340
|
rlm@10
|
341 final public IFn fn(){
|
rlm@10
|
342 return (IFn) deref();
|
rlm@10
|
343 }
|
rlm@10
|
344
|
rlm@10
|
345 public Object call() throws Exception{
|
rlm@10
|
346 return invoke();
|
rlm@10
|
347 }
|
rlm@10
|
348
|
rlm@10
|
349 public void run(){
|
rlm@10
|
350 try
|
rlm@10
|
351 {
|
rlm@10
|
352 invoke();
|
rlm@10
|
353 }
|
rlm@10
|
354 catch(Exception e)
|
rlm@10
|
355 {
|
rlm@10
|
356 throw new RuntimeException(e);
|
rlm@10
|
357 }
|
rlm@10
|
358 }
|
rlm@10
|
359
|
rlm@10
|
360 public Object invoke() throws Exception{
|
rlm@10
|
361 return fn().invoke();
|
rlm@10
|
362 }
|
rlm@10
|
363
|
rlm@10
|
364 public Object invoke(Object arg1) throws Exception{
|
rlm@10
|
365 return fn().invoke(arg1);
|
rlm@10
|
366 }
|
rlm@10
|
367
|
rlm@10
|
368 public Object invoke(Object arg1, Object arg2) throws Exception{
|
rlm@10
|
369 return fn().invoke(arg1, arg2);
|
rlm@10
|
370 }
|
rlm@10
|
371
|
rlm@10
|
372 public Object invoke(Object arg1, Object arg2, Object arg3) throws Exception{
|
rlm@10
|
373 return fn().invoke(arg1, arg2, arg3);
|
rlm@10
|
374 }
|
rlm@10
|
375
|
rlm@10
|
376 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4) throws Exception{
|
rlm@10
|
377 return fn().invoke(arg1, arg2, arg3, arg4);
|
rlm@10
|
378 }
|
rlm@10
|
379
|
rlm@10
|
380 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) throws Exception{
|
rlm@10
|
381 return fn().invoke(arg1, arg2, arg3, arg4, arg5);
|
rlm@10
|
382 }
|
rlm@10
|
383
|
rlm@10
|
384 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6) throws Exception{
|
rlm@10
|
385 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6);
|
rlm@10
|
386 }
|
rlm@10
|
387
|
rlm@10
|
388 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7)
|
rlm@10
|
389 throws Exception{
|
rlm@10
|
390 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
|
rlm@10
|
391 }
|
rlm@10
|
392
|
rlm@10
|
393 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
|
rlm@10
|
394 Object arg8) throws Exception{
|
rlm@10
|
395 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
|
rlm@10
|
396 }
|
rlm@10
|
397
|
rlm@10
|
398 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
|
rlm@10
|
399 Object arg8, Object arg9) throws Exception{
|
rlm@10
|
400 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
|
rlm@10
|
401 }
|
rlm@10
|
402
|
rlm@10
|
403 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
|
rlm@10
|
404 Object arg8, Object arg9, Object arg10) throws Exception{
|
rlm@10
|
405 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
|
rlm@10
|
406 }
|
rlm@10
|
407
|
rlm@10
|
408 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
|
rlm@10
|
409 Object arg8, Object arg9, Object arg10, Object arg11) throws Exception{
|
rlm@10
|
410 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11);
|
rlm@10
|
411 }
|
rlm@10
|
412
|
rlm@10
|
413 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
|
rlm@10
|
414 Object arg8, Object arg9, Object arg10, Object arg11, Object arg12) throws Exception{
|
rlm@10
|
415 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12);
|
rlm@10
|
416 }
|
rlm@10
|
417
|
rlm@10
|
418 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
|
rlm@10
|
419 Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13)
|
rlm@10
|
420 throws Exception{
|
rlm@10
|
421 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13);
|
rlm@10
|
422 }
|
rlm@10
|
423
|
rlm@10
|
424 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
|
rlm@10
|
425 Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14)
|
rlm@10
|
426 throws Exception{
|
rlm@10
|
427 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14);
|
rlm@10
|
428 }
|
rlm@10
|
429
|
rlm@10
|
430 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
|
rlm@10
|
431 Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
|
rlm@10
|
432 Object arg15) throws Exception{
|
rlm@10
|
433 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15);
|
rlm@10
|
434 }
|
rlm@10
|
435
|
rlm@10
|
436 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
|
rlm@10
|
437 Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
|
rlm@10
|
438 Object arg15, Object arg16) throws Exception{
|
rlm@10
|
439 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15,
|
rlm@10
|
440 arg16);
|
rlm@10
|
441 }
|
rlm@10
|
442
|
rlm@10
|
443 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
|
rlm@10
|
444 Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
|
rlm@10
|
445 Object arg15, Object arg16, Object arg17) throws Exception{
|
rlm@10
|
446 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15,
|
rlm@10
|
447 arg16, arg17);
|
rlm@10
|
448 }
|
rlm@10
|
449
|
rlm@10
|
450 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
|
rlm@10
|
451 Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
|
rlm@10
|
452 Object arg15, Object arg16, Object arg17, Object arg18) throws Exception{
|
rlm@10
|
453 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15,
|
rlm@10
|
454 arg16, arg17, arg18);
|
rlm@10
|
455 }
|
rlm@10
|
456
|
rlm@10
|
457 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
|
rlm@10
|
458 Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
|
rlm@10
|
459 Object arg15, Object arg16, Object arg17, Object arg18, Object arg19) throws Exception{
|
rlm@10
|
460 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15,
|
rlm@10
|
461 arg16, arg17, arg18, arg19);
|
rlm@10
|
462 }
|
rlm@10
|
463
|
rlm@10
|
464 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
|
rlm@10
|
465 Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
|
rlm@10
|
466 Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20)
|
rlm@10
|
467 throws Exception{
|
rlm@10
|
468 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15,
|
rlm@10
|
469 arg16, arg17, arg18, arg19, arg20);
|
rlm@10
|
470 }
|
rlm@10
|
471
|
rlm@10
|
472 public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
|
rlm@10
|
473 Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
|
rlm@10
|
474 Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20,
|
rlm@10
|
475 Object... args)
|
rlm@10
|
476 throws Exception{
|
rlm@10
|
477 return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15,
|
rlm@10
|
478 arg16, arg17, arg18, arg19, arg20, args);
|
rlm@10
|
479 }
|
rlm@10
|
480
|
rlm@10
|
481 public Object applyTo(ISeq arglist) throws Exception{
|
rlm@10
|
482 return AFn.applyToHelper(this, arglist);
|
rlm@10
|
483 }
|
rlm@10
|
484
|
rlm@10
|
485 static IFn assoc = new AFn(){
|
rlm@10
|
486 @Override
|
rlm@10
|
487 public Object invoke(Object m, Object k, Object v) throws Exception {
|
rlm@10
|
488 return RT.assoc(m, k, v);
|
rlm@10
|
489 }
|
rlm@10
|
490 };
|
rlm@10
|
491 static IFn dissoc = new AFn() {
|
rlm@10
|
492 @Override
|
rlm@10
|
493 public Object invoke(Object c, Object k) throws Exception {
|
rlm@10
|
494 return RT.dissoc(c, k);
|
rlm@10
|
495 }
|
rlm@10
|
496 };
|
rlm@10
|
497 }
|