~ chicken-r7rs (master) /r7rs.scm
Trap1(module r7rs (define-library import import-for-syntax export syntax-rules)2 (import (except scheme syntax-rules))3 (import (only chicken.base include))4 (import (only chicken.module export))5 (import (only chicken.platform feature? register-feature!))6 (import (only chicken.syntax begin-for-syntax))78 ;; For syntax definition helpers.9 (import-syntax-for-syntax matchable)10 (import-for-syntax r7rs-compile-time)1112 ;; For #u8(...) syntax.13 (import srfi-4)1415 ;; Reexport (scheme base).16 (import scheme.base)17 (include "scheme.base-interface.scm")1819(let ((old-hook ##sys#user-read-hook))20 ;; XXX Read syntax for "#false" and srfi-4's "#f32(...)" and friends21 ;; don't play nicely together, so we have to copy some of srfi-4.scm's22 ;; read hook here, to fall back on when we hit a vector of floats.23 (define read-srfi-4-vector24 (let ([consers (list 'u8 list->u8vector25 's8 list->s8vector26 'u16 list->u16vector27 's16 list->s16vector28 'u32 list->u32vector29 's32 list->s32vector30 'f32 list->f32vector31 'f64 list->f64vector)])32 (lambda (tag port)33 (let* ([x (read port)])34 (cond [(or (eq? tag 'f) (eq? tag 'F)) #f]35 [(memq tag consers) => (lambda (c) ((##sys#slot (##sys#slot c 1) 0) (read port)))]36 [else (##sys#read-error port "illegal bytevector syntax" tag)])))))37 (set! ##sys#user-read-hook38 (lambda (char port)39 (define (fail tok)40 (##sys#read-error port "invalid boolean literal syntax" tok))41 (case char42 ((#\f #\F #\t #\T)43 (let ((sym (##sys#read port ##sys#default-read-info-hook)))44 (if (not (symbol? sym))45 (fail sym)46 (let ((str (symbol->string sym)))47 (cond ((or (string-ci=? "t" str) (string-ci=? "true" str)) #t)48 ((or (string-ci=? "f" str) (string-ci=? "false" str)) #f)49 (else (read-srfi-4-vector sym port)))))))50 (else (old-hook char port))))))5152;;;53;;; 5.4. Syntax definitions54;;;55(include "synrules.scm")5657;;;58;;; 5.6.1. Libraries59;;;6061(define-syntax define-library r7rs-define-library)6263;;;64;;; Appendix B. Standard feature identifiers65;;;6667(register-feature! #:r7rs))