>From a01ca069806ccd3ba47a2498f24d1f101c2e71e8 Mon Sep 17 00:00:00 2001 From: Evan Hanson Date: Sat, 17 Feb 2018 17:08:52 +1300 Subject: [PATCH 3/3] Move `file-exists?' and `directory-exists?' from toplevel to chicken.file This requires using the low-level variant of `file-exists?' from library.scm in a few places, and adding a local version to eval.scm to avoid introducing a dependency on the "file" unit. --- build-version.scm | 2 +- chicken.import.scm | 2 -- eval.scm | 15 +++++++-------- file.scm | 9 +++++++-- library.scm | 8 -------- tests/csc-tests.scm | 3 ++- tests/file-access-tests.scm | 3 ++- types.db | 5 ++--- 8 files changed, 21 insertions(+), 26 deletions(-) diff --git a/build-version.scm b/build-version.scm index 218983d8..bac9e17d 100644 --- a/build-version.scm +++ b/build-version.scm @@ -33,7 +33,7 @@ (er-macro-transformer (lambda (x r c) (let ((fn (cadr x))) - (and (file-exists? fn) + (and (##sys#file-exists? fn #t #f #f) (call-with-input-file (cadr x) (lambda (p) (let ((ver ((##sys#slot (##sys#slot p 2) 8) p 256))) ; read-line diff --git a/chicken.import.scm b/chicken.import.scm index 67116e23..7976d168 100644 --- a/chicken.import.scm +++ b/chicken.import.scm @@ -41,7 +41,6 @@ (cplxnum? . chicken.base#cplxnum?) (current-error-port . chicken.base#current-error-port) (current-exception-handler . chicken.condition#current-exception-handler) - directory-exists? (dynamic-load-libraries . chicken.load#dynamic-load-libraries) (enable-warnings . chicken.base#enable-warnings) (equal=? . chicken.base#equal=?) @@ -56,7 +55,6 @@ (expand . chicken.syntax#expand) (feature? . chicken.platform#feature?) (features . chicken.platform#features) - file-exists? (finite? . chicken.base#finite?) (fixnum-bits . chicken.fixnum#fixnum-bits) (fixnum-precision . chicken.fixnum#fixnum-precision) diff --git a/eval.scm b/eval.scm index 461740ef..df84439f 100644 --- a/eval.scm +++ b/eval.scm @@ -886,7 +886,7 @@ provide provided? require) (import scheme - chicken ; file-exists? and output string stuff + chicken ; string ports chicken.base chicken.eval chicken.fixnum @@ -1243,6 +1243,9 @@ (set! cache (cons path lst)) lst)))))) +(define (file-exists? name) ; defined here to avoid file unit dependency + (and (##sys#file-exists? name #t #f #f) name)) + (define (find-file name search-path) (let loop ((p (##sys#split-path search-path))) (cond ((null? p) #f) @@ -1250,8 +1253,7 @@ (else (loop (cdr p)))))) (define find-dynamic-extension - (let ((file-exists? file-exists?) - (string-append string-append)) + (let ((string-append string-append)) (lambda (path inc?) (let ((p (##sys#canonicalize-extension-path path #f)) (rp (repository-path))) @@ -1348,15 +1350,12 @@ (define ##sys#resolve-include-filename (let ((string-append string-append) ) - (define (exists? fname) - (##sys#file-exists? fname #t #f #f)) (lambda (fname exts repo source) (define (test-extensions fname lst) (if (null? lst) - (and (exists? fname) fname) + (file-exists? fname) (let ((fn (##sys#string-append fname (car lst)))) - (if (exists? fn) - fn + (or (file-exists? fn) (test-extensions fname (cdr lst)))))) (define (test fname) (test-extensions diff --git a/file.scm b/file.scm index 4792bbdc..3a57d8b2 100644 --- a/file.scm +++ b/file.scm @@ -82,8 +82,6 @@ EOF socket? symbolic-link?) -(import (only chicken file-exists? directory-exists?)) - (import scheme chicken.base chicken.condition @@ -109,6 +107,13 @@ EOF (let ([rn (##sys#update-errno)]) (apply ##sys#signal-hook type loc (string-append msg " - " (strerror rn)) args) ) ) ) ) +(define (file-exists? name) + (##sys#check-string name 'file-exists?) + (and (##sys#file-exists? name #f #f 'file-exists?) name)) + +(define (directory-exists? name) + (##sys#check-string name 'directory-exists?) + (and (##sys#file-exists? name #f #t 'directory-exists?) name)) (define (delete-file filename) (##sys#check-string filename 'delete-file) diff --git a/library.scm b/library.scm index dd269c23..7a7e5429 100644 --- a/library.scm +++ b/library.scm @@ -3453,14 +3453,6 @@ EOF #:file-error loc "system error while trying to access file" name)))) -(define (file-exists? name) - (##sys#check-string name 'file-exists?) - (and (##sys#file-exists? name #f #f 'file-exists?) name)) - -(define (directory-exists? name) - (##sys#check-string name 'directory-exists?) - (and (##sys#file-exists? name #f #t 'directory-exists?) name)) - (define (##sys#flush-output port) ((##sys#slot (##sys#slot port 2) 5) port) ; flush-output (##core#undefined) ) diff --git a/tests/csc-tests.scm b/tests/csc-tests.scm index b7816f6c..1fa281dc 100644 --- a/tests/csc-tests.scm +++ b/tests/csc-tests.scm @@ -1,6 +1,7 @@ ;;; csc interface tests -(import (chicken pathname) +(import (chicken file) + (chicken pathname) (chicken process) (chicken process-context) (chicken string)) diff --git a/tests/file-access-tests.scm b/tests/file-access-tests.scm index 41e98343..761bb5c9 100644 --- a/tests/file-access-tests.scm +++ b/tests/file-access-tests.scm @@ -4,7 +4,8 @@ ;; These may seem silly, but some of them actually fail on MinGW without help. ;; -(import (chicken process-context)) +(import (chicken file) + (chicken process-context)) (define / (car (command-line-arguments))) (define // (string-append / /)) diff --git a/types.db b/types.db index 5c73ad30..9ee24365 100644 --- a/types.db +++ b/types.db @@ -1180,8 +1180,6 @@ (##sys#signal-hook (procedure ##sys#signal-hook (* #!rest) noreturn)) (##sys#debug-mode? (procedure ##sys#debug-mode? () boolean) (() (##core#inline "C_i_debug_modep"))) -(file-exists? (#(procedure #:clean #:enforce) file-exists? (string) (or false string))) -(directory-exists? (#(procedure #:clean #:enforce) directory-exists? (string) (or false string))) ;; flonum @@ -1567,13 +1565,14 @@ (chicken.file#delete-directory (#(procedure #:clean #:enforce) chicken.file#delete-directory (string #!optional *) string)) (chicken.file#delete-file (#(procedure #:clean #:enforce) chicken.file#delete-file (string) string)) (chicken.file#delete-file* (#(procedure #:clean #:enforce) chicken.file#delete-file* (string) *)) +(chicken.file#directory-exists? (#(procedure #:clean #:enforce) chicken.file#directory-exists? (string) (or false string))) +(chicken.file#file-exists? (#(procedure #:clean #:enforce) chicken.file#file-exists? (string) (or false string))) (chicken.file#file-copy (#(procedure #:clean #:enforce) chicken.file#file-copy (string string #!optional * fixnum) fixnum)) (chicken.file#file-move (#(procedure #:clean #:enforce) chicken.file#file-move (string string #!optional * fixnum) fixnum)) (chicken.file#find-files (#(procedure #:enforce) chicken.file#find-files (string #!rest) list)) (chicken.file#glob (#(procedure #:clean #:enforce) chicken.file#glob (#!rest string) list)) (chicken.file#rename-file (#(procedure #:clean #:enforce) chicken.file#rename-file (string string) string)) - ;; pathname (chicken.pathname#absolute-pathname? (#(procedure #:clean #:enforce) chicken.pathname#absolute-pathname? (string) boolean)) -- 2.11.0