mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 04:13:03 +00:00
fix generated comments
In Bison 3.6.2, the comments with brackets lose their brackets, for improper m4 quotation. * data/skeletons/bison.m4 (b4_gsub): New. * data/skeletons/c-like.m4 (_b4_comment): Use it. * tests/m4.at: Check b4_gsub.
This commit is contained in:
@@ -19,6 +19,27 @@
|
|||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# m4_gsub(STRING, RE1, SUBST1, RE2, SUBST2, ...)
|
||||||
|
# ----------------------------------------------
|
||||||
|
# m4 equivalent of
|
||||||
|
#
|
||||||
|
# $_ = STRING;
|
||||||
|
# s/RE1/SUBST1/g;
|
||||||
|
# s/RE2/SUBST2/g;
|
||||||
|
# ...
|
||||||
|
#
|
||||||
|
# Really similar to m4_bpatsubsts, but behaves properly with quotes.
|
||||||
|
# See m4.at's "Generating Comments". Super inelegant, but so far, I
|
||||||
|
# did not find any better solution.
|
||||||
|
m4_define([b4_gsub],
|
||||||
|
[m4_bpatsubst(m4_bpatsubst(m4_bpatsubst([[[[$1]]]],
|
||||||
|
[$2], [$3]),
|
||||||
|
[$4], [$5]),
|
||||||
|
[$6], [$7])])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## ---------------- ##
|
## ---------------- ##
|
||||||
## Identification. ##
|
## Identification. ##
|
||||||
## ---------------- ##
|
## ---------------- ##
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
# _b4_comment(TEXT, OPEN, CONTINUE, END)
|
# _b4_comment(TEXT, OPEN, CONTINUE, END)
|
||||||
# --------------------------------------
|
# --------------------------------------
|
||||||
# Put TEXT in comment. Avoid trailing spaces: don't indent empty lines.
|
# Put TEXT in comment. Avoid trailing spaces: don't indent empty lines.
|
||||||
@@ -27,9 +28,10 @@
|
|||||||
#
|
#
|
||||||
# Prefix all the output lines with PREFIX.
|
# Prefix all the output lines with PREFIX.
|
||||||
m4_define([_b4_comment],
|
m4_define([_b4_comment],
|
||||||
[$2[]m4_bpatsubsts(m4_expand([$1]),
|
[$2[]b4_gsub(m4_expand([$1]),
|
||||||
[[*]/], [*\\/],
|
[[*]/], [*\\/],
|
||||||
[/[*]], [/\\*], [
|
[/[*]], [/\\*],
|
||||||
|
[
|
||||||
\(.\)], [
|
\(.\)], [
|
||||||
$3\1])$4])
|
$3\1])$4])
|
||||||
|
|
||||||
|
|||||||
30
tests/m4.at
30
tests/m4.at
@@ -29,18 +29,44 @@ AT_DATA([input.m4],
|
|||||||
[[m4@&t@_include(b4_skeletonsdir/[c.m4])
|
[[m4@&t@_include(b4_skeletonsdir/[c.m4])
|
||||||
|
|
||||||
b4_output_begin([output.txt])
|
b4_output_begin([output.txt])
|
||||||
|
|
||||||
|
b4_gsub([[abcd]],
|
||||||
|
[a], [b])
|
||||||
|
b4_gsub([[abcd]],
|
||||||
|
[a], [b],
|
||||||
|
[b], [c],
|
||||||
|
[c], [d])
|
||||||
|
|
||||||
|
_b4_comment([["/* () */"]])
|
||||||
|
_b4_comment([["/* ( */"]])
|
||||||
|
_b4_comment([["/* ) */"]])
|
||||||
|
_b4_comment([["/* [] */"]])
|
||||||
|
|
||||||
b4_comment([["/* () */"]])
|
b4_comment([["/* () */"]])
|
||||||
b4_comment([["/* ( */"]])
|
b4_comment([["/* ( */"]])
|
||||||
b4_comment([["/* ) */"]])
|
b4_comment([["/* ) */"]])
|
||||||
|
b4_comment([["/* [] */"]])
|
||||||
|
|
||||||
b4_output_end([output.txt])
|
b4_output_end([output.txt])
|
||||||
]])
|
]])
|
||||||
|
|
||||||
AT_BISON_CHECK([-S ./input.m4 input.y])
|
AT_BISON_CHECK([-S ./input.m4 input.y])
|
||||||
|
|
||||||
AT_CHECK([cat output.txt], [],
|
AT_CHECK([cat output.txt], [],
|
||||||
[/* "/\* () *\/" */
|
[[
|
||||||
|
[bbcd]
|
||||||
|
[dddd]
|
||||||
|
|
||||||
|
"/\* () *\/"
|
||||||
|
"/\* ( *\/"
|
||||||
|
"/\* ) *\/"
|
||||||
|
"/\* [] *\/"
|
||||||
|
|
||||||
|
/* "/\* () *\/" */
|
||||||
/* "/\* ( *\/" */
|
/* "/\* ( *\/" */
|
||||||
/* "/\* ) *\/" */
|
/* "/\* ) *\/" */
|
||||||
])
|
/* "/\* [] *\/" */
|
||||||
|
|
||||||
|
]])
|
||||||
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|||||||
Reference in New Issue
Block a user