mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
* tests/testsuite.at (AT_CHECK): When checking if $1 starts with
`bison ', use m4_index instead of m4_substr since chopping up a string containing M4-special characters causes problems here. Fix a couple of bugs related to special characters in user-specified file names, and make it easier for skeletons to compute output file names with the same file name prefix as Bison-computed output file names. * data/glr.cc, data/push.c, data/yacc.c: In @output, use b4_parser_file_name and b4_spec_defines_file instead of @output_parser_name@ and @output_header_name@, which are now redundant. * data/glr.c, data/lalr1.cc: Likewise. Also, in header #include's, use b4_parser_file_name, b4_spec_defines_file, and the new @basename(FILENAME@) instead of @output_parser_name@ and @output_header_name@, which inappropriately escaped the file names as C string literals. * src/files.c (all_but_ext): Remove static qualifier. (compute_output_file_names): Move `free (all_but_ext)' to... (output_file_names_free): ... here since all_but_ext is needed later. * src/files.h (all_but_ext): Extern. * src/muscle_tab.h (MUSCLE_INSERT_STRING_RAW): New macro that does exactly what MUSCLE_INSERT_STRING used to do. (MUSCLE_INSERT_STRING): Use MUSCLE_OBSTACK_SGROW so that M4-special characters are escaped properly. * src/output.c (prepare): Define muscle file_name_all_but_ext as all_but_ext. For pkgdatadir muscle, maintain previous functionality by using MUSCLE_INSERT_STRING_RAW instead of MUSCLE_INSERT_STRING. The problem is that b4_pkgdatadir is used inside m4_include in the skeletons, so digraphs would never be expanded. Hopefully no one has M4-special characters in his Bison installation path. * src/scan-skel.l: Don't parse @output_header_name@ and @output_parser_name@ anymore since they're now redundant. In @output, use decode_at_digraphs. Parse a new @basename command that invokes last_component. (decode_at_digraphs): New. (BASE_QPUTS): Remove unused. * tests/output.at (AT_CHECK_OUTPUT_FILE_NAME): New macro. (Output file name): New tests.
This commit is contained in:
@@ -23,7 +23,7 @@ AT_BANNER([[Output file names.]])
|
||||
# [ADDITIONAL-TESTS])
|
||||
# -----------------------------------------------------------------------------
|
||||
m4_define([AT_CHECK_OUTPUT],
|
||||
[AT_SETUP([Output files: $2 $3 $5])
|
||||
[AT_SETUP([[Output files: $2 $3 $5]])
|
||||
case "$1" in
|
||||
*/*) mkdir `echo "$1" | sed 's,/.*,,'`;;
|
||||
esac
|
||||
@@ -149,3 +149,52 @@ AT_CHECK_CONFLICTING_OUTPUT([foo.y],
|
||||
[%skeleton "lalr1.cc" %defines], [--graph="location.hh"],
|
||||
[foo.y: warning: conflicting outputs to file `location.hh'
|
||||
])
|
||||
|
||||
|
||||
# AT_CHECK_OUTPUT_FILE_NAME(FILE-NAME-PREFIX, [ADDITIONAL-TESTS])
|
||||
# -----------------------------------------------------------------------------
|
||||
m4_define([AT_CHECK_OUTPUT_FILE_NAME],
|
||||
[AT_SETUP([Output file name: $1])
|
||||
|
||||
AT_DATA([glr.y],
|
||||
[[%glr-parser
|
||||
%code {
|
||||
int yylex (void);
|
||||
void yyerror (const char *);
|
||||
}
|
||||
%%
|
||||
start: {};
|
||||
]])
|
||||
AT_CHECK([bison -o "AS_ESCAPE([$1.c])" --defines="AS_ESCAPE([$1.h])" glr.y])
|
||||
AT_CHECK([ls "AS_ESCAPE([$1.c])" "AS_ESCAPE([$1.h])"], [], [ignore])
|
||||
AT_COMPILE([glr.o], [-c "AS_ESCAPE([$1.c])"])
|
||||
$2
|
||||
|
||||
AT_DATA([cxx.y],
|
||||
[[%skeleton "lalr1.cc"
|
||||
%code { int yylex (yy::parser::semantic_type*); }
|
||||
%%
|
||||
start: {};
|
||||
]])
|
||||
AT_CHECK([bison -o "AS_ESCAPE([$1.c])" --defines="AS_ESCAPE([$1.h])" cxx.y])
|
||||
AT_CHECK([ls "AS_ESCAPE([$1.c])" "AS_ESCAPE([$1.h])"], [], [ignore])
|
||||
AT_COMPILE_CXX([cxx.o], [-c "AS_ESCAPE([$1.c])"])
|
||||
$2
|
||||
|
||||
AT_CLEANUP
|
||||
])
|
||||
|
||||
# Notice that the header file name here cannot contain
|
||||
# `"' since FILENAME in `#include "FILENAME"' cannot.
|
||||
AT_CHECK_OUTPUT_FILE_NAME([[`~!@#$%^&*()-=_+{}[]|\:;<>, .']])
|
||||
AT_CHECK_OUTPUT_FILE_NAME([[(]])
|
||||
AT_CHECK_OUTPUT_FILE_NAME([[)]])
|
||||
AT_CHECK_OUTPUT_FILE_NAME([[#]])
|
||||
AT_CHECK_OUTPUT_FILE_NAME([[@@]])
|
||||
AT_CHECK_OUTPUT_FILE_NAME([[@{]])
|
||||
AT_CHECK_OUTPUT_FILE_NAME([[@}]])
|
||||
|
||||
# Bison isn't M4-quoting file names before inserting them into muscles, so
|
||||
# these tests currently fail.
|
||||
AT_CHECK_OUTPUT_FILE_NAME([[@<:@]])
|
||||
AT_CHECK_OUTPUT_FILE_NAME([[@:>@]])
|
||||
|
||||
Reference in New Issue
Block a user