m4: have b4_percent_define_if_define apply default values lazily

Akim Demaille <[email protected]>
Newsgroups gmane.comp.parsers.bison.patches
Message-ID <[email protected]>
Hi Adela,

With this change, you should be able to have api.token.raw work
the way you wanted in D.

Cheers!

commit e66673aa64aae0e5422e780abea9cbcb99b7731e
Author: Akim Demaille <[email protected]>
Date:   Sat Oct 3 08:57:54 2020 +0200

    m4: have b4_percent_define_if_define apply default values lazily
    
    Currently `b4_percent_define_ifdef([foo])` assigns a default value to
    `foo` when invoked.  As a consequence, skeletons such as lalr1.d
    cannot specify their specific default values: `foo` was defined in
    bison.m4.
    
    Instead, provide `foo` with a default value when `b4_foo_if` is
    invoked.
    
    I could not measure a runtime difference between both cases.
    
    * data/skeletons/bison.m4 (_b4_percent_define_define): New.
    Helps getting rid of spurious indentation that resulted in spurious
    white space in the output.
    (b4_percent_define_if_define): Move the definition to...
    (_b4_percent_define_if_define): when the defined macros is called.

diff --git a/data/skeletons/bison.m4 b/data/skeletons/bison.m4
index 851524fe..bd16190d 100644
--- a/data/skeletons/bison.m4
+++ b/data/skeletons/bison.m4
@@ -969,15 +969,18 @@ m4_define([b4_percent_define_flag_if],
 # For example:
 #
 #   b4_percent_define_default([[foo]], [[default value]])
+m4_define([_b4_percent_define_define],
+[m4_define([b4_percent_define(]$1[)], [$2])dnl
+m4_define([b4_percent_define_kind(]$1[)],
+          [m4_default([$3], [keyword])])dnl
+m4_define([b4_percent_define_loc(]$1[)],
+          [[[[<skeleton default value>:-1.-1]],
+            [[<skeleton default value>:-1.-1]]]])dnl
+m4_define([b4_percent_define_syncline(]$1[)], [[]])])
+
 m4_define([b4_percent_define_default],
 [_b4_percent_define_ifdef([$1], [],
-           [m4_define([b4_percent_define(]$1[)], [$2])dnl
-            m4_define([b4_percent_define_kind(]$1[)],
-                      [m4_default([$3], [keyword])])dnl
-            m4_define([b4_percent_define_loc(]$1[)],
-                      [[[[<skeleton default value>:-1.-1]],
-                        [[<skeleton default value>:-1.-1]]]])dnl
-            m4_define([b4_percent_define_syncline(]$1[)], [[]])])])
+                          [_b4_percent_define_define($@)])])
 
 
 # b4_percent_define_if_define(NAME, [VARIABLE = NAME])
@@ -987,11 +990,12 @@ m4_define([b4_percent_define_default],
 # to '_'.
 m4_define([_b4_percent_define_if_define],
 [m4_define(m4_bpatsubst([b4_$1_if], [[-.]], [_]),
-           [b4_percent_define_flag_if(m4_default([$2], [$1]),
-                                      [$3], [$4])])])
+           [b4_percent_define_default([m4_default([$2], [$1])], [[false]])dnl
+b4_percent_define_flag_if(m4_default([$2], [$1]),
+                                     [$3], [$4])])])
+
 m4_define([b4_percent_define_if_define],
-[b4_percent_define_default([m4_default([$2], [$1])], [[false]])
-_b4_percent_define_if_define([$1], [$2], $[1], $[2])])
+[_b4_percent_define_if_define([$1], [$2], $[1], $[2])])
 
 
 # b4_percent_define_check_kind(VARIABLE, KIND, [DIAGNOSTIC = complain])
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.