bison-patches
[Top][All Lists]
Advanced

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

m4: have b4_percent_define_if_define apply default values lazily


From: Akim Demaille
Subject: m4: have b4_percent_define_if_define apply default values lazily
Date: Sat, 3 Oct 2020 09:28:49 +0200

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 <akim.demaille@gmail.com>
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])




reply via email to

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