]> git.saurik.com Git - bison.git/blobdiff - src/parse-gram.y
* NEWS, data/c++-skel.m4, data/c++.m4, data/c-skel.m4, data/c.m4,
[bison.git] / src / parse-gram.y
index 1fca61d36e623b01fe7c8614e3d7ecbce8a04a1b..4d463a9160876c80ec004e66d43980bea89befdf 100644 (file)
@@ -228,21 +228,24 @@ prologue_declaration:
       code_props_plain_init (&plain_code, $1, @1);
       code_props_translate_code (&plain_code);
       gram_scanner_last_string_free ();
-      prologue_augment (plain_code.code, @1, union_seen);
+      muscle_code_grow (union_seen ? "post_prologue" : "pre_prologue",
+                        plain_code.code, @1);
       code_scanner_last_string_free ();
     }
 | "%debug"                         { debug_flag = true; }
 | "%define" variable content.opt
     {
-      char const name_prefix[] = "percent_define_";
-      char *name = xmalloc (sizeof name_prefix + strlen ($2));
+      char const name_prefix[] = "percent_define(";
+      size_t length = strlen ($2);
+      char *name = xmalloc (sizeof name_prefix + length + 1);
       strcpy (name, name_prefix);
       strcpy (name + sizeof name_prefix - 1, $2);
+      strcpy (name + sizeof name_prefix - 1 + length, ")");
       if (muscle_find_const (name))
         warn_at (@2, _("%s `%s' redefined"), "%define variable", $2);
       MUSCLE_INSERT_STRING (uniqstr_new (name), $3);
       free (name);
-      muscle_grow_user_name_list ("user_percent_define_variables", $2, @2);
+      muscle_grow_user_name_list ("percent_define_user_variables", $2, @2);
     }
 | "%defines"                       { defines_flag = true; }
 | "%defines" STRING
@@ -321,19 +324,21 @@ grammar_declaration:
     }
 | "%code" braceless
     {
-      muscle_code_grow ("percent_code", $2, @2);
+      muscle_code_grow ("percent_code_unqualified", $2, @2);
       code_scanner_last_string_free ();
     }
 | "%code" ID braceless
     {
-      char const name_prefix[] = "percent_code_";
-      char *name = xmalloc (sizeof name_prefix + strlen ($2));
+      char const name_prefix[] = "percent_code(";
+      size_t length = strlen ($2);
+      char *name = xmalloc (sizeof name_prefix + length + 1);
       strcpy (name, name_prefix);
       strcpy (name + sizeof name_prefix - 1, $2);
+      strcpy (name + sizeof name_prefix - 1 + length, ")");
       muscle_code_grow (uniqstr_new (name), $3, @3);
       free (name);
       code_scanner_last_string_free ();
-      muscle_grow_user_name_list ("user_percent_code_qualifiers", $2, @2);
+      muscle_grow_user_name_list ("percent_code_user_qualifiers", $2, @2);
     }
 ;
 
@@ -350,28 +355,11 @@ union_name:
 ;
 
 grammar_declaration:
-  "%union" union_name "{...}"
+  "%union" union_name braceless
     {
-      char const *body = $3;
-
-      /* Concatenate the %union bodies.  If this is the first %union, make sure
-        the synchronization line appears after the opening '{' so as not to
-        confuse Doxygen.  Otherwise, turn the previous %union's trailing '}'
-        into '\n', and omit the new %union's leading '{'.  */
-      if (!union_seen)
-       {
-         muscle_grow ("stype", "{", "");
-       }
-      else
-       {
-         char *code = muscle_find ("stype");
-         code[strlen (code) - 1] = '\n';
-       }
-      body++;
-
       union_seen = true;
-      muscle_code_grow ("stype", body, @3);
-      gram_scanner_last_string_free ();
+      muscle_code_grow ("stype", $3, @3);
+      code_scanner_last_string_free ();
     }
 ;
 
@@ -601,7 +589,9 @@ string_as_id:
   STRING
     {
       $$ = symbol_get (quotearg_style (c_quoting_style, $1), @1);
-      symbol_class_set ($$, token_sym, @1, false);
+      symbol_class_set ($$,
+                        current_class == unknown_sym
+                        ? token_sym : current_class, @1, false);
     }
 ;