diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cli/runtime/Accessor.cs | 7 | ||||
-rw-r--r-- | src/lisp/clojure.lisp | 44 | ||||
-rw-r--r-- | src/org/clojure/runtime/Accessor.java | 17 |
3 files changed, 23 insertions, 45 deletions
diff --git a/src/cli/runtime/Accessor.cs b/src/cli/runtime/Accessor.cs index 2a26ce32..b63e5e7c 100644 --- a/src/cli/runtime/Accessor.cs +++ b/src/cli/runtime/Accessor.cs @@ -14,12 +14,13 @@ namespace org.clojure.runtime {
public class Accessor :Symbol, IFn
{
-
internal Accessor(String name) :base(name)
{
}
+ String memberName;
internal Accessor(String name) :base(name)
{
memberName = name.Substring(1);
}
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);
}
+ }
/**
* 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(memberName, 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(memberName,obj,val);
}
public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3) //throws Exception
{
return Reflector.invokeInstanceMember(memberName,arg1,arg2,arg3);
}
public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4) //throws Exception
{
return Reflector.invokeInstanceMember(memberName,arg1,arg2,arg3,arg4);
}
public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5)
//throws Exception
{
return Reflector.invokeInstanceMember(memberName,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(memberName,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/lisp/clojure.lisp b/src/lisp/clojure.lisp index 10bbd898..d779f0eb 100644 --- a/src/lisp/clojure.lisp +++ b/src/lisp/clojure.lisp @@ -49,6 +49,7 @@ (defvar *reference-var*) #| +;build the library (let ((*clojure-source-path* #p"/dev/clojure/src/lisp/") (*clojure-target-path* #p"/dev/clojure/classes/")) (compile-to :jvm "org.clojure" "Clojure" @@ -57,30 +58,7 @@ (*clojure-target-path* #p"/dev/clojure/classes/test/")) (compile-to :cli "org.clojure" "Clojure" "lib.lisp")) -;build the library -(let ((*clojure-source-path* #p"/dev/clojure/") - (*clojure-target-path* #p"/dev/gen/clojure/")) - (compile-to :jvm "org.clojure" "Clojure" - "arrays.lisp" - "conditions.lisp" - "conses.lisp" - "data-and-control-flow.lisp" - "hash-tables.lisp" - "numbers.lisp" - "printer.lisp" - "sequences.lisp" - "symbols.lisp" - "impl.lisp")) - -(let ((*clojure-source-path* #p"/dev/") - (*clojure-target-path* #p"/dev/clojure/")) - (compile-to :java "org.clojure.user" "TestArrays" - "test-arrays.lisp")) - -(let ((*clojure-source-path* #p"/dev/") - (*clojure-target-path* #p"/dev/clojure/")) - (compile-to :java "org.clojure.user" "TestHash" - "test-hash.lisp")) + |# @@ -155,9 +133,8 @@ (munge-name (symbol-name symbol)))) (defun accessor-member-name (symbol) - (format nil "ACC__~A__~A" - (munge-name (package-name (symbol-package symbol))) - (munge-name (subseq (symbol-name symbol) 1)))) + (format nil "ACC__~A" + (subseq (symbol-name symbol) 1))) (defun symbol-member-name (symbol) (format nil "SYM__~A" @@ -262,23 +239,22 @@ (symbol-member-name sym) (munge-name (symbol-name sym)))) (dolist (keyword *keywords*) - (format target "static Keyword ~A = Keyword.intern(~S);~%" + (format target "static Keyword ~A = (Keyword)Symbol.intern(~S);~%" (keyword-member-name keyword) - (munge-name (symbol-name keyword)))) + (concatenate 'string ":" (munge-name (symbol-name keyword))))) (dolist (var *vars*) - (format target "static Var ~A = Namespace.internVar(~S,~S);~%" + (format target "static Var ~A = Namespace.intern(~S,~S);~%" (var-member-name var) (munge-name (package-name (symbol-package var))) (munge-name (symbol-name var)))) (dolist (accessor *accessors*) - (format target "static Accessor ~A = Namespace.internAccessor(~S,~S);~%" + (format target "static Accessor ~A = (Accessor)Symbol.intern(~S);~%" (accessor-member-name accessor) - (munge-name (package-name (symbol-package accessor))) - (munge-name (subseq (symbol-name accessor) 1)))) + (symbol-name accessor))) (format target "~Atry{~%" (begin-static-block class-name)) ;(format target "~%static public void __load() ~A{~%" (exception-declaration-string lang)) (dolist (var *defns*) - (format target "Namespace.internVar(~S,~S).bind(new ~A());~%" + (format target "Namespace.intern(~S,~S).bind(new ~A());~%" (munge-name (package-name (symbol-package var))) (munge-name (symbol-name var)) (munge-name var))) diff --git a/src/org/clojure/runtime/Accessor.java b/src/org/clojure/runtime/Accessor.java index 5883e3db..b69bb0bb 100644 --- a/src/org/clojure/runtime/Accessor.java +++ b/src/org/clojure/runtime/Accessor.java @@ -14,11 +14,12 @@ package org.clojure.runtime; public class Accessor extends Symbol implements IFn{ - +String memberName; Accessor(String name) { super(name); - } + memberName = name.substring(1); + } public Object invoke(ThreadLocalData tld) throws Exception { @@ -35,7 +36,7 @@ public Object invoke(ThreadLocalData tld) throws Exception { public Object invoke(ThreadLocalData tld, Object obj) throws Exception { - return Reflector.invokeInstanceMember(name,obj); + return Reflector.invokeInstanceMember(memberName,obj); } /** @@ -50,29 +51,29 @@ public Object invoke(ThreadLocalData tld, Object obj) throws Exception public Object invoke(ThreadLocalData tld, Object obj, Object val) throws Exception { - return Reflector.invokeInstanceMember(name,obj,val); + return Reflector.invokeInstanceMember(memberName,obj,val); } public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3) throws Exception { - return Reflector.invokeInstanceMember(name,arg1,arg2,arg3); + return Reflector.invokeInstanceMember(memberName,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); + return Reflector.invokeInstanceMember(memberName,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); + return Reflector.invokeInstanceMember(memberName,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); + return Reflector.invokeInstanceMember(memberName,arg1,arg2,arg3,arg4,arg5,args); } public Object applyTo(ThreadLocalData tld, Cons arglist) throws Exception { |