mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
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:
18
data/glr.cc
18
data/glr.cc
@@ -242,18 +242,24 @@ b4_namespace_close
|
||||
m4_define([b4_shared_declarations],
|
||||
[m4_pushdef([b4_parse_param], m4_defn([b4_parse_param_orig]))dnl
|
||||
b4_percent_code_get([[requires]])[
|
||||
|
||||
#include <iostream>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <iostream>]b4_defines_if([
|
||||
b4_bison_locations_if([[#include "location.hh"]])])[
|
||||
|
||||
]m4_ifdef([b4_position_file],
|
||||
[[# include "]b4_position_file["]])[
|
||||
]m4_ifdef([b4_location_file],
|
||||
[[# include "]b4_location_file["]])[
|
||||
|
||||
]b4_null_define[
|
||||
|
||||
]b4_YYDEBUG_define[
|
||||
|
||||
]b4_namespace_open[
|
||||
]b4_defines_if([],
|
||||
[b4_bison_locations_if([b4_position_define
|
||||
b4_location_define])])[
|
||||
]b4_bison_locations_if([m4_ifndef([b4_location_file],
|
||||
[m4_ifndef([b4_position_file], [b4_position_define
|
||||
|
||||
])[]b4_location_define])])[
|
||||
|
||||
/// A Bison parser.
|
||||
class ]b4_parser_class_name[
|
||||
|
||||
@@ -165,8 +165,10 @@ m4_define([b4_shared_declarations],
|
||||
]b4_cxx_portability[
|
||||
]m4_ifdef([b4_stack_file],
|
||||
[[# include "]b4_stack_file["]])[
|
||||
]b4_defines_if([[
|
||||
]b4_bison_locations_if([[# include "location.hh"]])])[
|
||||
]m4_ifdef([b4_position_file],
|
||||
[[# include "]b4_position_file["]])[
|
||||
]m4_ifdef([b4_location_file],
|
||||
[[# include "]b4_location_file["]])[
|
||||
]b4_variant_if([b4_variant_includes])[
|
||||
|
||||
]b4_attribute_define[
|
||||
@@ -176,10 +178,11 @@ m4_define([b4_shared_declarations],
|
||||
|
||||
]b4_namespace_open[
|
||||
|
||||
]m4_ifdef([b4_stack_file], [], [b4_stack_define])[
|
||||
]b4_defines_if([],
|
||||
[b4_bison_locations_if([b4_position_define
|
||||
b4_location_define])])[
|
||||
]m4_ifndef([b4_stack_file], [b4_stack_define])[
|
||||
]b4_bison_locations_if([m4_ifndef([b4_location_file],
|
||||
[m4_ifndef([b4_position_file], [b4_position_define
|
||||
|
||||
])[]b4_location_define])])[
|
||||
|
||||
]b4_variant_if([b4_variant_define])[
|
||||
|
||||
|
||||
@@ -18,6 +18,19 @@
|
||||
m4_pushdef([b4_copyright_years],
|
||||
[2002-2015, 2018])
|
||||
|
||||
# b4_position_file
|
||||
# b4_location_file
|
||||
# ----------------
|
||||
# Name of the file containing the position/location class,
|
||||
# if we want this file.
|
||||
b4_percent_define_check_file([b4_position_file],
|
||||
[[api.position.file]],
|
||||
b4_defines_if([[position.hh]]))
|
||||
b4_percent_define_check_file([b4_location_file],
|
||||
[[api.location.file]],
|
||||
b4_defines_if([[location.hh]]))
|
||||
|
||||
|
||||
# b4_position_define
|
||||
# ------------------
|
||||
# Define class position.
|
||||
@@ -287,16 +300,16 @@ m4_define([b4_location_define],
|
||||
]])
|
||||
|
||||
|
||||
b4_defines_if([
|
||||
b4_output_begin([b4_dir_prefix[]position.hh])
|
||||
b4_copyright([Positions for Bison parsers in C++])[
|
||||
m4_ifdef([b4_position_file], [[
|
||||
]b4_output_begin([b4_dir_prefix[]b4_position_file])[
|
||||
]b4_copyright([Positions for Bison parsers in C++])[
|
||||
|
||||
/**
|
||||
** \file ]b4_dir_prefix[position.hh
|
||||
** \file ]b4_dir_prefix[]b4_position_file[
|
||||
** Define the ]b4_namespace_ref[::position class.
|
||||
*/
|
||||
|
||||
]b4_cpp_guard_open([b4_dir_prefix[]position.hh])[
|
||||
]b4_cpp_guard_open([b4_dir_prefix[]b4_position_file])[
|
||||
|
||||
# include <algorithm> // std::max
|
||||
# include <iostream>
|
||||
@@ -307,28 +320,31 @@ b4_copyright([Positions for Bison parsers in C++])[
|
||||
]b4_namespace_open[
|
||||
]b4_position_define[
|
||||
]b4_namespace_close[
|
||||
]b4_cpp_guard_close([b4_dir_prefix[]position.hh])
|
||||
b4_output_end
|
||||
]b4_cpp_guard_close([b4_dir_prefix[]b4_position_file])[
|
||||
]b4_output_end[
|
||||
]])
|
||||
|
||||
|
||||
b4_output_begin([b4_dir_prefix[]location.hh])
|
||||
b4_copyright([Locations for Bison parsers in C++])[
|
||||
m4_ifdef([b4_location_file], [[
|
||||
]b4_output_begin([b4_dir_prefix[]b4_location_file])[
|
||||
]b4_copyright([Locations for Bison parsers in C++])[
|
||||
|
||||
/**
|
||||
** \file ]b4_dir_prefix[location.hh
|
||||
** \file ]b4_dir_prefix[]b4_location_file[
|
||||
** Define the ]b4_namespace_ref[::location class.
|
||||
*/
|
||||
|
||||
]b4_cpp_guard_open([b4_dir_prefix[]location.hh])[
|
||||
]b4_cpp_guard_open([b4_dir_prefix[]b4_location_file])[
|
||||
|
||||
# include "position.hh"
|
||||
]m4_ifdef([b4_position_file], [[#] include "b4_position_file"], [b4_null_define])[
|
||||
|
||||
]b4_namespace_open[
|
||||
]m4_ifndef([b4_position_file], [b4_position_define])[
|
||||
]b4_location_define[
|
||||
]b4_namespace_close[
|
||||
]b4_cpp_guard_close([b4_dir_prefix[]location.hh])
|
||||
b4_output_end
|
||||
])
|
||||
]b4_cpp_guard_close([b4_dir_prefix[]b4_location_file])[
|
||||
]b4_output_end[
|
||||
]])
|
||||
|
||||
|
||||
m4_popdef([b4_copyright_years])
|
||||
|
||||
Reference in New Issue
Block a user