summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cli/runtime/Accessor.cs15
-rw-r--r--src/cli/runtime/Namespace.cs8
-rw-r--r--src/cli/runtime/Symbol.cs5
-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
6 files changed, 28 insertions, 39 deletions
diff --git a/src/cli/runtime/Accessor.cs b/src/cli/runtime/Accessor.cs
index cf341d95..2a26ce32 100644
--- a/src/cli/runtime/Accessor.cs
+++ b/src/cli/runtime/Accessor.cs
@@ -12,8 +12,17 @@ using System;
namespace org.clojure.runtime
{
-public class Accessor :Indexer
+public class Accessor :Symbol, IFn
{
- public String name; public Namespace ns; internal Accessor(String name, Namespace ns) { this.ns = ns; this.name = name; } public String toString() { if(ns == null) return "#:." + name; return ns.name + ":." + name; } /** * Indexer implements IFn for attr access * This single arg version is the getter * @param tld * @param obj - must be AMap * @return the value of the attr or nil if not found * @throws Exception */ override public Object invoke(ThreadLocalData tld, Object obj) //throws Exception {
- return Reflector.invokeInstanceMember(name, obj); } /** * Indexer implements IFn for attr access * This two arg version is the setter * @param tld * @param obj - must be AMap * @param val * @return val * @throws Exception */ override public Object invoke(ThreadLocalData tld, Object obj, Object val) //throws Exception { return Reflector.invokeInstanceMember(name,obj,val); } override public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3) //throws Exception { return Reflector.invokeInstanceMember(name,arg1,arg2,arg3); } override public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4) //throws Exception { return Reflector.invokeInstanceMember(name,arg1,arg2,arg3,arg4); } override public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) //throws Exception { return Reflector.invokeInstanceMember(name,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 Reflector.invokeInstanceMember(name,arg1,arg2,arg3,arg4,arg5,args); } }
+ internal Accessor(String name) :base(name) { }
+
+public Object invoke(ThreadLocalData tld) /*throws Exception*/ {
+ return AFn.throwArity();
+ } /** * Indexer implements IFn for attr access * This single arg version is the getter * @param tld * @param obj - must be AMap * @return the value of the attr or nil if not found * @throws Exception */ public Object invoke(ThreadLocalData tld, Object obj) //throws Exception {
+ return Reflector.invokeInstanceMember(name, obj); } /** * Indexer implements IFn for attr access * This two arg version is the setter * @param tld * @param obj - must be AMap * @param val * @return val * @throws Exception */ public Object invoke(ThreadLocalData tld, Object obj, Object val) //throws Exception { return Reflector.invokeInstanceMember(name,obj,val); } public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3) //throws Exception { return Reflector.invokeInstanceMember(name,arg1,arg2,arg3); } public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4) //throws Exception { return Reflector.invokeInstanceMember(name,arg1,arg2,arg3,arg4); } public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) //throws Exception { return Reflector.invokeInstanceMember(name,arg1,arg2,arg3,arg4,arg5); } public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Cons args) //throws Exception { 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/cli/runtime/Namespace.cs b/src/cli/runtime/Namespace.cs
index 0e18d90f..3dd6eb9a 100644
--- a/src/cli/runtime/Namespace.cs
+++ b/src/cli/runtime/Namespace.cs
@@ -28,7 +28,6 @@ static public HybridDictionary table = new HybridDictionary();
* String->Symbol
*/
public HybridDictionary vars = new HybridDictionary();
-public HybridDictionary accessors = new HybridDictionary();
public String name;
@@ -59,13 +58,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) { lock(vars) { Var var = (Var) vars[name]; if(var == null) vars.Add(name,var = new Var(name, this)); return var; } }
-
-public Accessor internAccessor(String name) { lock(accessors) { Accessor acc = (Accessor) accessors[name]; if(acc == null) accessors.Add(name, acc = new Accessor(name, this)); return acc; } }
}
}
diff --git a/src/cli/runtime/Symbol.cs b/src/cli/runtime/Symbol.cs
index 4f532d14..af7465f7 100644
--- a/src/cli/runtime/Symbol.cs
+++ b/src/cli/runtime/Symbol.cs
@@ -30,7 +30,10 @@ public String toString()
return name;
}
-public static Symbol intern(String name) { lock(table) { Symbol sym = (Symbol) table[name]; if(sym == null) { if(name[0] == ':') sym = new Keyword(name); else sym = new Symbol(name); table.Add(name, sym); } return sym; } }
+public static Symbol intern(String name) { lock(table) { Symbol sym = (Symbol) table[name]; if(sym == null) { if(name[0] == ':') sym = new Keyword(name);
+ else if (name[0] == '.')
+ sym = new Accessor(name);
+ else sym = new Symbol(name); table.Add(name, sym); } return sym; } }
/**
* Used by Namespace.intern()
* @param name
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);