This is the mail archive of the kawa@sourceware.org mailing list for the Kawa project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: GSOC | Extending Common Lisp support


On Jun 1, 2012, at 9:10 PM, Per Bothner wrote:

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.

Ah yes, of course.


I implemented this using the APPLY function in primitives.lisp:

(defun funcall (func&rest args)
  (apply func args))

Seems reasonable, at least for now.

That does seem pretty equivalent to me, so ...


Passes the examples given in the hyperspec at least.

... if that includes the wacky


(flet ((cons (x y) `(kons ,x ,y)))
  (let ((cons (symbol-function '+)))
    (funcall #'cons
             (funcall 'cons 1 2)
             (funcall cons 1 2))))
=> (KONS (1 . 2) 3)

then we're probably OK.

Remember to create test-cases!

Yes. The examples in CLHS are a good place to start.


Jamison, maybe you can put together a patch to use RunTestScript,
including a started test and gnu/commonlisp/testsuite/Makefile.am
changes?

OK, I guess it's time to bite the bullet and figure out automake... ;-)


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.

+1


Note that labels is the letrec-like version of flet and should also
do the setProcedureDecl() bit.

--
	--Per Bothner
per@bothner.com   http://per.bothner.com/

-- Jamison Hope The PTR Group www.theptrgroup.com




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]