use file ports to better support non standarded lexers

This commit is contained in:
Spencer Florence 2015-01-15 16:57:51 -05:00
parent 87c39b5347
commit ae0ce4491c

View File

@ -57,7 +57,7 @@
;; TODO should we only ignore test (and main) submodules? ;; TODO should we only ignore test (and main) submodules?
(define (make-irrelevant? lexer f) (define (make-irrelevant? lexer f)
(define s (mutable-set)) (define s (mutable-set))
(define-values (for-lex for-str) (replicate-input-port (current-input-port))) (define-values (for-lex for-str) (replicate-file-port f (current-input-port)))
(define str (apply vector (string->list (port->string for-str)))) (define str (apply vector (string->list (port->string for-str))))
(define init-offset (- (string-length (file->string f)) (define init-offset (- (string-length (file->string f))
(vector-length str))) (vector-length str)))
@ -94,13 +94,12 @@
[_else (void)])) [_else (void)]))
(lambda (i) (set-member? s i))) (lambda (i) (set-member? s i)))
(define (replicate-input-port p) (define (replicate-file-port f p)
(define-values (i1 o1) (make-pipe)) (define f1 (open-input-file f))
(define-values (i2 o2) (make-pipe)) (define f2 (open-input-file f))
(copy-port p o1 o2) (file-position f1 (file-position p))
(close-output-port o1) (file-position f2 (file-position p))
(close-output-port o2) (values f1 f2))
(values i1 i2))
(define (raw-covered? i c) (define (raw-covered? i c)