[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[SCM] GNU M4 source repository branch, branch-1_4, updated. v1.4.10-27-g
From: |
Eric Blake |
Subject: |
[SCM] GNU M4 source repository branch, branch-1_4, updated. v1.4.10-27-g3a38f81 |
Date: |
Thu, 01 Nov 2007 12:42:29 +0000 |
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU M4 source repository".
http://git.sv.gnu.org/gitweb/?p=m4.git;a=commitdiff;h=3a38f813357e5527db579eeb727360a366a68711
The branch, branch-1_4 has been updated
via 3a38f813357e5527db579eeb727360a366a68711 (commit)
from 86f05e746830963af686d61d746a68205abeadf8 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 3a38f813357e5527db579eeb727360a366a68711
Author: Eric Blake <address@hidden>
Date: Thu Nov 1 06:31:22 2007 -0600
Improve error message when early end of file occurs.
* doc/m4.texinfo (Macro Arguments, Changequote, Changecom)
(M4wrap): Adjust to new messages.
(Improved capitalize): Enhance test.
* src/m4.h (next_token): Adjust prototype.
* src/input.c (next_token): Add new parameter, and improve error
message.
(lex_debug): Adjust callers.
* src/symtab.c (symtab_debug): Likewise.
* src/macro.c (expand_input, collect_arguments): Likewise.
(expand_argument): Likewise, and add parameter.
Signed-off-by: Eric Blake <address@hidden>
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 14 ++++++++++++++
doc/m4.texinfo | 34 ++++++++++++++++++++++------------
src/input.c | 26 +++++++++++++++-----------
src/m4.h | 4 ++--
src/macro.c | 33 +++++++++++++++++----------------
src/symtab.c | 2 +-
6 files changed, 71 insertions(+), 42 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index a25c84d..aa00ce0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2007-11-01 Eric Blake <address@hidden>
+
+ Improve error message when early end of file occurs.
+ * doc/m4.texinfo (Macro Arguments, Changequote, Changecom)
+ (M4wrap): Adjust to new messages.
+ (Improved capitalize): Enhance test.
+ * src/m4.h (next_token): Adjust prototype.
+ * src/input.c (next_token): Add new parameter, and improve error
+ message.
+ (lex_debug): Adjust callers.
+ * src/symtab.c (symtab_debug): Likewise.
+ * src/macro.c (expand_input, collect_arguments): Likewise.
+ (expand_argument): Likewise, and add parameter.
+
2007-10-31 Eric Blake <address@hidden>
Test more corner cases.
diff --git a/doc/m4.texinfo b/doc/m4.texinfo
index 42c5438..9a1816b 100644
--- a/doc/m4.texinfo
+++ b/doc/m4.texinfo
@@ -1507,7 +1507,7 @@ hello world
@result{}hello world
define(
^D
address@hidden:stdin:2: ERROR: end of file in argument list
address@hidden:stdin:2: define: end of file in argument list
@end example
@node Quoting Arguments
@@ -3692,7 +3692,14 @@ It is an error if the end of file occurs within a quoted
string.
@result{}hello world
`dangling quote
^D
address@hidden:stdin:2: ERROR: end of file in string
address@hidden:stdin:2: end of file in string
address@hidden example
+
address@hidden status: 1
address@hidden
+ifelse(`dangling quote
+^D
address@hidden:stdin:1: ifelse: end of file in string
@end example
@node Changecom
@@ -3843,7 +3850,16 @@ changecom(`/*', `*/')
@result{}
/*dangling comment
^D
address@hidden:stdin:2: ERROR: end of file in comment
address@hidden:stdin:2: end of file in comment
address@hidden example
+
address@hidden status: 1
address@hidden
+changecom(`/*', `*/')
address@hidden
+len(/*dangling comment
+^D
address@hidden:stdin:2: len: end of file in comment
@end example
@node Changeword
@@ -4155,7 +4171,7 @@ file condition between two input files.
m4wrap(`m4wrap(`)')len(abc')
@result{}
^D
address@hidden:stdin:1: ERROR: end of file in argument list
address@hidden:stdin:1: len: end of file in argument list
@end example
@node File Inclusion
@@ -7117,14 +7133,8 @@ define(`active', `act1, ive')dnl
define(`Active', `Act2, Ive')dnl
define(`ACTIVE', `ACT3, IVE')dnl
define(`A', `OOPS')dnl
-capitalize(active)
address@hidden,Ive
-capitalize(`active')
address@hidden, Ive
-capitalize(``active'')
address@hidden
-capitalize(```actIVE''')
address@hidden'
+capitalize(active; `active'; ``active''; ```actIVE''')
address@hidden,Ive; Act2, Ive; Active; `Active'
undivert(`capitalize2.m4')dnl
@result{}divert(`-1')
@result{}# upcase(text)
diff --git a/src/input.c b/src/input.c
index 7f6f87b..b81d086 100644
--- a/src/input.c
+++ b/src/input.c
@@ -156,9 +156,9 @@ static struct re_pattern_buffer word_regexp;
static int default_word_regexp;
static struct re_registers regs;
-#else /* ! ENABLE_CHANGEWORD */
+#else /* !ENABLE_CHANGEWORD */
# define default_word_regexp 1
-#endif /* ! ENABLE_CHANGEWORD */
+#endif /* !ENABLE_CHANGEWORD */
#ifdef DEBUG_INPUT
static const char *token_type_string (token_type);
@@ -814,17 +814,19 @@ set_word_regexp (const char *regexp)
| TOKEN_STRING for a quoted string; TOKEN_WORD for something that is |
| a potential macro name; and TOKEN_SIMPLE for any single character |
| that is not a part of any of the previous types. If LINE is not |
-| NULL, set *LINE to the line where the token starts. |
-| |
-| Next_token () return the token type, and passes back a pointer to |
+| NULL, set *LINE to the line where the token starts. Report errors |
+| (unterminated comments or strings) on behalf of CALLER, if |
+| non-NULL. |
+| |
+| Next_token () returns the token type, and passes back a pointer to |
| the token data through TD. The token text is collected on the |
| obstack token_stack, which never contains more than one token text |
-| at a time. The storage pointed to by the fields in TD is |
+| at a time. The storage pointed to by the fields in TD is |
| therefore subject to change the next time next_token () is called. |
`--------------------------------------------------------------------*/
token_type
-next_token (token_data *td, int *line)
+next_token (token_data *td, int *line, const char *caller)
{
int ch;
int quote_level;
@@ -876,7 +878,8 @@ next_token (token_data *td, int *line)
/* current_file changed to "" if we see CHAR_EOF, use the
previous value we stored earlier. */
M4ERROR_AT_LINE ((EXIT_FAILURE, 0, file, *line,
- "ERROR: end of file in comment"));
+ "%s%send of file in comment",
+ caller ? caller : "", caller ? ": " : ""));
type = TOKEN_STRING;
}
@@ -959,7 +962,8 @@ next_token (token_data *td, int *line)
/* current_file changed to "" if we see CHAR_EOF, use
the previous value we stored earlier. */
M4ERROR_AT_LINE ((EXIT_FAILURE, 0, file, *line,
- "ERROR: end of file in string"));
+ "%s%send of file in string",
+ caller ? caller : "", caller ? ": " : ""));
if (MATCH (ch, rquote.string, true))
{
@@ -1018,7 +1022,7 @@ peek_token (void)
}
else if ((default_word_regexp && (isalpha (ch) || ch == '_'))
#ifdef ENABLE_CHANGEWORD
- || (! default_word_regexp && word_start[ch])
+ || (!default_word_regexp && word_start[ch])
#endif /* ENABLE_CHANGEWORD */
)
{
@@ -1117,7 +1121,7 @@ lex_debug (void)
token_type t;
token_data td;
- while ((t = next_token (&td)) != TOKEN_EOF)
+ while ((t = next_token (&td, NULL, "<debug>")) != TOKEN_EOF)
print_token ("lex", t, &td);
}
#endif
diff --git a/src/m4.h b/src/m4.h
index ce7bdc0..b4b9b85 100644
--- a/src/m4.h
+++ b/src/m4.h
@@ -93,7 +93,7 @@ typedef void builtin_func (struct obstack *, int, token_data
**);
typedef bool bool_bitfield;
#else
typedef unsigned int bool_bitfield;
-#endif /* ! __GNUC__ */
+#endif /* !__GNUC__ */
/* Take advantage of GNU C compiler source level optimization hints,
using portable macros. */
@@ -286,7 +286,7 @@ typedef enum token_data_type token_data_type;
void input_init (void);
token_type peek_token (void);
-token_type next_token (token_data *, int *);
+token_type next_token (token_data *, int *, const char *);
void skip_line (void);
/* push back input */
diff --git a/src/macro.c b/src/macro.c
index f9c5fe1..0034789 100644
--- a/src/macro.c
+++ b/src/macro.c
@@ -64,7 +64,7 @@ expand_input (void)
obstack_init (&argc_stack);
obstack_init (&argv_stack);
- while ((t = next_token (&td, &line)) != TOKEN_EOF)
+ while ((t = next_token (&td, &line, NULL)) != TOKEN_EOF)
expand_token ((struct obstack *) NULL, t, &td, line);
obstack_free (&argc_stack, NULL);
@@ -126,18 +126,19 @@ expand_token (struct obstack *obs, token_type t,
token_data *td, int line)
}
-/*-------------------------------------------------------------------------.
-| This function parses one argument to a macro call. It expects the first |
-| left parenthesis, or the separating comma to have been read by the |
-| caller. It skips leading whitespace, and reads and expands tokens, |
-| until it finds a comma or an right parenthesis at the same level of |
-| parentheses. It returns a flag indicating whether the argument read are |
-| the last for the active macro call. The argument are build on the |
-| obstack OBS, indirectly through expand_token (). |
-`-------------------------------------------------------------------------*/
+/*-------------------------------------------------------------------.
+| This function parses one argument to a macro call. It expects the |
+| first left parenthesis or the separating comma to have been read |
+| by the caller. It skips leading whitespace, then reads and |
+| expands tokens, until it finds a comma or right parenthesis at the |
+| same level of parentheses. It returns a flag indicating whether |
+| the argument read is the last for the active macro call. The |
+| argument is built on the obstack OBS, indirectly through |
+| expand_token (). Report errors on behalf of CALLER. |
+`-------------------------------------------------------------------*/
static bool
-expand_argument (struct obstack *obs, token_data *argp)
+expand_argument (struct obstack *obs, token_data *argp, const char *caller)
{
token_type t;
token_data td;
@@ -151,7 +152,7 @@ expand_argument (struct obstack *obs, token_data *argp)
/* Skip leading white space. */
do
{
- t = next_token (&td, NULL);
+ t = next_token (&td, NULL, caller);
}
while (t == TOKEN_SIMPLE && isspace (to_uchar (*TOKEN_DATA_TEXT (&td))));
@@ -193,7 +194,7 @@ expand_argument (struct obstack *obs, token_data *argp)
/* current_file changed to "" if we see TOKEN_EOF, use the
previous value we stored earlier. */
M4ERROR_AT_LINE ((EXIT_FAILURE, 0, file, line,
- "ERROR: end of file in argument list"));
+ "%s: end of file in argument list", caller));
break;
case TOKEN_WORD:
@@ -215,7 +216,7 @@ expand_argument (struct obstack *obs, token_data *argp)
abort ();
}
- t = next_token (&td, NULL);
+ t = next_token (&td, NULL, caller);
}
}
@@ -241,10 +242,10 @@ collect_arguments (symbol *sym, struct obstack *argptr,
if (peek_token () == TOKEN_OPEN)
{
- next_token (&td, NULL); /* gobble parenthesis */
+ next_token (&td, NULL, SYMBOL_NAME (sym)); /* gobble parenthesis */
do
{
- more_args = expand_argument (arguments, &td);
+ more_args = expand_argument (arguments, &td, SYMBOL_NAME (sym));
if (!groks_macro_args && TOKEN_DATA_TYPE (&td) == TOKEN_FUNC)
{
diff --git a/src/symtab.c b/src/symtab.c
index 872cfaa..8195e2e 100644
--- a/src/symtab.c
+++ b/src/symtab.c
@@ -357,7 +357,7 @@ symtab_debug (void)
int delete;
static int i;
- while (next_token (&td) == TOKEN_WORD)
+ while (next_token (&td, NULL, "<debug>") == TOKEN_WORD)
{
text = TOKEN_DATA_TEXT (&td);
if (*text == '_')
hooks/post-receive
--
GNU M4 source repository
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [SCM] GNU M4 source repository branch, branch-1_4, updated. v1.4.10-27-g3a38f81,
Eric Blake <=