This is the mail archive of the
kawa@sourceware.org
mailing list for the Kawa project.
Re: GSOC | Extending Common Lisp support
On 06/01/2012 05:55 PM, Charles Turner wrote:
On 1 June 2012 00:02, Per Bothner<per@bothner.com> wrote:
Note that funcall is a function, not a macro. It should be easy enough to
implement as a short Java method or a CommonList function that
invokes Procedure#applyN.
I implemented this using the APPLY function in primitives.lisp:
(defun apply (func&rest (args ::<Object[]>))
(invoke (the<function>
(if (symbolp func) (symbol-function func) func))
'applyN
(invoke-static<gnu.kawa.functions.Apply>
'getArguments
args
0 #'apply)))
(defun funcall (func&rest args)
(apply func args))
Seems reasonable, at least for now.
Passes the examples given in the hyperspec at least.
Remember to create test-cases!
Jamison, maybe you can put together a patch to use RunTestScript,
including a started test and gnu/commonlisp/testsuite/Makefile.am
changes?
where %flet is implemented using kawa.standard.let,
except you need to do:
decl.setProcedureDecl(true);
I'd be inclined to do a dispatch on the syntax name, so in the
protected method something like:
if (this.getName().equals("flet")) then decl.setProcedureDecl()
but that's quite awkward with the static instances being used in these
syntax objects. What's the motivation for the static instances in
these syntax objects?
The static instances are the ones that end up in the builtin environment.
I added constructors which set the syntax name
per object,
Yes, that is certaily appropriate, especially when it is no longer
a singleton class.
and it seems to work OK, though I haven't tested whether
my FLET satisfies the semantics of the standard yet, but the method of
implementing it seems to work.
However, instead of:
if (this.getName().equals("flet")) then decl.setProcedureDecl();
do something like:
if (settingProcedures) decl.setProcedureDecl();
and have settingProcedures an instance variable which can be
set in the constructor.
--
--Per Bothner
per@bothner.com http://per.bothner.com/