Akim Demaille [Tue, 12 Nov 2002 08:05:59 +0000 (08:05 +0000)]
* src/struniq.h, src/struniq.c (struniq_t): Is const.
(STRUNIQ_EQ, struniq_assert, struniq_assert_p): New.
Use struniq for symbols.
* src/symtab.h (symbol_t): The tag member is a struniq.
(symbol_type_set): Adjust.
* src/symtab.c (symbol_new): Takes a struniq.
(symbol_free): Don't free the tag member.
(hash_compare_symbol_t, hash_symbol_t): Rename as...
(hash_compare_symbol, hash_symbol): these.
Use the fact that tags as struniqs.
(symbol_get): Use struniq_new.
* src/symlist.h, src/symlist.c (symbol_list_n_type_name_get):
Returns a strniq.
* src/reader.h (merger_list, grammar_currentmerge_set): The name
and type members are struniqs.
* src/reader.c (get_merge_function)
(grammar_current_rule_merge_set): Adjust.
(TYPE, current_type): Are struniq.
Use struniq for file names.
* src/files.h, src/files.c (infile): Split into...
(grammar_file, current_file): these.
* src/scan-gram.c (YY_USER_INIT, handle_syncline): Adjust.
* src/reduce.c (reduce_print): Likewise.
* src/getargs.c (getargs): Likewise.
* src/complain.h, src/complain.c: Likewise.
* src/main.c (main): Call struniqs_new early enough to use it for
file names.
Don't free the input file name.
Akim Demaille [Tue, 12 Nov 2002 07:55:55 +0000 (07:55 +0000)]
* src/symtab.c (symbol_free): Remove dead deactivated code:
type_name are properly removed.
Don't use XFREE to free items that cannot be NULL.
* src/struniq.h, src/struniq.c: New.
* src/main.c (main): Initialize/free struniqs.
* src/parse-gram.y (%union): Add astruniq member.
(yyprint): Adjust.
* src/scan-gram.l (<{tag}>): Return a struniq.
Free the obstack bit that used to store it.
* src/symtab.h (symbol_t): The 'type_name' member is a struniq.
Paul Eggert [Tue, 12 Nov 2002 07:33:36 +0000 (07:33 +0000)]
Revamp to fix many (but not all) of the C- and M4-related quoting
problems. Among other things, this fixes the Bison bug reported
by Jan Hubicka when processing the Bash grammar.
Paul Eggert [Tue, 12 Nov 2002 07:27:51 +0000 (07:27 +0000)]
(yylineno, yyoutname): Remove static vars, replacing
them with auto vars.
Switch to new escape scheme, where @ is the escape character uniformly.
Abort if a stray escape character is found. Avoid unbounded input
buffer when parsing non-escaped text.
Paul Eggert [Tue, 12 Nov 2002 07:27:04 +0000 (07:27 +0000)]
(<SC_CHARACTER>): Don't worry about any backslash
escapes other than \\ and \'; this simplifies the code.
(<SC_STRING>): Likewise, for \\ and \".
(<SC_COMMENT,SC_LINE_COMMENT,SC_STRING,SC_CHARACTER,SC_BRACED_CODE,
SC_PROLOGUE,SC_EPILOGUE>): Escape $ and @, too.
Use new escapes @{ and @} for [ and ].
Paul Eggert [Tue, 12 Nov 2002 07:25:36 +0000 (07:25 +0000)]
(escaped_file_name_output): New function.
(prepare_symbols): Quote tokens for M4.
(prepare): Don't insert output_infix, output_prefix,
output_parser_name, output_header_name; this is now down by scan-skel.
Insert skeleton as a C string.
(user_actions_output, symbol_destructors_output,
symbol_printers_output): Quote filenames for C and M4.
Paul Eggert [Tue, 12 Nov 2002 07:22:01 +0000 (07:22 +0000)]
Use new @ escapes consistently.
(b4_input_suffix, b4_output_parser_suffix, b4_output_parser_name,
b4_output_header_suffix, b4_output_header_name, b4_header_guard):
Remove, since they couldn't handle arbitrary characters in file
names.
Remove use of "#ifdef b4_header_guard", since it
mishandled funny characters in file names, and anyway it isn't
needed any more.
(YYSTYPE_IS_TRIVIAL): Define when the .h file would.
Paul Eggert [Tue, 12 Nov 2002 07:21:01 +0000 (07:21 +0000)]
Use new @ escapes consistently.
(b4_input_suffix, b4_output_parser_suffix, b4_output_parser_name,
b4_output_header_suffix, b4_output_header_name, b4_header_guard):
Remove, since they couldn't handle arbitrary characters in file
names.
Use YYSLP_NEEDED instead of b4_header_guard.
Paul Eggert [Tue, 12 Nov 2002 07:15:59 +0000 (07:15 +0000)]
(b4_copyright): Omit file name from comment, since
the file name could contain "*/".
(b4_synclines_flag): Don't quote the 2nd argument; it should already
be quoted. All uses changed.
Paul Eggert [Sun, 10 Nov 2002 07:10:08 +0000 (07:10 +0000)]
Fix the test failure due to GCC warnings described in
<http://mail.gnu.org/pipermail/bug-bison/2002-November/001815.html>.
* data/glr.c (yyis_pact_ninf, yyis_table_ninf): New macros, which
evaluate to 0 if it's impossible for NINF to be in the respective
table.
(yygetLRActions, yyrecoverParseError): Use them.
* src/scan-gram.l (unexpected_end_of_file): Fix bug: columns were
counted in the token inserted at end of file. Now takes
location_t *, not location_t, so that the location can be
adjusted. All uses changed.
* tests/regression.at (Invalid inputs): Adjust wording in
diagnostic to match the new behavior.
* tests/torture.at (AT_DATA_TRIANGULAR_GRAMMAR,
AT_DATA_HORIZONTAL_GRAMMAR, AT_DATA_LOOKAHEADS_GRAMMAR,
AT_DATA_STACK_TORTURE): Replace `assert (x);' with `if (! (x))
abort ();'. This reduces the runtime of the "Many lookaheads"
test from 27.6 to 2.7 minutes on a 440 MHz Ultrasparc III running
GCC 3.2.
Paul Eggert [Sun, 10 Nov 2002 07:04:07 +0000 (07:04 +0000)]
(AT_DATA_TRIANGULAR_GRAMMAR, AT_DATA_HORIZONTAL_GRAMMAR,
AT_DATA_LOOKAHEADS_GRAMMAR, AT_DATA_STACK_TORTURE): Replace `assert
(x);' with `if (! (x)) abort ();'. This reduces the runtime of the
"Many lookaheads" test from 27.6 to 2.7 minutes on a 440 MHz
Ultrasparc III.
Paul Eggert [Sun, 10 Nov 2002 05:17:56 +0000 (05:17 +0000)]
(unexpected_end_of_file): Fix bug: columns were counted in the token
inserted at end of file. Now takes location_t *, not location_t, so
that the location can be adjusted. All uses changed.
Paul Eggert [Sun, 10 Nov 2002 04:31:38 +0000 (04:31 +0000)]
Fix the test failure due to GCC warnings described in
<http://mail.gnu.org/pipermail/bug-bison/2002-November/001815.html>.
* data/glr.c (yyis_pact_ninf, yyis_table_ninf): New macros, which
evalutate to 0 if it's impossible for NINF to be in the respective
table.
(yygetLRActions, yyrecoverParseError): Use them.
Paul Eggert [Fri, 8 Nov 2002 05:22:51 +0000 (05:22 +0000)]
* src/parse-gram.y (CHARACTER): Remove unused token.
All uses removed.
* src/scan-gram.l: Remove stack option. We no longer use the
stack, since the stack was never deeper than 1; instead, use the
new auto var c_context to record the stacked value.
Remove nounput option. At an unexpected end of file, we now unput
the minimal input necessary to end cleanly; this simplifies the
code.
Avoid unbounded token sizes where this is easy.
(unexpected_end_of_file): New function.
Use it to systematize the error message on unexpected EOF.
(last-string): Now auto, not static.
(YY_OBS_FREE): Remove unnecessary do while (0) wrapper.
(scanner_last_string_free): Remove; not used.
(percent_percent_count): Move decl to just before use.
(SC_ESCAPED_CHARACTER): Return ID at unexpected end of file,
not the (never otherwised-used) CHARACTER.
Paul Eggert [Fri, 8 Nov 2002 05:20:20 +0000 (05:20 +0000)]
Remove stack option. We no longer use the stack, since the stack was
never deeper than 1; instead, use the new auto var c_context to record
the stacked value.
Remove nounput option. At an unexpected end of file, we now unput
the minimal input necessary to end cleanly; this simplifies the
code.
Avoid unbounded token sizes where this is easy.
(unexpected_end_of_file): New function.
Use it to systematize the error message on unexpected EOF.
(last-string): Now auto, not static.
(YY_OBS_FREE): Remove unnecessary do while (0) wrapper.
(scanner_last_string_free): Remove; not used.
(percent_percent_count): Move decl to just before use.
(SC_ESCAPED_CHARACTER): Return ID at unexpected end of file,
not the (never otherwised-used) CHARACTER.
Akim Demaille [Thu, 7 Nov 2002 12:52:19 +0000 (12:52 +0000)]
Let yyerror always receive the msg as last argument, so that
yyerror can be variadic.
* data/yacc.c (b4_yyerror_args): New.
Use it when calling yyerror.
* data/glr.c (b4_yyerror_args, b4_lyyerror_args): New.
Use it when calling yyerror.
* doc/bison.texinfo (Error Reporting): Adjust.
* tests/calc.at (_AT_DATA_CALC_Y): Adjust.
* tests/cxx-type.at (_AT_TEST_GLR_CALC): Adjust.
Akim Demaille [Wed, 6 Nov 2002 16:22:04 +0000 (16:22 +0000)]
#line should have quoted strings.
Ideally, this should be done by m4_quotearg.
* src/scan-skel.l: Include quotearg.h.
Quote __ofile__.
* src/output.c (symbol_printers_output)
(symbol_destructors_output): Quote the file name.
Paul Eggert [Wed, 6 Nov 2002 07:04:24 +0000 (07:04 +0000)]
* src/scan-gram.l: Use more accurate diagnostics, e.g.
"integer out of range" rather than "invalid value".
* tests/input.at (Invalid $n, Invalid @n): Change expected wording
accordingly.
Paul Hilfinger [Wed, 6 Nov 2002 02:46:08 +0000 (02:46 +0000)]
src/tables.c (matching_state): Don't allow states to match if
either has GLR conflict entries.
ChangeLog: update for this and Hilfinger's preceding test-suite addition.
Paul Eggert [Tue, 5 Nov 2002 23:50:11 +0000 (23:50 +0000)]
(braces_level): Now auto, not static.
Initialize to zero if the compiler is being picky.
(INITIAL): Clear braces_level instead of incrementing it.
(SC_BRACED_CODE): Treat <% and %> as { and } when inside C code,
as POSIX 1003.1-2001 requires.
Akim Demaille [Mon, 4 Nov 2002 08:30:18 +0000 (08:30 +0000)]
* tests/glr-regr1.at (Badly Collapsed GLR States): Prototype yylex
and yyerror.
Have yyerror `use' its arguments.
* tests/calc.at (AT_CHECK_PUSHDEFS): AT_YYERROR_SEES_LOC_IF
returns true when location & yacc & pure & parse-param.
(_AT_DATA_CALC_Y): Let yyerror ``use'' its arguments.
Akim Demaille [Mon, 4 Nov 2002 08:28:01 +0000 (08:28 +0000)]
* src/location.h (LOCATION_PRINT): Use quotearg slot 3 to avoid
clashes.
* src/scan-gram.l: Use ['] instead of ['] to pacify
font-lock-mode.
Use complain_at.
Use quote, not quote_n since LOCATION_PRINT no longer uses the
slot 0.
Paul Eggert [Mon, 4 Nov 2002 07:29:57 +0000 (07:29 +0000)]
* src/reader.c (get_merge_function, grammar_current_rule_check):
Use consistent diagnostics for reporting type name clashes.
Quote the types with <>, for consistency with Yacc.
* tests/input.at (Type Clashes): Adjust to diagnostic changes.
Paul Eggert [Mon, 4 Nov 2002 06:06:44 +0000 (06:06 +0000)]
(get_merge_function, grammar_current_rule_check):
Use consistent diagnostics for reporting type name clashes.
Quote the types with <>, for consistency with Yacc.
Akim Demaille [Sun, 3 Nov 2002 16:41:57 +0000 (16:41 +0000)]
* data/c.m4 (b4_identification, b4_user_args, b4_parse_param):
New.
* data/yacc.m4 (b4_pure_args, b4_Pure_args): New.
(b4_parse_param): Remove.
Use b4_identification.
Propagate b4_pure_args where needed to pass them to yyerror.
* data/glr.m4 (b4_parse_param): Remove.
(b4_user_formals, b4_pure_args, b4_pure_formals, b4_lpure_args)
(b4_lpure_formals): New.
Use b4_identification.
(YY_USER_FORMALS, YY_USER_ARGS): Remove, replaced by
b4_user_formals and b4_user_args.
(yyexpandGLRStack, yyFail, yyaddDeferredAction, yyglrShiftDefer)
(yyreportAmbiguity): When using a pure parser, also need
the location, and the parse-params.
Adjust callers.
(yyuserAction, yyglrShift, yyreportParseError, yyrecoverParseError):
When using a pure parser, also need the parse-params.
Adjust callers.
* tests/calc.at: Test pure (%pure-parser) and absolutely pure
(%pure-parser + %parse-param) LALR and GLR parsers.
(AT_CHECK_PUSHDEFS, AT_CHECK_POPDEFS): New, define AT_PARAM_IF,
AT_LOCATION_IF, AT_PURE_IF, AT_GLR_IF, AAT_PURE_AND_LOC_IF,
AT_GLR_OR_PARAM_IF, AT_YYERROR_ARG_LOC_IF, AT_YYERROR_SEES_LOC_IF.
(_AT_DATA_CALC_Y): Equip for purity of yyerror.
(_AT_CHECK_CALC_ERROR): Use AT_YYERROR_SEES_LOC_IF.
* tests/cxx-type.at (_AT_TEST_GLR_CALC): Equip for yyerror purity.
* doc/bison.texinfo: Untabify the whole file.
(Parser Function): Document %parse-param, deprecate YYPARSE_PARAM.
(Pure Calling): Document %lex-param, deprecate YYLEX_PARAM.
(Error Reporting): Adjust to these new directives.
Document %error-verbose, deprecate YYERROR_VERBOSE.
Akim Demaille [Sun, 3 Nov 2002 12:16:25 +0000 (12:16 +0000)]
* tests/calc.at: Change all the AT_CHECK_CALC_LALR and
AT_CHECK_CALC_GLR invocations to use % directives, instead of
command line options.
* tests/cxx-type.at: Formatting changes.
Paul Eggert [Sun, 3 Nov 2002 08:42:32 +0000 (08:42 +0000)]
Revamp to fix POSIX incompatibilities, to count columns correctly, and
to check for invalid inputs.
Use mbsnwidth to count columns correctly. Account for tabs, too.
Include mbswidth.h.
(YY_USER_ACTION): Invoke extend_location rather than LOCATION_COLUMNS.
(extend_location): New function.
(YY_LINES): Remove.
Handle CRLF in C code rather than in Lex code.
(YY_INPUT): New macro.
(no_cr_read): New function.
Scan UCNs, even though we don't fully handle them yet.
(convert_ucn_to_byte): New function.
Handle backslash-newline correctly in C code.
(SC_LINE_COMMENT, SC_YACC_COMMENT): New states.
(eols, blanks): Remove. YY_USER_ACTION now counts newlines etc.;
all uses changed.
(tag, splice): New EREs. Do not allow NUL or newline in tags.
Use {splice} wherever C allows backslash-newline.
YY_STEP after space, newline, vertical-tab.
("/*"): BEGIN SC_YACC_COMMENT, not yy_push_state (SC_COMMENT).
(letter, id): Don't assume ASCII; e.g., spell out a-z.
({int}, handle_action_dollar, handle_action_at): Check for integer
overflow.
(YY_STEP): Omit trailing semicolon, so that it's more like C.
(<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>): Allow \0 and \00
as well as \000. Check for UCHAR_MAX, not 255.
Allow \x with an arbitrary positive number of digits, as in C.
Check for overflow here.
Allow \? and UCNs, for compatibility with C.
(handle_symbol_code_dollar): Use quote_n slot 1 to avoid collision
with quote slot used by complain_at.
Paul Eggert [Sun, 3 Nov 2002 08:40:39 +0000 (08:40 +0000)]
(Grammar Outline): Document // comments.
(Symbols): Document that trigraphs have no special meaning in Bison,
nor is backslash-newline allowed.
(Actions): Document that trigraphs have no special meaning.
Paul Eggert [Wed, 30 Oct 2002 09:45:46 +0000 (09:45 +0000)]
* lib/bitset_stats.c (bitset_stats_read, bitset_stats_write):
Check for close failures.
* src/files.h (xfclose): Return void, not int, since it always
returned zero.
* src/files.c (xfclose): Likewise. Report I/O error if ferror
indicates one.
* src/output.c (output_skeleton): Use xfclose rather than fclose
and ferror. xfclose now checks ferror.
* data/glr.c (YYLEFTMOST_STATE): Remove.
(yyreportTree): Use a stack-based leftmost state. This avoids
our continuing battles with bogus warnings about initializers.
Paul Eggert [Wed, 30 Oct 2002 05:38:30 +0000 (05:38 +0000)]
(YYLEFTMOST_STATE): Remove.
(yyreportTree): Use a stack-based leftmost state. This avoids
our continuing battles with bogus warnings about initializers.
Paul Eggert [Fri, 25 Oct 2002 05:14:04 +0000 (05:14 +0000)]
* tests/calc.at (_AT_DATA_CALC_Y): Remove unused strcat declaration.
* tests/cxx-type.at (_AT_TEST_GLR_CALC): Include stdlib.h, since
we use malloc. Don't assume 'A' through 'Z' are contiguous.
Don't assume strdup exists; POSIX says its an XSI extension.
Check for buffer overflow on input.
Paul Eggert [Fri, 25 Oct 2002 05:13:24 +0000 (05:13 +0000)]
(_AT_TEST_GLR_CALC): Include stdlib.h, since
we use malloc. Don't assume 'A' through 'Z' are contiguous.
Don't assume strdup exists; POSIX says its an XSI extension.
Check for buffer overflow on input.
Akim Demaille [Thu, 24 Oct 2002 11:40:27 +0000 (11:40 +0000)]
* src/output.c (output_skeleton): Don't disable M4sugar comments
too soon: it results in comments being expanded.
* data/yacc.c, data/glr.c, data/lalr1.cc: Do it right before the
first output.
Akim Demaille [Thu, 24 Oct 2002 10:01:52 +0000 (10:01 +0000)]
* data/yacc.c (m4_int_type): New.
* data/c.m4 (m4_int_type): Don't use yysigned_char, but `signed
char' as only yacc.c wants K&R portability.
* data/glr.c (yysigned_char): Remove.
* data/lalr1.cc: Rename the trailing b4_name as b4_parser_class_name.
Reported by Quoc Peyrot.
Paul Eggert [Wed, 23 Oct 2002 18:42:04 +0000 (18:42 +0000)]
* src/main.c (main): With --trace=time, report times even if a
non-fatal error occurs. Formerly, the times were reported in some
such cases but not in others.
* src/reader.c (reader): Just return if a complaint has been issued,
instead of exiting, so that 'main' can report times.