c++: add support for api.position.file and api.location.file

* data/location.cc: Sort includes.
(b4_position_file, b4_location_file): New.
When there's a file for locations but not for positions, include the
definition of position in the location file.
* data/lalr1.cc (b4_shared_declarations): Include the
position/location file when it exists.
Otherwise, define the class.
* data/glr.cc: Likewise.
* tests/input.at (%define file variables): Check them.
* tests/output.at (C++ output): Check various cases with
api.position.file and api.location.file.
This commit is contained in:
Akim Demaille
2018-09-29 10:32:32 +02:00
parent b122a71c83
commit 667588ee8a
6 changed files with 89 additions and 29 deletions

View File

@@ -695,8 +695,9 @@ AT_CHECK_CALC_LALR1_CC([%define parse.error verbose %debug %define api.prefix {c
AT_CHECK_CALC_LALR1_CC([%defines %locations %define parse.error verbose %debug %define api.prefix {calc} %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
AT_CHECK_CALC_LALR1_CC([%locations %define api.stack.file "my-stack.hh"])
AT_CHECK_CALC_LALR1_CC([%locations %defines %define api.stack.file none])
AT_CHECK_CALC_LALR1_CC([%locations %defines %define api.stack.file none %define api.location.file none %define api.position.file none])
AT_CHECK_CALC_LALR1_CC([%defines %locations %define api.stack.file "my-stack.hh"])
AT_CHECK_CALC_LALR1_CC([%defines %locations %define api.stack.file "my-stack.hh" %define api.position.file none %define api.location.file "my-location.hh"])
# --------------------------- #

View File

@@ -1659,12 +1659,21 @@ AT_SETUP([["%define" file variables]])
AT_DATA([[input.y]],
[[%skeleton "lalr1.cc"
%locations
%define api.stack.file bogus
%define api.location.file {bogus}
%define api.position.file bogus
%%
start: %empty;
]])
AT_BISON_CHECK([[-fcaret input.y]], [[1]], [[]],
[[input.y:2.9-22: error: %define variable 'api.stack.file' requires 'none' or '"..."' values
[[input.y:5.9-25: error: %define variable 'api.position.file' requires 'none' or '"..."' values
%define api.position.file bogus
^^^^^^^^^^^^^^^^^
input.y:4.9-25: error: %define variable 'api.location.file' requires 'none' or '"..."' values
%define api.location.file {bogus}
^^^^^^^^^^^^^^^^^
input.y:3.9-22: error: %define variable 'api.stack.file' requires 'none' or '"..."' values
%define api.stack.file bogus
^^^^^^^^^^^^^^
]])

View File

@@ -190,6 +190,31 @@ AT_CHECK_OUTPUT([foo.yy],
[],
[foo.tab.cc foo.tab.hh])
AT_CHECK_OUTPUT([foo.yy],
[%skeleton "lalr1.cc" %defines %define api.stack.file none %locations],
[],
[foo.tab.cc foo.tab.hh location.hh position.hh])
AT_CHECK_OUTPUT([foo.yy],
[%skeleton "lalr1.cc" %defines %define api.stack.file none %locations %define api.position.file none],
[],
[foo.tab.cc foo.tab.hh location.hh])
AT_CHECK_OUTPUT([foo.yy],
[%skeleton "lalr1.cc" %defines %define api.stack.file none %locations %define api.position.file none %define api.location.file none],
[],
[foo.tab.cc foo.tab.hh])
AT_CHECK_OUTPUT([foo.yy],
[%skeleton "lalr1.cc" %defines %define api.stack.file none %locations %define api.position.file none %define api.location.file "foo.loc.hh"],
[],
[foo.loc.hh foo.tab.cc foo.tab.hh])
AT_CHECK_OUTPUT([foo.yy],
[%skeleton "lalr1.cc" %defines %define api.stack.file none %locations %define api.position.file "foo.pos.hh" %define api.location.file "foo.loc.hh"],
[],
[foo.loc.hh foo.pos.hh foo.tab.cc foo.tab.hh])
AT_CHECK_OUTPUT([gram_dir/foo.yy],
[%skeleton "lalr1.cc" %verbose %defines %define api.stack.file "foo.sta.hh" %file-prefix "output_dir/foo"],
[],