summaryrefslogtreecommitdiff
path: root/src/cli/runtime/Accessor.cs
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2006-04-21 20:21:59 +0000
committerRich Hickey <richhickey@gmail.com>2006-04-21 20:21:59 +0000
commita42245c3e9c1cf2c2e54dc31c7bffd91ae32dac8 (patch)
tree16e579a97f4a87a860782cf56c7e937bf2b2c931 /src/cli/runtime/Accessor.cs
parent165da010e2c81bab2128231384128b39b7c9a127 (diff)
revised symbol system
Diffstat (limited to 'src/cli/runtime/Accessor.cs')
-rw-r--r--src/cli/runtime/Accessor.cs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/cli/runtime/Accessor.cs b/src/cli/runtime/Accessor.cs
new file mode 100644
index 00000000..1c436334
--- /dev/null
+++ b/src/cli/runtime/Accessor.cs
@@ -0,0 +1,18 @@
+/**
+ * Copyright (c) Rich Hickey. All rights reserved.
+ * The use and distribution terms for this software are covered by the
+ * Common Public License 1.0 (http://opensource.org/licenses/cpl.php)
+ * which can be found in the file CPL.TXT at the root of this distribution.
+ * By using this software in any fashion, you are agreeing to be bound by
+ * the terms of this license.
+ * You must not remove this notice, or any other, from this software.
+ **/
+
+using System;
+
+namespace org.clojure.runtime
+{
+public class Accessor :Indexer
+ {
+ 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 { if(obj is AMap) return ((AMap)obj).get(this); 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 { if(obj is AMap) return ((AMap)obj).put(this,val); 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); } }
+}