fix `read-language' when input has only comments

This commit is contained in:
Matthew Flatt 2011-01-16 19:01:45 -07:00
parent 090f82cc0b
commit 21eee45a48
3 changed files with 21 additions and 1 deletions

View File

@ -163,7 +163,7 @@ exception is propagated by @racket[read-language].
If @racket[in] does not specify a @tech{reader language} with
@litchar{#lang} or @litchar{#!}, then @racket[fail-thunk] is
called. The default @racket[fail-thunk] raises
@racket[exn:fail:contract].}
@racket[exn:fail:read] or @racket[exn:fail:read:eof].}
@defboolparam[read-case-sensitive on?]{

View File

@ -1078,6 +1078,24 @@
(and (exn:fail:read? x)
(not (exn:fail:read:eof? x)))))
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; read-language
(test #t procedure? (read-language (open-input-string "#lang racket/base")))
(test #t procedure? (read-language (open-input-string ";;\n#lang racket/base")))
(test #t procedure? (read-language (open-input-string ";;\n#|\n\n |#\n#lang racket/base")))
(test #t procedure? (read-language (open-input-string "#! /bin/env \n#lang racket/base")))
(test #t procedure? (read-language (open-input-string "#!/bin/env \n#lang racket/base")))
(test #t procedure? (read-language (open-input-string "#!racket/base")))
(let ([check-nothing
(lambda (str exn?)
(err/rt-test (read-language (open-input-string str)) exn?)
(test 'no read-language (open-input-string str) (lambda () 'no)))])
(check-nothing "" exn:fail:read:eof?)
(check-nothing ";" exn:fail:read:eof?)
(check-nothing "#| |#" exn:fail:read:eof?)
(check-nothing "8 9" exn:fail:read?))
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(report-errs)

View File

@ -1088,6 +1088,8 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table *
if (ch == EOF) {
if (comment_mode & RETURN_FOR_COMMENT)
return NULL;
if (get_info)
return expected_lang("", ch, port, stxsrc, line, col, pos, get_info);
return scheme_eof;
}
if (ch == SCHEME_SPECIAL)