]> git.saurik.com Git - bison.git/blobdiff - src/scan-code.l
named references: fix double free.
[bison.git] / src / scan-code.l
index e3e6b6536e93417ce043d1a36537ed06070e57c4..c13f8805642f8fdb717f290faafd1f86d71aa7d6 100644 (file)
@@ -85,7 +85,7 @@ splice         (\\[ \f\t\v]*\n)*
    named symbol references. Shall be kept synchronized with
    scan-gram.l "letter" and "id". */
 letter   [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]
-id       -*(-|{letter}({letter}|[-0-9])*)
+id       {letter}({letter}|[-0-9])*
 ref      -?[0-9]+|{id}|"["{id}"]"|"$"
 
 %%
@@ -620,7 +620,17 @@ parse_ref (char *cp, symbol_list *rule, int rule_length,
         complain_at_indent (text_loc, &indent, _("invalid reference: %s"),
                             quote (text));
         indent += SUB_INDENT;
-        if (midrule_rhs_index)
+        if (len == 0)
+          {
+            location sym_loc = text_loc;
+            sym_loc.start.column += 1;
+            sym_loc.end = sym_loc.start;
+            const char *format =
+              _("syntax error after `%c', expecting integer, letter,"
+                " `_', `[', or `$'");
+            complain_at_indent (sym_loc, &indent, format, dollar_or_at);
+          }
+        else if (midrule_rhs_index)
           {
             const char *format =
               _("symbol not found in production before $%d: %.*s");