Discussion:
[Jscheme-user] patch: compiler fix for AND, add load-when-compile
jeffbz
2008-01-25 15:48:05 UTC
Permalink
Here's a patch for the jscheme compiler. I found that (and ...) gets compiled
to return #t when all arguments are true rather than the value of the last
argument like it should. Also, I added a hack that provides a
'load-when-compile' form that evaluates definitions in a file at compile
time. I needed this to make some functions available for compile-time
macroexpansion (this fixes the problem I posted about before). There's also
a similar modification that makes the compiler's read pass descend into
(load)ed files. I can see that not everybody might want this behavior, but
it made sense to me since otherwise you'd be loading interpreted definitions
from compiled code instead of just compiling everything.
This applies to src/jsint/compiler/Compiler.scm in jscheme-7.2

56a57,66
(define (readlist fullfilename)
; make defs available to compiler
(let ((L (open-input-file fullfilename)))
(let loop ((a (read L)))
(cond ((eof-object? a) ())
((and (pair? a) (eq? (car a) 'load))
(append (readlist (cadr a)) (loop (read L))))
((and (pair? a) (eq? (car a) 'load-when-compile))
(load (cadr a)) (loop (read L)))
(else (cons a (loop (read L))))))))
60,65c70,71
< (let ((PROG (let readlist
< ((L (open-input-file fullfilename)))
< (let ((a (read L)))
< (if (eof-object? a) ()
< (cons a (readlist L))))))
< (PATH_CLASSNAME
---
(let ((PROG (readlist fullfilename))
(PATH_CLASSNAME
221c228,230
< `(if ,(first args) (and ,@(rest args)) #f))))
---
(if (null? (cdr args))
(car args)
--
View this message in context: http://www.nabble.com/patch%3A-compiler-fix-for-AND%2C-add-load-when-compile-tp15090512p15090512.html
Sent from the JScheme - User mailing list archive at Nabble.com.
Geoff Knauth
2008-01-25 17:39:25 UTC
Permalink
Thank you!!
Post by jeffbz
Here's a patch for the jscheme compiler. I found that (and ...) gets compiled
to return #t when all arguments are true rather than the value of the last
argument like it should. Also, I added a hack that provides a
'load-when-compile' form that evaluates definitions in a file at compile
time. I needed this to make some functions available for compile-time
macroexpansion (this fixes the problem I posted about before).
There's also
a similar modification that makes the compiler's read pass descend into
(load)ed files. I can see that not everybody might want this
behavior, but
it made sense to me since otherwise you'd be loading interpreted definitions
from compiled code instead of just compiling everything.
This applies to src/jsint/compiler/Compiler.scm in jscheme-7.2
56a57,66
(define (readlist fullfilename)
; make defs available to compiler
(let ((L (open-input-file fullfilename)))
(let loop ((a (read L)))
(cond ((eof-object? a) ())
((and (pair? a) (eq? (car a) 'load))
(append (readlist (cadr a)) (loop (read L))))
((and (pair? a) (eq? (car a) 'load-when-compile))
(load (cadr a)) (loop (read L)))
(else (cons a (loop (read L))))))))
60,65c70,71
< (let ((PROG (let readlist
< ((L (open-input-file fullfilename)))
< (let ((a (read L)))
< (if (eof-object? a) ()
< (cons a (readlist L))))))
< (PATH_CLASSNAME
---
(let ((PROG (readlist fullfilename))
(PATH_CLASSNAME
221c228,230
---
(if (null? (cdr args))
(car args)
--
View this message in context: http://www.nabble.com/patch%3A-compiler-fix-for-AND%2C-add-load-when-compile-tp15090512p15090512.html
Sent from the JScheme - User mailing list archive at Nabble.com.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Jscheme-user mailing list
https://lists.sourceforge.net/lists/listinfo/jscheme-user
Loading...