bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 3/3] fix generated comments


From: Akim Demaille
Subject: [PATCH 3/3] fix generated comments
Date: Fri, 22 May 2020 20:31:55 +0200

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.
---
 data/skeletons/bison.m4  | 21 +++++++++++++++++++++
 data/skeletons/c-like.m4 |  8 +++++---
 tests/m4.at              | 30 ++++++++++++++++++++++++++++--
 3 files changed, 54 insertions(+), 5 deletions(-)

diff --git a/data/skeletons/bison.m4 b/data/skeletons/bison.m4
index 10bdfcb2..637d2fcb 100644
--- a/data/skeletons/bison.m4
+++ b/data/skeletons/bison.m4
@@ -19,6 +19,27 @@
 # 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.  ##
 ## ---------------- ##
diff --git a/data/skeletons/c-like.m4 b/data/skeletons/c-like.m4
index fb0dc53b..1e5ab02c 100644
--- a/data/skeletons/c-like.m4
+++ b/data/skeletons/c-like.m4
@@ -17,6 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+
 # _b4_comment(TEXT, OPEN, CONTINUE, END)
 # --------------------------------------
 # Put TEXT in comment.  Avoid trailing spaces: don't indent empty lines.
@@ -27,9 +28,10 @@
 #
 # Prefix all the output lines with PREFIX.
 m4_define([_b4_comment],
-[$2[]m4_bpatsubsts(m4_expand([$1]),
-                   [[*]/], [*\\/],
-                   [/[*]], [/\\*], [
+[$2[]b4_gsub(m4_expand([$1]),
+            [[*]/], [*\\/],
+            [/[*]], [/\\*],
+            [
 \(.\)], [
 $3\1])$4])
 
diff --git a/tests/m4.at b/tests/m4.at
index 440e975a..6a2ff83f 100644
--- a/tests/m4.at
+++ b/tests/m4.at
@@ -29,18 +29,44 @@ AT_DATA([input.m4],
 [[m4@&t@_include(b4_skeletonsdir/[c.m4])
 
 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_output_end([output.txt])
 ]])
 
 AT_BISON_CHECK([-S ./input.m4 input.y])
 
 AT_CHECK([cat output.txt], [],
-[/* "/\* () *\/"  */
+[[
+[bbcd]
+[dddd]
+
+"/\* () *\/"
+"/\* (  *\/"
+"/\*  ) *\/"
+"/\* [] *\/"
+
+/* "/\* () *\/"  */
 /* "/\* (  *\/"  */
 /* "/\*  ) *\/"  */
-])
+/* "/\* [] *\/"  */
+
+]])
 
 AT_CLEANUP
-- 
2.26.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]