~ chicken-r7rs (master) 50fff6c946b166e4b3b15aab2550a766c993f22e
commit 50fff6c946b166e4b3b15aab2550a766c993f22e Merge: 779e1ce c666cef Author: Evan Hanson <evhan@foldling.org> AuthorDate: Wed May 30 13:04:26 2018 +1200 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Wed May 30 13:05:32 2018 +1200 Merge branch 'chicken-5' diff --cc r7rs-compile-time-module.scm index 5751c66,5e5132a..51d32e3 --- a/r7rs-compile-time-module.scm +++ b/r7rs-compile-time-module.scm @@@ -1,8 -1,6 +1,7 @@@ --(module r7rs-compile-time (r7rs-cond-expand ++(module r7rs-compile-time (r7rs-begin ++ r7rs-cond-expand r7rs-define-library - r7rs-import - r7rs-import-for-syntax r7rs-include r7rs-include-ci) -- (import scheme chicken) ++ (import scheme chicken.base) (include "r7rs-compile-time.scm")) diff --cc r7rs-compile-time.scm index 2fe8238,addef42..4bc2fe3 --- a/r7rs-compile-time.scm +++ b/r7rs-compile-time.scm @@@ -1,12 -1,9 +1,10 @@@ ;;;; compile-time support code (mostly for modules) - - (module r7rs-compile-time * -- - (import scheme matchable) - (import srfi-1 chicken.base chicken.syntax chicken.plist - chicken.pathname chicken.platform chicken.file) -(import matchable) -(use srfi-1) -(use r7rs-library r7rs-support) ++(import-syntax matchable) ++(import chicken.base chicken.file chicken.plist) ++(import chicken.syntax chicken.platform) ++(import srfi-1) +(import r7rs-library r7rs-support) (define (locate-library name loc) ; must be stripped ;;XXX scan include-path? @@@ -86,29 -65,17 +65,27 @@@ (map expand/begin exps))) (define (read-forms filename ci?) - (let ((path (##sys#resolve-include-filename filename #t))) - (fluid-let ((##sys#default-read-info-hook - (and (feature? 'compiling) ##compiler#read-info-hook)) - (##sys#include-pathnames - (cond ((pathname-directory path) => - (cut cons <> ##sys#include-pathnames)) - ((current-source-directory) => - (cut cons <> ##sys#include-pathnames)) - (else ##sys#include-pathnames)))) - (expand-toplevel-r7rs-library-forms - (parameterize ((case-sensitive (not ci?))) - (##sys#include-forms-from-file path)))))) + (fluid-let ((##sys#default-read-info-hook + (let ((name 'chicken.compiler.support#read-info-hook)) + (and (feature? 'compiling) + (##sys#symbol-has-toplevel-binding? name) + (##sys#slot name 0))))) + (parameterize ((case-sensitive (not ci?))) + (##sys#include-forms-from-file + filename + ##sys#current-source-filename + expand-toplevel-r7rs-library-forms)))) +(define implicit-r7rs-library-bindings + '(begin + cond-expand + export + import + import-for-syntax + include + include-ci + syntax-rules)) + (define (parse-library-definition form dummy-export) ; expects stripped syntax (match form ((_ name decls ...) @@@ -169,16 -136,16 +146,17 @@@ ,@code ,(parse-decls more))) (decl (syntax-error 'define-library "invalid library declaration" decl)))) - `(##core#module - ,real-name ((,dummy-export)) - ;; gruesome hack: we add a dummy export for adding indirect exports - (##core#define-syntax ,dummy-export (##core#lambda _ '(##core#undefined))) - ;; Another gruesome hack: provide feature so "use" works properly - (##sys#provide (##core#quote ,real-name)) - ;; Set up an R7RS environment for the module's body. - (import-for-syntax (only r7rs ,@implicit-r7rs-library-bindings)) - (import (only r7rs ,@implicit-r7rs-library-bindings)) - ,(parse-decls decls)))) + `(##core#module ,real-name ((,dummy-export)) + ;; gruesome hack: we add a dummy export for adding indirect exports - (##core#define-syntax ,dummy-export (##core#lambda _ (##core#undefined))) ++ (##core#define-syntax ,dummy-export ++ (##sys#er-transformer (##core#lambda (x r c) (##core#undefined)))) + ;; Another gruesome hack: provide feature so "use" works properly + (##sys#provide (##core#quote ,real-name)) + ;; Set up an R7RS environment for the module's body. - (import-for-syntax r7rs) ; overwrites "syntax-rules" - (import r7rs) ; overwrites "export" et al. ++ (import-for-syntax (only r7rs ,@implicit-r7rs-library-bindings)) ++ (import (only r7rs ,@implicit-r7rs-library-bindings)) + ;; Now process all toplevel library declarations - ,(parse-decls decls)))) ++ ,(parse-decls decls)))) (_ (syntax-error 'define-library "invalid library definition" form)))) (define (register-r7rs-module name) diff --cc r7rs-library.scm index 61589bb,9d2cb5a..acd4cd5 --- a/r7rs-library.scm +++ b/r7rs-library.scm @@@ -6,10 -6,9 +6,10 @@@ ;;; (module r7rs-library * -- - (import scheme chicken.base matchable) - (import scheme chicken matchable) - (use (only data-structures string-intersperse)) ++ (import-syntax matchable) ++ (import scheme chicken.base) + (import (only chicken.string string-intersperse)) + (import (only chicken.syntax syntax-error)) (define (fixup-import/export-spec spec loc) (match spec diff --cc r7rs-support.scm index 1606043,feadb9c..85ec645 --- a/r7rs-support.scm +++ b/r7rs-support.scm @@@ -3,8 -3,8 +3,7 @@@ ;;; (module r7rs-support * -- - (import scheme chicken) + (import scheme chicken.base chicken.syntax) (define (macro-handler name) (cond ((assq name (##sys#macro-environment)) => caddr) diff --cc r7rs.egg index 7783a1d,0000000..7106ca7 mode 100644,000000..100644 --- a/r7rs.egg +++ b/r7rs.egg @@@ -1,35 -1,0 +1,35 @@@ +((synopsis "R7RS compatibility") + (author "The Chicken Team") + (category lang-exts) + (license "BSD") + (dependencies matchable srfi-13) + (test-dependencies test) + (components - (extension r7rs ++ (extension r7rs + (component-dependencies r7rs-compile-time) - (source-dependencies "synrules.scm" - "scheme.base-interface.scm")) ++ (source-dependencies "synrules.scm" "scheme.base-interface.scm")) + (extension r7rs-support) + (extension r7rs-library) + (extension r7rs-compile-time ++ (source "r7rs-compile-time-module.scm") ++ (source-dependencies "r7rs-compile-time.scm") + (component-dependencies r7rs-library r7rs-support)) + (extension scheme.base - (source-dependencies "scheme.base-interface.scm") + (types-file) ++ (source-dependencies "scheme.base-interface.scm") + (component-dependencies r7rs-support r7rs-compile-time)) + (extension scheme.case-lambda (types-file)) + (extension scheme.char (types-file) (component-dependencies r7rs-support)) + (extension scheme.complex (types-file)) + (extension scheme.cxr (types-file)) + (extension scheme.eval (types-file) (component-dependencies r7rs-library)) + (extension scheme.file (types-file)) + (extension scheme.inexact (types-file)) + (extension scheme.lazy (types-file)) + (extension scheme.load (types-file)) + (extension scheme.process-context (types-file)) - (extension scheme.r5rs (types-file) - (component-dependencies scheme.eval)) ++ (extension scheme.r5rs (types-file) (component-dependencies scheme.eval)) + (extension scheme.read (types-file)) + (extension scheme.repl (types-file)) + (extension scheme.time (types-file)) + (extension scheme.write (types-file)))) diff --cc r7rs.scm index 724a12c,3c527b2..4a4bbf3 --- a/r7rs.scm +++ b/r7rs.scm @@@ -1,18 -1,19 +1,19 @@@ (module r7rs (define-library import import-for-syntax export syntax-rules) -- -- (import (except scheme syntax-rules)) ;XXX except ... - (import (only chicken.platform feature? register-feature!)) - (import (only chicken feature? include register-feature!)) ++ (import (except scheme syntax-rules)) + (import (only chicken.base include)) - (import chicken.module) ++ (import (only chicken.module export)) ++ (import (only chicken.platform feature? register-feature!)) + (import (only chicken.syntax begin-for-syntax)) - (import srfi-4) ;; For syntax definition helpers. -- (import-for-syntax matchable) ++ (import-syntax-for-syntax matchable) (import-for-syntax r7rs-compile-time) - (begin-for-syntax - (require-library r7rs-compile-time)) + ;; For #u8(...) syntax. - (require-extension srfi-4) ++ (import srfi-4) + ;; Reexport (scheme base). - (require-extension scheme.base) + (import scheme.base) (include "scheme.base-interface.scm") (let ((old-hook ##sys#user-read-hook)) diff --cc scheme.base.scm index 39f8b9f,3de2760..eb629fd --- a/scheme.base.scm +++ b/scheme.base.scm @@@ -1,62 -1,69 +1,70 @@@ (module scheme.base () - (import (rename chicken.platform -(import (rename (except (chicken) vector-copy! with-exception-handler) -- (features feature-keywords))) - (import (except chicken.condition with-exception-handler)) - (import chicken.module) - (import (except scheme syntax-rules assoc member list-tail - char=? char<? char>? char<=? char>=? - string=? string<? string>? string<=? string>=? - string-copy string->list vector->list vector-fill!)) -- - (import (prefix (only scheme char=? char<? char>? char<=? char>=? - string=? string<? string>? string<=? string>=?) -(import (except (scheme) syntax-rules cond-expand assoc list-tail member - char=? char<? char>? char<=? char>=? string=? string<? - string>? string<=? string>=? string-copy string->list - vector->list vector-fill!)) - -(import (prefix (only (scheme) char=? char<? char>? char<=? char>=? - string=? string<? string>? string<=? string>=?) -- %)) -- - (import (rename (only srfi-4 make-u8vector subu8vector u8vector u8vector? - u8vector-length u8vector-ref u8vector-set! - read-u8vector read-u8vector! write-u8vector) -(import (rename (only (srfi 4) make-u8vector subu8vector u8vector - u8vector? u8vector-length u8vector-ref - u8vector-set! read-u8vector read-u8vector! - write-u8vector) -- (u8vector bytevector) -- (u8vector-length bytevector-length) -- (u8vector-ref bytevector-u8-ref) -- (u8vector-set! bytevector-u8-set!) -- (u8vector? bytevector?) -- (make-u8vector make-bytevector) - (read-u8vector read-bytevector) -- (write-u8vector write-bytevector))) - -(include "scheme.base-interface.scm") ++(import chicken.fixnum ++ chicken.module ++ chicken.syntax ++ chicken.type ++ (except chicken.condition with-exception-handler) ++ (rename chicken.platform (features feature-keywords)) ++ (only chicken.base call/cc case-lambda current-error-port ++ define-values exact-integer? exact-integer-sqrt letrec* ++ let-values let*-values make-parameter open-input-string ++ parameterize quotient&remainder error foldl cut optional ++ when unless receive) ++ (except scheme syntax-rules assoc list-tail member string-copy ++ string->list vector->list vector-fill! char=? char<? char>? ++ char<=? char>=? string=? string<? string>? string<=? string>=?)) ;; For syntax definition helpers. (import-for-syntax r7rs-support) (import-for-syntax r7rs-compile-time) -(begin-for-syntax - (require-library r7rs-compile-time)) (import r7rs-support) - (import chicken.type) - (import (only chicken.base exact-integer? exact-integer-sqrt - quotient&remainder error - error foldl cut optional when case-lambda unless receive)) - (include "scheme.base-interface.scm") ++;; Export all of scheme.base from this module. ++(import (prefix (only chicken.base include) %)) ++(%include "scheme.base-interface.scm") ++ + ;; Numerical operations. -(import (rename (only scheme exact->inexact inexact->exact modulo quotient remainder) ++(import (rename (only scheme exact->inexact inexact->exact) + (exact->inexact inexact) - (inexact->exact exact) - (modulo floor-remainder) - (quotient truncate-quotient) - (remainder truncate-remainder)) - (rename (only chicken quotient&remainder) - (quotient&remainder truncate/))) ++ (inexact->exact exact))) ;; read/write-string/line/byte - (import (prefix (only chicken.io read-string write-string) %)) - (import (rename (only chicken.io read-line read-byte write-byte) -(import (prefix (only (chicken io) write-string) %)) -(import (rename (only (chicken io) read-line read-string read-byte write-byte) ++(import (prefix (only chicken.io write-string) %)) ++(import (rename (only chicken.io read-line read-string read-byte write-byte) (read-byte read-u8) (write-byte write-u8))) - (import chicken.fixnum) - ;; flush-output -(import (rename (only chicken flush-output) +(import (rename (only chicken.base flush-output) (flush-output flush-output-port))) ++;; Bytevectors. ++(import (rename (only srfi-4 make-u8vector subu8vector u8vector ++ u8vector? u8vector-length u8vector-ref ++ u8vector-set! read-u8vector read-u8vector! ++ write-u8vector) ++ (u8vector bytevector) ++ (u8vector-length bytevector-length) ++ (u8vector-ref bytevector-u8-ref) ++ (u8vector-set! bytevector-u8-set!) ++ (u8vector? bytevector?) ++ (make-u8vector make-bytevector) ++ (read-u8vector read-bytevector) ++ (write-u8vector write-bytevector))) ++ ;; u8-ready? (import (rename (only scheme char-ready?) (char-ready? u8-ready?))) --;; Non-R5RS string-* -(import (prefix (only (srfi 13) string-for-each string-map) %)) -(import (only (srfi 13) string-copy string-copy! string-fill! string->list)) ++;; Non-R5RS string and char procedures. ++(import (prefix (only scheme char=? char<? char>? char<=? char>=?) %)) ++(import (prefix (only scheme string=? string<? string>? string<=? string>=?) %)) +(import (prefix (only srfi-13 string-for-each string-map) %)) +(import (only srfi-13 string-copy string-copy! string-fill! string->list)) ;; For d-r-t redefinition. -(import-for-syntax (only chicken define-record-type)) +(import-for-syntax (only chicken.base define-record-type)) ;;; ;;; 4.1.7. Inclusion @@@ -138,6 -145,6 +146,9 @@@ ;;; 5.5 Record-type definitions ;;; ++(define ##sys#make-symbol ++ (##core#primitive "C_make_symbol")) ++ ;; Rewrite the standard d-r-t expansion so that each newly-defined ;; record type has a unique type tag. This is every kind of hacky. (define-syntax define-record-type @@@ -158,49 -165,9 +169,51 @@@ ;;; 6.2.6 Numerical operations ;;; +;; TODO: Copy the specializations from types.db +(: truncate/ ((or integer float) (or integer float) -> (or integer float) (or integer float))) + +(define truncate/ quotient&remainder) + +(: truncate-remainder ((or integer float) (or integer float) -> (or integer float))) + +(define truncate-remainder remainder) + +(: truncate-quotient ((or integer float) (or integer float) -> (or integer float))) + +(define truncate-quotient quotient) + +;; XXX These are bad bad bad definitions; very inefficient. +;; But to improve it we would need to provide another implementation +;; of the quotient procedure which floors instead of truncates. + +(: floor-remainder ((or fixnum bignum float ratnum) (or fixnum bignum float ratnum) -> (or fixnum bignum float ratnum) (or fixnum bignum float ratnum))) + +(define (floor-remainder x y) + (receive (div rem) (floor/ x y) rem)) + +(: floor-quotient ((or fixnum bignum float ratnum) (or fixnum bignum float ratnum) -> (or fixnum bignum float ratnum) (or fixnum bignum float ratnum))) + +(define (floor-quotient x y) + (receive (div rem) (floor/ x y) div)) + +(: floor/ ((or fixnum bignum float ratnum) (or fixnum bignum float ratnum) -> (or fixnum bignum float ratnum) (or fixnum bignum float ratnum))) + +;; Same as quotient&remainder, but quotient gets adjusted along with +;; the remainder. +(define (floor/ x y) + (receive (div rem) (quotient&remainder x y) + (if (positive? y) + (if (negative? rem) + (values (- div 1) (+ rem y)) + (values div rem)) + (if (positive? rem) + (values (- div 1) (+ rem y)) + (values div rem))))) + + (: square (number -> number)) + (: floor/ (number number -> number number)) + (: floor-quotient (number number -> number)) (define (square n) (* n n)) diff --cc scheme.char.scm index 05f03c8,f792a86..5f58425 --- a/scheme.char.scm +++ b/scheme.char.scm @@@ -7,8 -7,7 +7,7 @@@ string-upcase string-downcase digit-value) - (import chicken.base chicken.fixnum) - (import (only chicken.type :)) -(import chicken) ++(import chicken.base chicken.fixnum chicken.type) (import r7rs-support) (import (except scheme diff --cc scheme.cxr.scm index b3463aa,b3463aa..5c16276 --- a/scheme.cxr.scm +++ b/scheme.cxr.scm @@@ -22,5 -22,5 +22,4 @@@ cddadr cdddar cddddr) -- (import scheme) --) ++ (import scheme)) diff --cc scheme.eval.scm index 6c167d2,f221d82..9d56c96 --- a/scheme.eval.scm +++ b/scheme.eval.scm @@@ -1,9 -1,8 +1,7 @@@ --(module scheme.eval (eval -- environment) -- - (import (rename scheme (eval %eval)) chicken.base) - (import (only chicken.type :)) - (import (rename scheme (eval %eval)) chicken) - (use r7rs-library) ++(module scheme.eval (eval environment) ++ (import (rename scheme (eval %eval))) ++ (import chicken.base chicken.type) + (import r7rs-library) ;;; ;;; 6.12. Environments and evaluation diff --cc scheme.file.scm index 435dd36,c83f4d3..d6355fb --- a/scheme.file.scm +++ b/scheme.file.scm @@@ -10,10 -10,9 +10,8 @@@ open-binary-output-file open-output-file with-output-to-file) -- -- (import scheme) - (import (only chicken.type :)) - (import (rename (only chicken delete-file file-exists? :) ++ (import scheme chicken.type) + (import (rename (only chicken.file delete-file file-exists?) (file-exists? chicken-file-exists?))) ;; CHICKEN's file-exists? returns the filename when true, diff --cc scheme.inexact.scm index 6744b62,ca402df..3a822b2 --- a/scheme.inexact.scm +++ b/scheme.inexact.scm @@@ -1,3 -1,13 +1,13 @@@ - (module scheme.inexact () - (import scheme chicken.base chicken.module) - (export acos asin atan exp infinite? sin cos tan finite? log sqrt nan?)) -(module scheme.inexact (acos ++(module scheme.inexact (acos + asin + atan + exp + infinite? + sin + cos + tan + finite? + log + sqrt + nan?) - (import scheme chicken)) ++ (import scheme chicken.base)) diff --cc scheme.load.scm index 460598e,f664f86..aab5ade --- a/scheme.load.scm +++ b/scheme.load.scm @@@ -1,8 -1,7 +1,6 @@@ (module scheme.load (load) - (import chicken.base - (only chicken.type :)) - (import chicken) -- (import (rename scheme (load %load) -- (eval %eval))) ++ (import chicken.base chicken.type) ++ (import (rename scheme (load %load) (eval %eval))) (: load (string #!optional (struct environment) -> undefined)) diff --cc scheme.process-context.scm index 94347bd,c09eef2..0f6ea6d --- a/scheme.process-context.scm +++ b/scheme.process-context.scm @@@ -3,20 -3,17 +3,16 @@@ exit get-environment-variable get-environment-variables) -- -- (import scheme - (rename chicken.base (exit chicken-exit)) - chicken.type - (rename chicken (exit chicken-exit)) - foreign) ++ (import scheme + chicken.process-context - (only chicken.fixnum fx+) - chicken.foreign) ++ chicken.type ++ (rename chicken.base (exit chicken-exit))) ;;; ;;; 6.14. System interface. ;;; (: command-line (-> (list-of string))) --(: get-environment-variables (-> (list-of (pair string string)))) (: exit (#!optional * -> noreturn)) (: emergency-exit (#!optional * -> noreturn)) @@@ -24,33 -21,33 +20,6 @@@ ;; Don't cache these; they may be parameterized at any time! (cons (program-name) (command-line-arguments))) --;; XXX get-environment-variables copied from posixunix.scm. --;; (And not actually expected to work on other platforms yet.) -- --#> --#ifdef __APPLE__ --# include <crt_externs.h> --# define C_getenventry(i) ((*_NSGetEnviron())[ i ]) --#else --extern char **environ; --# define C_getenventry(i) (environ[ i ]) --#endif --<# -- --(define get-environment-variables -- (let ([get (foreign-lambda c-string "C_getenventry" int)]) -- (lambda () -- (let loop ([i 0]) -- (let ([entry (get i)]) -- (if entry -- (let scan ([j 0]) -- (if (char=? #\= (##core#inline "C_subchar" entry j)) -- (cons (cons (##sys#substring entry 0 j) -- (##sys#substring entry (fx+ j 1) (##sys#size entry))) -- (loop (fx+ i 1))) -- (scan (fx+ j 1)) ) ) -- '())))))) -- (define (->exit-status obj) (cond ((integer? obj) obj) ((eq? obj #f) 1) diff --cc scheme.r5rs.scm index 4e5ca11,dcd9953..d97f26e --- a/scheme.r5rs.scm +++ b/scheme.r5rs.scm @@@ -1,26 -1,26 +1,19 @@@ (module scheme.r5rs () - - (import - (rename scheme - (null-environment %null-environment) - (scheme-report-environment %scheme-report-environment))) - (import chicken.base chicken.module chicken.module - chicken.syntax - (only chicken.type :)) ++ (import (rename scheme ++ (null-environment %null-environment) ++ (scheme-report-environment %scheme-report-environment))) ++ (import chicken.base chicken.module chicken.syntax chicken.type) + (import scheme.eval) - (import chicken) - (import - (rename scheme - (null-environment %null-environment) - (scheme-report-environment %scheme-report-environment))) - - (reexport - (only chicken angle make-polar make-rectangular rationalize)) - - (require-extension scheme.eval) + (export angle make-polar make-rectangular rationalize) (export null-environment scheme-report-environment) (reexport -- (except scheme -- null-environment scheme-report-environment eval -- and begin begin-for-syntax case cond cond-expand -- define define-syntax delay delay-force do export if -- import import-for-syntax lambda let let* let-syntax -- letrec letrec* letrec-syntax module or quasiquote quote -- reexport require-extension require-extension-for-syntax -- require-library set! syntax syntax-rules)) ++ (except scheme ++ null-environment scheme-report-environment eval ++ and begin case cond define define-syntax delay do ++ if lambda let let* let-syntax letrec letrec-syntax ++ or quasiquote quote set! syntax-rules)) (define-constant null-environment-identifiers '(and begin case cond cond-expand define define-syntax delay diff --cc scheme.read.scm index e828958,d9f5afc..de40b49 --- a/scheme.read.scm +++ b/scheme.read.scm @@@ -1,12 -1,9 +1,11 @@@ -(module (scheme read) (read) - (import (except (scheme) read) - (only (chicken) : case-sensitive current-read-table feature?) - (only (chicken) fluid-let fx+ fx= optional unless when) - (only (chicken) define-constant define-inline parameterize) - (only (chicken read-syntax) set-read-syntax!)) +(module scheme.read (read) + (import (except scheme read) - (only chicken.type :) - (only chicken.platform feature?) - (only chicken.fixnum fx+ fx=) - (only chicken.read-syntax current-read-table) - (only chicken.base fluid-let - optional unless when case-sensitive - define-constant define-inline parameterize)) ++ (only chicken.base case-sensitive define-constant define-inline) ++ (only chicken.base fluid-let parameterize optional unless when) ++ (only chicken.fixnum fx+ fx=) ++ (only chicken.platform feature?) ++ (only chicken.read-syntax current-read-table set-read-syntax!) ++ (only chicken.type :)) ;;; ;;; 2.1 Identifiers diff --cc scheme.time.scm index f9a64e0,9f9524f..5654bdc --- a/scheme.time.scm +++ b/scheme.time.scm @@@ -1,11 -1,9 +1,10 @@@ (module scheme.time (current-second current-jiffy jiffies-per-second) - (import (only scheme define inexact->exact) - (import (only (chicken) : define-constant) - (only (chicken time) current-seconds current-milliseconds) - (only (scheme) + define inexact->exact)) ++ (import (only chicken.base define-constant) ++ (only chicken.time current-seconds current-milliseconds) + (only chicken.type :) - (only chicken.base define-constant) - (only chicken.time current-seconds current-milliseconds) - (only chicken.flonum fp+)) ++ (only scheme + define inexact->exact)) ;; As of 2012-06-30. (define-constant tai-offset 35.) diff --cc scheme.write.scm index 3bfc4fd,3a24f15..e270810 --- a/scheme.write.scm +++ b/scheme.write.scm @@@ -3,10 -3,7 +3,10 @@@ write-shared write-simple) (import (rename scheme (display display-simple) (write write-simple)) - (only chicken : feature? foldl fx+ fx= fx<= optional when)) + (only chicken.base foldl when optional) - (only chicken.platform feature?) - (only chicken.type :) - (only chicken.fixnum fx+ fx= fx<=)) ++ (only chicken.platform feature?) ++ (only chicken.type :) ++ (only chicken.fixnum fx+ fx= fx<=)) (when (feature? 'csi) (set! ##sys#repl-print-hook diff --cc synrules.scm index c797c00,c797c00..a306827 --- a/synrules.scm +++ b/synrules.scm @@@ -98,6 -98,6 +98,10 @@@ (define %temp (r 'temp)) (define %syntax-error '##sys#syntax-error-hook) (define %ellipsis (r ellipsis)) ++ (define %take-right (r 'chicken.internal.syntax-rules#take-right)) ++ (define %drop-right (r 'chicken.internal.syntax-rules#drop-right)) ++ (define %syntax-rules-mismatch ++ (r 'chicken.internal.syntax-rules#syntax-rules-mismatch)) (define (ellipsis? x) (c x %ellipsis)) @@@ -180,7 -180,7 +184,7 @@@ (let* ((tail-length (length (cddr pattern))) (%match (if (zero? tail-length) ; Simple segment? path ; No list traversing overhead at runtime! -- `(##sys#drop-right ,path ,tail-length)))) ++ `(,%drop-right ,path ,tail-length)))) (append (process-pattern (car pattern) %temp @@@ -191,7 -191,7 +195,7 @@@ `(,%map1 (,%lambda (,%temp) ,x) ,%match)))) #f el?) (process-pattern (cddr pattern) -- `(##sys#take-right ,path ,tail-length) ++ `(,%take-right ,path ,tail-length) mapit #t el?)))) ((pair? pattern) (append (process-pattern (car pattern) `(,%car ,path) mapit #f el?) diff --cc tests/run.scm index 238b919,d8b10b9..b40f3a3 --- a/tests/run.scm +++ b/tests/run.scm @@@ -1,15 -1,12 +1,12 @@@ - (use r7rs) - - ;; XXX: This seems to be necessary in order to get the syntax-rules - ;; from r7rs rather than the built-in CHICKEN one. I'm not sure if - ;; that's correct or not... - (import-for-syntax (r7rs)) - - (import (chicken) + (import (r7rs) - (chicken) - (chicken data-structures) ++ (chicken base) + (chicken io) - (chicken ports) ++ (chicken port) ++ (chicken string) (test) - (ports) (scheme base) (scheme char) + (scheme eval) (scheme file) (scheme read) (scheme write)) @@@ -24,12 -26,12 +26,12 @@@ '(FOO mooh qux blah foo BAR) (append (with-input-from-string - "FOO #!fold-case mooh QUX blah #!no-fold-case foo BAR" read-file))) - "FOO #!fold-case mooh QUX blah #!no-fold-case foo BAR" read-all))) ++ "FOO #!fold-case mooh QUX blah #!no-fold-case foo BAR" read-list))) (test "#!(no-)fold-case only affects subsequent reads from the same port" '(FOO bar baz downcased UPCASED) (append - (with-input-from-string "FOO #!fold-case bar BAZ" read-file) - (with-input-from-string "downcased UPCASED" read-file)))) - (with-input-from-string "FOO #!fold-case bar BAZ" read-all) - (with-input-from-string "downcased UPCASED" read-all)))) ++ (with-input-from-string "FOO #!fold-case bar BAZ" read-list) ++ (with-input-from-string "downcased UPCASED" read-list)))) (test-group "4.1.7: Inclusion" (test-group "include"Trap