[gambit-list] srfi-13/14
Bradley Lucier
lucier at math.purdue.edu
Sat Apr 9 00:09:10 EDT 2005
On Apr 7, 2005, at 10:55 PM, ben at fuhok.net wrote:
> What advantage does the more complicated error checking have over the
> simpler checking that I put in? Is there more to it than just
> consistency with the Gambit runtime?
Thank you for the diffs, I haven't looked at them yet, I've been
working on answering this question.
Basically, your error-checker
(define (##check-arg pred val caller)
(if (not (pred val)) (error "Bad argument type" val caller)))
can lead to trouble; if val is circular, for example, or a 10000-entry
list, or ... then there will just be a whole lot of stuff dumped to
the terminal until the user hits ^C. For example:
[zakon2-iro-umontreal-ca:~/programs/gambc40b12/ben] bjlucier% gsc
Gambit Version 4.0 beta 12
> (compile-file "char-set-lib.scm")
gcc: unrecognized option `-no-cpp-precomp'
#t
> (load "char-set-lib.scm")
"/Users/bjlucier/programs/gambc40b12/ben/char-set-lib.scm"
> (load "char-set-lib")
"/Users/bjlucier/programs/gambc40b12/ben/char-set-lib.o1"
> (define a (cons #f #f))
> a
(#f . #f)
> (set-cdr! a a)
> (char-set-adjoin char-set:lower-case a)
*** ERROR IN char-set-adjoin -- Bad argument type (#f #f #f #f #f #f #f
#f #f #f #f #f #f #f #f #f #f #f
<lines and lines of stuff removed>^C
*** ERROR IN char-set-adjoin -- Deadlock detected
whereas if you use and extend slightly the built-in error-handling
machinery that Marc built, you get
> (load "../srfis/srfis")
"/Users/bjlucier/programs/gambc40b12/ben/../srfis/srfis.o2"
> (char-set-adjoin char-set:lower-case a)
*** ERROR IN char-set-adjoin -- CHARACTER expected
(char-set-adjoin
'#<char-set #3 body: #u16(0 0 0 0 0 0 65534 2047 0 0 0 32 0 32768
65535 654...
'(#f #f #f #f #f #f #f #f #f #f #f #f #f #f #f #f #f #f #f #f #f #f #f
#f ...)
1>
Of course, all is not perfect:
> (char-set-adjoin 1 #\c)
*** ERROR IN (console)@21.1 -- (Argument 1) Unknown type expected
(char-set-adjoin 1 #\c)
1>
Marc, how do you fix this?
Anyway, I've included srfis 13 and 14 modified to work with gambc40b12
in this message. Put these files in a directory srfis in parallel with
lib/gsi/gsc/... and compile with
> (compile-file "srfis.scm" '(check))
if you want checking or
> (compile-file "srfis.scm")
if you don't. (Another reason to do error checking the way I did, you
can get rid of the checking easily.)
I also added
[zakon2-iro-umontreal-ca:~/programs/gambc40b12/ben] bjlucier% rcsdiff
*.scm
===================================================================
RCS file: RCS/char-set-lib.scm,v
retrieving revision 1.1
diff -r1.1 char-set-lib.scm
5a6
> (declare (standard-bindings)(extended-bindings)(block))
to your char-set-lib.scm.
Brad
-------------- next part --------------
A non-text attachment was scrubbed...
Name: srfis-13-14.tgz
Type: application/x-gzip
Size: 17441 bytes
Desc: not available
URL: <http://mailman.iro.umontreal.ca/pipermail/gambit-list/attachments/20050408/01ad94d8/attachment.bin>
More information about the Gambit-list
mailing list