two bugs in reference implementation Derick Eddington 06 Nov 2009 23:26 UTC
I've found and fixed two bugs in the reference implementation currently at http://srfi.schemers.org/srfi-99/srfi-99.sls . First one: Ikarus Scheme version 0.0.4-rc1+ (revision 1865, build 2009-10-21) Copyright (c) 2006-2009 Abdulaziz Ghuloum > (load "srfi-99.sls") > (import (srfi :99 records)) > (define-record-type point #T #T (x) (y)) Exception trapped by debugger. Condition components: 1. &assertion 2. &who: map 3. &message: "not a proper list" 4. &irritants: () [t] Trace. [r] Reraise exception. [c] Continue. [q] Quit. [?] Help. >> t CALL FRAMES: FRAME 0: [0] (map (lambda (fspec field-spec) (cond ((symbol? fspec) (list 'immutable fspec (string->symbol (string-append type-name-string "-" (symbol->string fspec))))) ((not (pair? fspec)) (complain)) ((not (list? fspec)) (complain)) ((not (for-all symbol? fspec)) (complain)) ((null? (cdr fspec)) (list 'mutable (car fspec) (string->symbol (string-append type-name-string "-" (symbol->string (car fspec)))) (string->symbol (string-append type-name-string "-" (symbol->string (car fspec)) "-set!")))) ((null? (cddr fspec)) (list 'immutable (car fspec) (syntax-car (syntax-cdr field-spec)))) ((null? (cdddr fspec)) (list 'mutable (car fspec) (syntax-car (syntax-cdr field-spec)) (syntax-car (syntax-cdr (syntax-cdr field-spec))))) (else (complain)))) fspecs (syntax->list #'field-specs)) operator: #<procedure map> operands: (#<procedure> ((x) (y)) (#<syntax (x)> . #<syntax ((y))>)) >> After fixing the above one by modifying syntax->list (see the below patch), I found the second one: > (load "srfi-99.sls") > (import (srfi :99 records)) > (define-record-type point #T #T (x) (y)) Unhandled exception Condition components: 1. &message: "invalid expression" 2. &syntax: form: #<syntax #f> subform: #f 3. &trace: #<syntax #<syntax #f>> > The bug with this one is doing datum->syntax on syntax objects. I fixed it by modifying frob (see the below patch). --- srfi-99.sls 2009-11-06 15:11:20.000000000 -0800 +++ srfi-99.sls--Derick 2009-11-06 15:09:05.000000000 -0800 @@ -223,8 +223,10 @@ (cons (frob (car x)) (frob (cdr x)))) ((vector? x) (vector-map frob x)) + ((symbol? x) + (datum->syntax tname x)) (else - (datum->syntax tname x)))) + x))) #`(#,(frob #'define-record-type-helper) #,(frob tname) @@ -258,9 +260,7 @@ (define (syntax->list x) (syntax-case x () (() - x) - ((x0) - x) + '()) ((x0 . x1) (cons #'x0 (syntax->list #'x1))))) -- : Derick ----------------------------------------------------------------