summaryrefslogtreecommitdiff
path: root/src/org
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2006-05-23 21:01:35 +0000
committerRich Hickey <richhickey@gmail.com>2006-05-23 21:01:35 +0000
commit494fd9c97ce10cbe481e2b35eafa3c044ea093ac (patch)
tree145fb9c4abf556c1774807cd569ecaf26db145da /src/org
parent8800e169cf12df893fdd89c8e93edb36f8e5388e (diff)
derived Accessor from Symbol
Diffstat (limited to 'src/org')
-rw-r--r--src/org/clojure/runtime/Accessor.java22
-rw-r--r--src/org/clojure/runtime/Namespace.java15
-rw-r--r--src/org/clojure/runtime/Symbol.java2
3 files changed, 12 insertions, 27 deletions
diff --git a/src/org/clojure/runtime/Accessor.java b/src/org/clojure/runtime/Accessor.java
index 1471db18..c4d47c2d 100644
--- a/src/org/clojure/runtime/Accessor.java
+++ b/src/org/clojure/runtime/Accessor.java
@@ -12,24 +12,18 @@
package org.clojure.runtime;
-public class Accessor extends Indexer{
+public class Accessor extends Symbol implements IFn{
-public final String name;
-public Namespace namespace;
-Accessor(String name, Namespace ns)
+Accessor(String name)
{
- this.namespace = ns;
- this.name = name;
+ super(name);
}
-public String toString()
- {
- if(namespace == null)
- return "#:." + name;
- return namespace.name + ":." + name;
- }
+public Object invoke(ThreadLocalData tld) throws Exception {
+ return AFn.throwArity();
+}
/**
* Indexer implements IFn for attr access
* This single arg version is the getter
@@ -81,4 +75,8 @@ public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3,
return Reflector.invokeInstanceMember(name,arg1,arg2,arg3,arg4,arg5,args);
}
+public Object applyTo(ThreadLocalData tld, Cons arglist) throws Exception {
+ return AFn.applyToHelper(this, tld, arglist);
+}
+
}
diff --git a/src/org/clojure/runtime/Namespace.java b/src/org/clojure/runtime/Namespace.java
index 3493d9e0..22b1eb9d 100644
--- a/src/org/clojure/runtime/Namespace.java
+++ b/src/org/clojure/runtime/Namespace.java
@@ -24,7 +24,6 @@ static final public HashMap table = new HashMap();
/**
* String->Symbol
*/
-final public HashMap accessors = new HashMap();
final public HashMap vars = new HashMap();
final public String name;
@@ -55,10 +54,6 @@ static public Var internVar(String ns,String var)
return findOrCreate(ns).internVar(var);
}
-static public Accessor internAccessor(String ns,String name)
- {
- return findOrCreate(ns).internAccessor(name);
- }
public Var internVar(String name)
{
@@ -71,14 +66,4 @@ public Var internVar(String name)
}
}
-public Accessor internAccessor(String name)
- {
- synchronized(accessors)
- {
- Accessor acc = (Accessor) accessors.get(name);
- if(acc == null)
- accessors.put(name, acc = new Accessor(name, this));
- return acc;
- }
- }
}
diff --git a/src/org/clojure/runtime/Symbol.java b/src/org/clojure/runtime/Symbol.java
index dee1f7fe..84e41138 100644
--- a/src/org/clojure/runtime/Symbol.java
+++ b/src/org/clojure/runtime/Symbol.java
@@ -39,6 +39,8 @@ public static Symbol intern(String name)
{
if(name.charAt(0) == ':')
sym = new Keyword(name);
+ else if(name.charAt(0) == '.')
+ sym = new Accessor(name);
else
sym = new Symbol(name);
table.put(name, sym);