From: Markus Rost <rost@math.uni-bielefeld.de>
To: Andreas Schwab <schwab@linux-m68k.org>
Cc: emacs-pretest-bug@gnu.org, 4616@emacsbugs.donarmstrong.com
Subject: bug#4616: 23.1.50; empty script files
Date: Mon, 5 Oct 2009 05:11:36 +0200 (CEST) [thread overview]
Message-ID: <20091005031136.CD61EEFB40@sonic02.math.uni-bielefeld.de> (raw)
In-Reply-To: <m2k4zbmvao.fsf@whitebox.home> (message from Andreas Schwab on Sun, 04 Oct 2009 10:13:03 +0200)
What about the following tentative patch?
It moves the handling of '#!' from read1 up to readevalloop, which
then would skip the first line if it starts with '#!'.
To achieve this, the patch allows the readchar/unreadchar mechanism to
look 2 characters ahead, instead of just 1.
Omitting ' && first_sexp' in the patch would skip '#!' + rest of line
anywhere as before.
Be aware that I just made some guesses after glancing briefly over
lread.c (and I am not a C-programmer).
*** /home/rost/build/cvs/emacs/src/lread.c.~1.414~ 2009-10-05 01:38:28.000000000 +0200
--- /home/rost/build/cvs/emacs/src/lread.c 2009-10-05 04:31:51.000000000 +0200
***************
*** 271,276 ****
--- 271,277 ----
a file stream can't handle multibyte-char unreading. The value -1
means that there's no unread character. */
static int unread_char;
+ static int unread_char1;
static int
readchar (readcharfun, multibyte)
***************
*** 410,415 ****
--- 411,422 ----
return XINT (tem);
read_multibyte:
+ if (unread_char1 >= 0)
+ {
+ c = unread_char1;
+ unread_char1 = -1;
+ return c;
+ }
if (unread_char >= 0)
{
c = unread_char;
***************
*** 489,499 ****
}
else if (CONSP (readcharfun))
{
! unread_char = c;
}
else if (EQ (readcharfun, Qlambda))
{
! unread_char = c;
}
else if (EQ (readcharfun, Qget_file_char)
|| EQ (readcharfun, Qget_emacs_mule_file_char))
--- 496,512 ----
}
else if (CONSP (readcharfun))
{
! if (unread_char >= 0)
! unread_char1 = c;
! else
! unread_char = c;
}
else if (EQ (readcharfun, Qlambda))
{
! if (unread_char >= 0)
! unread_char1 = c;
! else
! unread_char = c;
}
else if (EQ (readcharfun, Qget_file_char)
|| EQ (readcharfun, Qget_emacs_mule_file_char))
***************
*** 505,511 ****
UNBLOCK_INPUT;
}
else
! unread_char = c;
}
else
call1 (readcharfun, make_number (c));
--- 518,527 ----
UNBLOCK_INPUT;
}
else
! if (unread_char >= 0)
! unread_char1 = c;
! else
! unread_char = c;
}
else
call1 (readcharfun, make_number (c));
***************
*** 1658,1663 ****
--- 1674,1680 ----
Lisp_Object start, end;
{
register int c;
+ register int c1;
register Lisp_Object val;
int count = SPECPDL_INDEX ();
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
***************
*** 1747,1752 ****
--- 1764,1782 ----
unbind_to (count1, Qnil);
break;
}
+ if (c == '#' && first_sexp)
+ {
+ c1 = READCHAR;
+ if (c1 == '!')
+ {
+ /* #! appears at the beginning of an executable file.
+ Skip the first line. */
+ while ((c1 = READCHAR) != '\n' && c1 != -1);
+ goto read_next;
+ }
+ else
+ UNREAD (c1);
+ }
/* Ignore whitespace here, so we can detect eof. */
if (c == ' ' || c == '\t' || c == '\n' || c == '\f' || c == '\r'
***************
*** 2607,2620 ****
load_each_byte = 0;
goto retry;
}
- if (c == '!')
- {
- /* #! appears at the beginning of an executable file.
- Skip the first line. */
- while (c != '\n' && c >= 0)
- c = READCHAR;
- goto retry;
- }
if (c == '$')
return Vload_file_name;
if (c == '\'')
--- 2637,2642 ----
next prev parent reply other threads:[~2009-10-05 3:11 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-02 14:01 bug#4616: 23.1.50; empty script files Markus Rost
[not found] ` <m2k4zbmvao.fsf@whitebox.home>
2009-10-05 3:11 ` Markus Rost [this message]
2009-10-06 15:19 ` Markus Rost
[not found] ` <20091004150617.5367DEFB40@sonic02.math.uni-bielefeld.de>
2020-08-25 13:58 ` Lars Ingebrigtsen
2020-08-25 15:44 ` Markus Rost
2020-08-26 9:53 ` Lars Ingebrigtsen
2022-02-10 12:45 ` Lars Ingebrigtsen
-- strict thread matches above, loose matches on Subject: below --
2009-10-08 17:43 Markus Rost
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20091005031136.CD61EEFB40@sonic02.math.uni-bielefeld.de \
--to=rost@math.uni-bielefeld.de \
--cc=4616@emacsbugs.donarmstrong.com \
--cc=emacs-pretest-bug@gnu.org \
--cc=schwab@linux-m68k.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.