From 757140ff9aca7cce0096604c7e7b9cd5ffca914e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 28 Sep 2012 00:40:42 -0700 Subject: [PATCH] * src/lread.c (lisp_file_lexically_bound_p): Handle #! lines. Fixes: debbugs:12528 --- src/ChangeLog | 4 ++++ src/lread.c | 19 +++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index b0899d67ca8..601c72a9fd3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-09-28 Glenn Morris + + * lread.c (lisp_file_lexically_bound_p): Handle #! lines. (Bug#12528) + 2012-09-27 Paul Eggert Check more robustly for timer_settime. diff --git a/src/lread.c b/src/lread.c index cb808b37677..0b7fd9067dc 100644 --- a/src/lread.c +++ b/src/lread.c @@ -764,13 +764,28 @@ DEFUN ("get-file-char", Fget_file_char, Sget_file_char, 0, 0, 0, /* Return true if the lisp code read using READCHARFUN defines a non-nil `lexical-binding' file variable. After returning, the stream is - positioned following the first line, if it is a comment, otherwise - nothing is read. */ + positioned following the first line, if it is a comment or #! line, + otherwise nothing is read. */ static int lisp_file_lexically_bound_p (Lisp_Object readcharfun) { int ch = READCHAR; + + if (ch == '#') + { + ch = READCHAR; + if (ch != '!') + { + UNREAD (ch); + UNREAD ('#'); + return 0; + } + while (ch != '\n' && ch != EOF) + ch = READCHAR; + if (ch == '\n') ch = READCHAR; + } + if (ch != ';') /* The first line isn't a comment, just give up. */ { -- 2.39.2