summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2006-07-28 16:23:35 +0000
committerRich Hickey <richhickey@gmail.com>2006-07-28 16:23:35 +0000
commit11a4dd18b1a472ca65870293efc5efb9759255c9 (patch)
tree6ebca797e1c2a5cc75b903b63dac086f6fb29d6f
parent97a189bf60c4f4186a51cff166bbaa4f157be3b1 (diff)
changed Obj to interface to meta
-rw-r--r--src/cli/runtime/AFn.cs5
-rw-r--r--src/cli/runtime/Obj.cs24
-rw-r--r--src/cli/runtime/Symbol.cs6
-rw-r--r--src/jvm/clojure/lang/AFn.java8
-rw-r--r--src/jvm/clojure/lang/Obj.java24
-rw-r--r--src/jvm/clojure/lang/Symbol.java5
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;
+}
}