From: Akim Demaille Date: Mon, 15 Apr 2013 08:05:44 +0000 (+0200) Subject: muscle: let -D/-F support the three kinds of %define variable values X-Git-Tag: v2.7.90~25 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/5fad4d4f094e866b211302f01d556b3bc93350be?ds=inline muscle: let -D/-F support the three kinds of %define variable values 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. --- diff --git a/src/getargs.c b/src/getargs.c index e6f9d766..df310add 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); }