mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
* data/bison.m4 (b4_percent_define_flag_if): Correct comments on how values are interpreted. * doc/bison.texinfo (Decl Summary): Clean up and extend %define documentation a little more. * src/muscle_tab.c (MUSCLE_USER_NAME_CONVERT, muscle_percent_define_insert, muscle_percent_code_grow): New functions/macros. * src/muscle_tab.h (muscle_percent_define_insert, muscle_percent_code_grow): Prototype. * src/parse-gram.y (prologue_declaration): Use muscle_percent_define_insert and muscle_percent_code_grow when parsing %define and %code directives. Make it easy to share %define boolean variables between the front-end and back-end. Though not used yet, this will be useful in the future. * data/bison.m4 (b4_check_user_names): Rewrite comments to talk about Bison uses of names rather than just skeleton uses of names. (b4_percent_define_get, b4_percent_define_ifdef): Rename b4_percent_define_skeleton_variables(VARIABLE) to b4_percent_define_bison_variables(VARIABLE). (b4_percent_code_get, b4_percent_code_ifdef): Rename b4_percent_code_skeleton_qualifiers(QUALIFIER) to b4_percent_code_bison_qualifiers(QUALIFIER). (b4_check_user_names_wrap): Update for renames. * src/muscle_tab.c, src/muscle_tab.h (muscle_percent_define_flag_if, muscle_percent_define_default): New functions mimicking b4_percent_define_flag_if and b4_percent_define_default. For %define variables, report locations for invalid values and redefinitions. * data/bison.m4 (b4_percent_define_flag_if): Read b4_percent_define_loc(VARIABLE) to report the location of an invalid value for VARIABLE. (b4_percent_define_default): Save a special location in b4_percent_define_loc(VARIABLE) in case the default value for VARIABLE must later be reported as invalid. * src/muscle_tab.c (muscle_location_grow, muscle_location_decode): New functions. (muscle_percent_define_insert): Record the location of VARIABLE in muscle percent_define_loc(VARIABLE), and use it to report the previous location for a redefinition. (muscle_percent_define_flag_if): Update like b4_percent_define_flag_if. (muscle_percent_define_default): Update like b4_percent_define_default. (muscle_grow_user_name_list): Rename to... (muscle_user_name_list_grow): ... this for consistency and use muscle_location_grow. * src/muscle_tab.h (muscle_location_grow): Prototype. * tests/input.at (%define errors): Update expected output. * tests/skeletons.at (%define boolean variables: invalid skeleton defaults): New test case.
172 lines
3.4 KiB
Plaintext
172 lines
3.4 KiB
Plaintext
# Checking skeleton support. -*- Autotest -*-
|
|
# Copyright (C) 2007 Free Software Foundation, Inc.
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2, or (at your option)
|
|
# any later version.
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
# 02110-1301, USA.
|
|
|
|
AT_BANNER([[Skeleton Support.]])
|
|
|
|
## ------------------------------ ##
|
|
## Relative skeleton file names. ##
|
|
## ------------------------------ ##
|
|
|
|
AT_SETUP([[Relative skeleton file names]])
|
|
|
|
AT_CHECK([[mkdir tmp]])
|
|
|
|
AT_DATA([[tmp/skel.c]],
|
|
[[m4@&t@_divert_push(0)d@&t@nl
|
|
@output(b4_parser_file_name@)d@&t@nl
|
|
b4_percent_define_get([[test]])
|
|
m4@&t@_divert_pop(0)
|
|
]])
|
|
|
|
AT_DATA([[skel.c]],
|
|
[[m4@&t@_divert_push(0)d@&t@nl
|
|
@output(b4_parser_file_name@)d@&t@nl
|
|
b4_percent_define_get([[test]]) -- Local
|
|
m4@&t@_divert_pop(0)
|
|
]])
|
|
|
|
AT_DATA([[tmp/input-gram.y]],
|
|
[[%skeleton "./skel.c"
|
|
%define test "Hello World"
|
|
%%
|
|
start: ;
|
|
]])
|
|
|
|
AT_DATA([[input-gram.y]],
|
|
[[%skeleton "./skel.c"
|
|
%define test "Hello World"
|
|
%%
|
|
start: ;
|
|
]])
|
|
|
|
AT_DATA([[tmp/input-cmd-line.y]],
|
|
[[%define test "Hello World"
|
|
%%
|
|
start: ;
|
|
]])
|
|
|
|
AT_CHECK([[bison tmp/input-gram.y]])
|
|
AT_CHECK([[cat input-gram.tab.c]], [[0]],
|
|
[[Hello World
|
|
]])
|
|
|
|
AT_CHECK([[bison input-gram.y]])
|
|
AT_CHECK([[cat input-gram.tab.c]], [[0]],
|
|
[[Hello World -- Local
|
|
]])
|
|
|
|
AT_CHECK([[bison --skeleton=tmp/skel.c tmp/input-cmd-line.y]])
|
|
AT_CHECK([[cat input-cmd-line.tab.c]], [[0]],
|
|
[[Hello World
|
|
]])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ------------------------------- ##
|
|
## Installed skeleton file names. ##
|
|
## ------------------------------- ##
|
|
|
|
AT_SETUP([[Installed skeleton file names]])
|
|
|
|
m4_pushdef([AT_GRAM],
|
|
[[%{
|
|
#include <stdio.h>
|
|
void yyerror (char const *msg);
|
|
int yylex (void);
|
|
%}
|
|
|
|
%error-verbose
|
|
%token 'a'
|
|
|
|
%%
|
|
|
|
start: ;
|
|
|
|
%%
|
|
|
|
void
|
|
yyerror (char const *msg)
|
|
{
|
|
fprintf (stderr, "%s\n", msg);
|
|
}
|
|
|
|
int
|
|
yylex (void)
|
|
{
|
|
return 'a';
|
|
}
|
|
|
|
int
|
|
main (void)
|
|
{
|
|
return yyparse ();
|
|
}
|
|
]])
|
|
|
|
AT_DATA([[input-cmd-line.y]],
|
|
[AT_GRAM])
|
|
|
|
AT_DATA([[input-gram.y]],
|
|
[[%skeleton "yacc.c"]
|
|
AT_GRAM])
|
|
|
|
AT_CHECK([[bison --skeleton=yacc.c -o input-cmd-line.c input-cmd-line.y]])
|
|
AT_COMPILE([[input-cmd-line]])
|
|
AT_PARSER_CHECK([[./input-cmd-line]], [[1]], [],
|
|
[[syntax error, unexpected 'a', expecting $end
|
|
]])
|
|
|
|
AT_CHECK([[bison -o input-gram.c input-gram.y]])
|
|
AT_COMPILE([[input-gram]])
|
|
AT_PARSER_CHECK([[./input-gram]], [[1]], [],
|
|
[[syntax error, unexpected 'a', expecting $end
|
|
]])
|
|
|
|
m4_popdef([AT_GRAM])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ------------------------------------------------------ ##
|
|
## %define boolean variables: invalid skeleton defaults. ##
|
|
## ------------------------------------------------------ ##
|
|
|
|
AT_SETUP([[%define boolean variables: invalid skeleton defaults]])
|
|
|
|
AT_CHECK([[mkdir tmp]])
|
|
|
|
AT_DATA([[skel.c]],
|
|
[[b4_percent_define_default([[foo]], [[bogus value]])
|
|
b4_percent_define_flag_if([[foo]])
|
|
]])
|
|
|
|
AT_DATA([[input.y]],
|
|
[[%skeleton "./skel.c"
|
|
%%
|
|
start: ;
|
|
]])
|
|
|
|
AT_CHECK([[bison input.y]], [[1]], [[]],
|
|
[[[Bison:b4_percent_define_default]:0.0: invalid value for %define boolean variable `foo'
|
|
]])
|
|
|
|
AT_CLEANUP
|
|
|
|
|