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 | |
parent | 97a189bf60c4f4186a51cff166bbaa4f157be3b1 (diff) |
changed Obj to interface to meta
-rw-r--r-- | src/cli/runtime/AFn.cs | 5 | ||||
-rw-r--r-- | src/cli/runtime/Obj.cs | 24 | ||||
-rw-r--r-- | src/cli/runtime/Symbol.cs | 6 | ||||
-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 |
6 files changed, 35 insertions, 37 deletions
diff --git a/src/cli/runtime/AFn.cs b/src/cli/runtime/AFn.cs index a14b7cb9..7ba53713 100644 --- a/src/cli/runtime/AFn.cs +++ b/src/cli/runtime/AFn.cs @@ -104,5 +104,10 @@ static public Object throwArity() { throw new Exception("Wrong number of args passed"); } + +public override Obj withMeta(IPersistentMap meta){
+ Obj ret = (Obj) MemberwiseClone();
+ ret._meta = meta;
+ return ret;
}
} }
\ No newline at end of file diff --git a/src/cli/runtime/Obj.cs b/src/cli/runtime/Obj.cs index d1d969c9..ebafc9c4 100644 --- a/src/cli/runtime/Obj.cs +++ b/src/cli/runtime/Obj.cs @@ -15,29 +15,17 @@ using System; namespace clojure.lang
{ -public class Obj{ +public abstract class Obj{ -volatile IPersistentMap _attrs = PersistentArrayIdentityMap.EMPTY;
+internal volatile IPersistentMap _meta = null;
-public Object addAttr( Object key, Object val)
- {
- _attrs = _attrs.add(key, val);
- return val;
- }
-public Object getAttr( Object key)
- {
- return _attrs.get(key);
- }
-
-public bool hasAttr( Object key){
- return _attrs.contains(key);
- }
+public IPersistentMap meta() {
+ return _meta;
+}
+abstract public Obj withMeta(IPersistentMap meta);
-public IPersistentMap attrs() {
- return _attrs;
-}
} diff --git a/src/cli/runtime/Symbol.cs b/src/cli/runtime/Symbol.cs index bd79336b..58bc30fe 100644 --- a/src/cli/runtime/Symbol.cs +++ b/src/cli/runtime/Symbol.cs @@ -75,5 +75,11 @@ public int CompareTo(object obj) }
#endregion
+
+override public Obj withMeta(IPersistentMap meta) {
+ this._meta = meta;
+ return this;
+}
+
} } 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; +} } |