diff options
author | Rich Hickey <richhickey@gmail.com> | 2006-07-28 16:23:35 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2006-07-28 16:23:35 +0000 |
commit | 11a4dd18b1a472ca65870293efc5efb9759255c9 (patch) | |
tree | 6ebca797e1c2a5cc75b903b63dac086f6fb29d6f /src/jvm/clojure | |
parent | 97a189bf60c4f4186a51cff166bbaa4f157be3b1 (diff) |
changed Obj to interface to meta
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r-- | src/jvm/clojure/lang/AFn.java | 8 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Obj.java | 24 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Symbol.java | 5 |
3 files changed, 18 insertions, 19 deletions
diff --git a/src/jvm/clojure/lang/AFn.java b/src/jvm/clojure/lang/AFn.java index cac16066..ec54cc67 100644 --- a/src/jvm/clojure/lang/AFn.java +++ b/src/jvm/clojure/lang/AFn.java @@ -12,7 +12,7 @@ package clojure.lang; -public class AFn extends Obj implements IFn{ +public class AFn extends Obj implements IFn, Cloneable{ public Object invoke() throws Exception { @@ -98,4 +98,10 @@ public static Object throwArity() { throw new IllegalArgumentException("Wrong number of args passed"); } + +public Obj withMeta(IPersistentMap meta) throws Exception { + Obj ret = (Obj) clone(); + ret._meta = meta; + return ret; +} } diff --git a/src/jvm/clojure/lang/Obj.java b/src/jvm/clojure/lang/Obj.java index f0f81976..37af46be 100644 --- a/src/jvm/clojure/lang/Obj.java +++ b/src/jvm/clojure/lang/Obj.java @@ -12,27 +12,15 @@ package clojure.lang; -public class Obj { +public abstract class Obj { -volatile IPersistentMap _attrs = PersistentArrayIdentityMap.EMPTY; +volatile IPersistentMap _meta = null; -public Object addAttr( Object key, Object val) throws Exception { - _attrs = _attrs.add(key, val); - return val; - } -public Object getAttr( Object key) - { - return _attrs.get(key); - } - -public boolean hasAttr( Object key){ - return _attrs.contains(key); - } - - -public IPersistentMap attrs() { - return _attrs; +public IPersistentMap meta() { + return _meta; } +abstract public Obj withMeta(IPersistentMap meta) throws Exception; + } diff --git a/src/jvm/clojure/lang/Symbol.java b/src/jvm/clojure/lang/Symbol.java index cd460c87..4351d5bb 100644 --- a/src/jvm/clojure/lang/Symbol.java +++ b/src/jvm/clojure/lang/Symbol.java @@ -83,4 +83,9 @@ Symbol(String name) public int compareTo(Object o) { return hashCode() - ((Symbol)o).hashCode(); } + +public Obj withMeta(IPersistentMap meta) throws Exception { + this._meta = meta; + return this; +} } |