Add syncline support and location accessor to internal %define

interfaces.
* data/bison.m4 (b4_percent_define_get_loc): New.
(b4_percent_define_get_syncline): New.
(b4_percent_define_flag_if): Use b4_percent_define_get_loc.
(b4_percent_define_default): Record defining location as line 1 rather
than 0 for the sake of synchronizing #line's, and define
b4_percent_define_syncline(VARIABLE).
(b4_percent_define_check_values): Use b4_percent_define_get_loc.
* src/muscle_tab.c (muscle_syncline_grow): New.
(muscle_code_grow): Use muscle_syncline_grow.
(muscle_percent_define_insert): Use muscle_percent_define_get_loc, and
define b4_percent_define_syncline(VARIABLE).
(muscle_percent_define_get_loc): New.
(muscle_percent_define_get_syncline): New.
(muscle_percent_define_flag_if): Use muscle_percent_define_get_loc, and
remove some unused variables.
(muscle_percent_define_default): Record defining location as line 1
rather than 0 for the sake of synchronizing #line's, and define
b4_percent_define_syncline(VARIABLE).
(muscle_percent_define_check_values): Use
muscle_percent_define_get_loc.
* src/muscle_tab.h (muscle_percent_define_get_loc): Prototype.
(muscle_percent_define_get_syncline): Prototype.
* tests/skeletons.at (%define Boolean variables: invalid skeleton
defaults): Update output for location change.
(Complaining during macro argument expansion): Extend to test
b4_percent_define_get_loc and b4_percent_define_get_syncline errors.
This commit is contained in:
Joel E. Denny
2007-10-08 04:00:13 +00:00
parent 7dc4a6940c
commit 35b8730d01
5 changed files with 181 additions and 34 deletions

View File

@@ -159,7 +159,7 @@ start: ;
]])
AT_CHECK([[bison input.y]], [[1]], [[]],
[[[Bison:b4_percent_define_default]:0.0: invalid value for %define Boolean variable `foo'
[[[Bison:b4_percent_define_default]:1.0: invalid value for %define Boolean variable `foo'
]])
AT_CLEANUP
@@ -216,6 +216,34 @@ AT_CHECK([[bison input2.y]], [[1]], [[]],
[[foof.y:12.11-100.122: fatal error: foofat fubar
]])
AT_DATA([[skel3.c]],
[[b4_complain_at(b4_percent_define_get_loc([[bogus]]), [[bad value]])
]])
AT_DATA([[input3.y]],
[[%skeleton "./skel3.c"
%%
start: ;
]])
AT_CHECK([[bison input3.y]], [[1]], [[]],
[[input3.y: fatal error: undefined %define variable `bogus' passed to b4_percent_define_get_loc
]])
AT_DATA([[skel4.c]],
[[b4_warn_at(b4_percent_define_get_syncline([[bogus]]), [[bad value]])
]])
AT_DATA([[input4.y]],
[[%skeleton "./skel4.c"
%%
start: ;
]])
AT_CHECK([[bison input4.y]], [[1]], [[]],
[[input4.y: fatal error: undefined %define variable `bogus' passed to b4_percent_define_get_syncline
]])
AT_CLEANUP