X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/f24695eff98c1d8c19b6d9fe8482cc2eca07e6b2..026816664ff8283a55f91915843a8ff0ac5cf86c:/src/getargs.c diff --git a/src/getargs.c b/src/getargs.c index 02548650..1fd9cfa5 100644 --- a/src/getargs.c +++ b/src/getargs.c @@ -61,7 +61,6 @@ int skeleton_prio = default_prio; const char *skeleton = NULL; int language_prio = default_prio; struct bison_language const *language = &valid_languages[0]; -const char *include = NULL; /** Decode an option's key. * @@ -465,12 +464,10 @@ static char const short_options[] = "b:" "d" "f::" - "e" "g::" "h" "k" "l" - "n" "o:" "p:" "r:" @@ -500,7 +497,6 @@ static struct option const long_options[] = /* Parser. */ { "name-prefix", required_argument, 0, 'p' }, - { "include", required_argument, 0, 'I' }, /* Output. */ { "file-prefix", required_argument, 0, 'b' }, @@ -529,7 +525,6 @@ static struct option const long_options[] = { "force-define", required_argument, 0, 'F' }, { "locations", no_argument, 0, LOCATIONS_OPTION }, { "no-lines", no_argument, 0, 'l' }, - { "raw", no_argument, 0, 0 }, { "skeleton", required_argument, 0, 'S' }, { "language", required_argument, 0, 'L' }, { "token-table", no_argument, 0, 'k' }, @@ -574,24 +569,36 @@ 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 (), - value ? value : "", + kind, value ? value : "", c == 'D' ? MUSCLE_PERCENT_DEFINE_D : MUSCLE_PERCENT_DEFINE_F); } break; - case 'I': - include = AS_FILE_NAME (optarg); - break; - case 'L': language_argmatch (optarg, command_line_prio, command_line_location ()); @@ -666,7 +673,8 @@ getargs (int argc, char *argv[]) case 't': muscle_percent_define_insert ("parse.trace", - command_line_location (), "", + command_line_location (), + muscle_keyword, "", MUSCLE_PERCENT_DEFINE_D); break;