From 21eee45a488e70686d09f2d2926bd048901a867e Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sun, 16 Jan 2011 19:01:45 -0700 Subject: [PATCH] fix `read-language' when input has only comments --- collects/scribblings/reference/read.scrbl | 2 +- collects/tests/racket/read.rktl | 18 ++++++++++++++++++ src/racket/src/read.c | 2 ++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/collects/scribblings/reference/read.scrbl b/collects/scribblings/reference/read.scrbl index 3e970e33bf..9355611abb 100644 --- a/collects/scribblings/reference/read.scrbl +++ b/collects/scribblings/reference/read.scrbl @@ -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?]{ diff --git a/collects/tests/racket/read.rktl b/collects/tests/racket/read.rktl index eae885b61f..55a860963a 100644 --- a/collects/tests/racket/read.rktl +++ b/collects/tests/racket/read.rktl @@ -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) diff --git a/src/racket/src/read.c b/src/racket/src/read.c index b4a252b426..a1e31523d0 100644 --- a/src/racket/src/read.c +++ b/src/racket/src/read.c @@ -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)