diff options
author | Rich Hickey <richhickey@gmail.com> | 2006-05-23 22:11:23 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2006-05-23 22:11:23 +0000 |
commit | 1cd2547d56cd7f56c1149f27bd77142e3fc40b50 (patch) | |
tree | 7e95e840d074a4ccd423fda3e028945b8a45b8f6 /src | |
parent | d65b16bde7ffb8caa020472cb7a88b03e128ee4f (diff) |
made Conses const, bindings Boxes
Diffstat (limited to 'src')
-rw-r--r-- | src/cli/runtime/Cons.cs | 4 | ||||
-rw-r--r-- | src/cli/runtime/Var.cs | 8 | ||||
-rw-r--r-- | src/org/clojure/runtime/Cons.java | 4 | ||||
-rw-r--r-- | src/org/clojure/runtime/Var.java | 34 |
4 files changed, 25 insertions, 25 deletions
diff --git a/src/cli/runtime/Cons.cs b/src/cli/runtime/Cons.cs index 331e3073..02e20202 100644 --- a/src/cli/runtime/Cons.cs +++ b/src/cli/runtime/Cons.cs @@ -18,8 +18,8 @@ namespace org.clojure.runtime public class Cons : AMap,Iter
{ -public Object first; -public Cons rest; +public readonly Object first; +public readonly Cons rest; public Cons(Object first, Cons rest) { diff --git a/src/cli/runtime/Var.cs b/src/cli/runtime/Var.cs index 2e4f666c..7354a5ed 100644 --- a/src/cli/runtime/Var.cs +++ b/src/cli/runtime/Var.cs @@ -14,12 +14,12 @@ namespace org.clojure.runtime {
public class Var : AFn
{
-public readonly Symbol sym;
public Namespace ns;
public Cons binding;
public IFn fn; //todo, bind to throw stub?
public IFn setfn;
internal Var(Symbol sym, Namespace ns)
{
if(sym.GetType() != typeof(Symbol))
throw new ArgumentException("Only simple symbols can be vars");
this.ns = ns;
this.sym = sym;
}
public String toString()
{
if(ns == null)
return "#:" + sym;
return ns.name + ":" + sym;
}
public Var bind(Object val)
{
if(binding == null)
binding = new Cons(val,null);
else
binding.first = val;
+public readonly Symbol sym;
public Namespace ns;
public Box binding;
public IFn fn; //todo, bind to throw stub?
public IFn setfn;
internal Var(Symbol sym, Namespace ns)
{
if(sym.GetType() != typeof(Symbol))
throw new ArgumentException("Only simple symbols can be vars");
this.ns = ns;
this.sym = sym;
}
public String toString()
{
if(ns == null)
return "#:" + sym;
return ns.name + ":" + sym;
}
public Var bind(Object val)
{
if(binding == null)
binding = new Box(val);
else
binding.val = val;
if (val is IFn)
this.fn = (IFn)val;
else
- this.fn = null; //todo, bind to throw stub?
return this;
}
public Cons getBinding(ThreadLocalData tld)
{
Cons b = getDynamicBinding(tld);
if(b != null)
return b;
return binding;
}
public Object getValue(ThreadLocalData tld)
{
Cons binding = getBinding(tld);
if(binding != null)
return binding.first;
throw new InvalidOperationException(this.toString() + " is unbound.");
}
public Object setValue(ThreadLocalData tld, Object val)
{
Cons b = getDynamicBinding(tld);
if(b != null)
return b.first = val;
//allow global set to create binding like this?
if(binding == null)
- throw new InvalidOperationException(this.toString() + " is unbound.");
if(val is IFn)
this.fn = (IFn) val;
else
this.fn = null; //todo, bind to throw stub?
return binding.first = val;
}
public Cons getDynamicBinding(ThreadLocalData tld)
{
return (Cons) tld.dynamicBindings[this];
}
public Cons pushDynamicBinding(ThreadLocalData tld, Object val)
{
Cons ret = new Cons(val, getDynamicBinding(tld));
tld.dynamicBindings[this] = ret;
return ret;
}
public Cons popDynamicBinding(ThreadLocalData tld)
{
Cons oldb = getDynamicBinding(tld).rest;
tld.dynamicBindings[this] = oldb;
- return oldb;
}
override public Object invoke(ThreadLocalData tld) /*throws Exception*/
{
return fn.invoke(tld);
}
override public Object invoke(ThreadLocalData tld, Object arg1) /*throws Exception*/
{
return fn.invoke(tld,arg1);
}
override public Object invoke(ThreadLocalData tld, Object arg1, Object arg2) /*throws Exception*/
{
return fn.invoke(tld,arg1,arg2);
}
override public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3) /*throws Exception*/
{
return fn.invoke(tld,arg1,arg2,arg3);
}
override public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4) /*throws Exception*/
{
return fn.invoke(tld,arg1,arg2,arg3,arg4);
}
override public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5)
/*throws Exception*/
{
return fn.invoke(tld,arg1,arg2,arg3,arg4,arg5);
}
override public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Cons args)
/*throws Exception*/
{
return fn.invoke(tld,arg1,arg2,arg3,arg4,arg5,args);
}
}
+ this.fn = null; //todo, bind to throw stub?
return this;
}
public Box getBinding(ThreadLocalData tld)
{
Box b = getDynamicBinding(tld);
if(b != null)
return b;
return binding;
}
public Object getValue(ThreadLocalData tld)
{
Box binding = getBinding(tld);
if(binding != null)
return binding.val;
throw new InvalidOperationException(this.toString() + " is unbound.");
}
public Object setValue(ThreadLocalData tld, Object val)
{
Box b = getDynamicBinding(tld);
if(b != null)
return b.val = val;
//allow global set to create binding like this?
if(binding == null)
+ throw new InvalidOperationException(this.toString() + " is unbound.");
if(val is IFn)
this.fn = (IFn) val;
else
this.fn = null; //todo, bind to throw stub?
return binding.val = val;
}
public Box getDynamicBinding(ThreadLocalData tld)
{
return (Box) tld.dynamicBindings[this];
}
public Box establishDynamicBinding(ThreadLocalData tld, Object val)
{
Box ret = getDynamicBinding(tld);
tld.dynamicBindings[this] = new Box(val);
return ret;
}
public void restoreDynamicBinding(ThreadLocalData tld, Box old)
{
tld.dynamicBindings[this] = old;
+ }
override public Object invoke(ThreadLocalData tld) /*throws Exception*/
{
return fn.invoke(tld);
}
override public Object invoke(ThreadLocalData tld, Object arg1) /*throws Exception*/
{
return fn.invoke(tld,arg1);
}
override public Object invoke(ThreadLocalData tld, Object arg1, Object arg2) /*throws Exception*/
{
return fn.invoke(tld,arg1,arg2);
}
override public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3) /*throws Exception*/
{
return fn.invoke(tld,arg1,arg2,arg3);
}
override public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4) /*throws Exception*/
{
return fn.invoke(tld,arg1,arg2,arg3,arg4);
}
override public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5)
/*throws Exception*/
{
return fn.invoke(tld,arg1,arg2,arg3,arg4,arg5);
}
override public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Cons args)
/*throws Exception*/
{
return fn.invoke(tld,arg1,arg2,arg3,arg4,arg5,args);
}
}
}
diff --git a/src/org/clojure/runtime/Cons.java b/src/org/clojure/runtime/Cons.java index 0d8de670..23278b6b 100644 --- a/src/org/clojure/runtime/Cons.java +++ b/src/org/clojure/runtime/Cons.java @@ -14,8 +14,8 @@ package org.clojure.runtime; public class Cons extends AMap implements Iter{ -public Object first; -public Cons rest; +public final Object first; +public final Cons rest; public Cons(Object first, Cons rest) { diff --git a/src/org/clojure/runtime/Var.java b/src/org/clojure/runtime/Var.java index fce5344f..9e6fe46f 100644 --- a/src/org/clojure/runtime/Var.java +++ b/src/org/clojure/runtime/Var.java @@ -16,7 +16,7 @@ public class Var extends AFn{ public final Symbol sym; public Namespace namespace; -public Cons binding; +public Box binding; public IFn fn; //todo, bind to throw stub? public IFn setfn; @@ -38,9 +38,9 @@ public String toString() public Var bind(Object val) { if(binding == null) - binding = new Cons(val,null); + binding = new Box(val); else - binding.first = val; + binding.val = val; if(val instanceof IFn) this.fn = (IFn) val; @@ -50,9 +50,9 @@ public Var bind(Object val) return this; } -public Cons getBinding(ThreadLocalData tld) +public Box getBinding(ThreadLocalData tld) { - Cons b = getDynamicBinding(tld); + Box b = getDynamicBinding(tld); if(b != null) return b; return binding; @@ -60,17 +60,17 @@ public Cons getBinding(ThreadLocalData tld) public Object getValue(ThreadLocalData tld) { - Cons binding = getBinding(tld); + Box binding = getBinding(tld); if(binding != null) - return binding.first; + return binding.val; throw new IllegalStateException(this.toString() + " is unbound."); } public Object setValue(ThreadLocalData tld, Object val) { - Cons b = getDynamicBinding(tld); + Box b = getDynamicBinding(tld); if(b != null) - return b.first = val; + return b.val = val; //allow global set to create binding like this? if(binding == null) throw new IllegalStateException(this.toString() + " is unbound."); @@ -80,24 +80,24 @@ public Object setValue(ThreadLocalData tld, Object val) else this.fn = null; //todo, bind to throw stub? - return binding.first = val; + return binding.val = val; } -final public Cons getDynamicBinding(ThreadLocalData tld) +final public Box getDynamicBinding(ThreadLocalData tld) { - return (Cons) tld.dynamicBindings.get(this); + return (Box) tld.dynamicBindings.get(this); } -final public Cons pushDynamicBinding(ThreadLocalData tld, Object val) +final public Box establishDynamicBinding(ThreadLocalData tld, Object val) { - Cons ret = new Cons(val, getDynamicBinding(tld)); - tld.dynamicBindings.put(this, ret); + Box ret = getDynamicBinding(tld); + tld.dynamicBindings.put(this, new Box(val)); return ret; } -final public Cons popDynamicBinding(ThreadLocalData tld) +final public void restoreDynamicBinding(ThreadLocalData tld, Box old) { - return (Cons) tld.dynamicBindings.put(this, getDynamicBinding(tld).rest); + tld.dynamicBindings.put(this, old); } public Object invoke(ThreadLocalData tld) throws Exception |