bison-patches
[Top][All Lists]
Advanced

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

[PATCH 8/9] muscle: let -D/-F support the three kinds of %define variabl


From: Akim Demaille
Subject: [PATCH 8/9] muscle: let -D/-F support the three kinds of %define variable values
Date: Mon, 15 Apr 2013 10:58:27 +0200

See http://lists.gnu.org/archive/html/bison-patches/2013-04/msg00012.html

* src/getargs.c (getargs): Recognize {value} and "value" for -D and -F.
---
 src/getargs.c | 29 ++++++++++++++++++++++-------
 1 file changed, 22 insertions(+), 7 deletions(-)

diff --git a/src/getargs.c b/src/getargs.c
index e6f9d76..df310ad 100644
--- a/src/getargs.c
+++ b/src/getargs.c
@@ -574,16 +574,31 @@ getargs (int argc, char *argv[])
         /* Certain long options cause getopt_long to return 0.  */
         break;
 
-      case 'D': /* -DNAME[=VALUE]. */
-      case 'F': /* -FNAME[=VALUE]. */
+      case 'D': /* -DNAME[=(VALUE|"VALUE"|{VALUE})]. */
+      case 'F': /* -FNAME[=(VALUE|"VALUE"|{VALUE})]. */
         {
-          char* name = optarg;
-          char* value = strchr (optarg, '=');
+          char *name = optarg;
+          char *value = strchr (optarg, '=');
+          muscle_kind kind = muscle_keyword;
           if (value)
-            *value++ = 0;
+            {
+              char *end = value + strlen (value) - 1;
+              *value++ = 0;
+              if (*value == '{' && *end == '}')
+                {
+                  kind = muscle_code;
+                  ++value;
+                  *end = 0;
+                }
+              else if (*value == '"' && *end == '"')
+                {
+                  kind = muscle_string;
+                  ++value;
+                  *end = 0;
+                }
+            }
           muscle_percent_define_insert (name, command_line_location (),
-                                        muscle_string,
-                                        value ? value : "",
+                                        kind, value ? value : "",
                                         c == 'D' ? MUSCLE_PERCENT_DEFINE_D
                                                  : MUSCLE_PERCENT_DEFINE_F);
         }
-- 
1.8.2




reply via email to

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