+handle_syncline (char *args, location loc)
+{
+ char *after_num;
+ unsigned long int lineno = strtoul (args, &after_num, 10);
+ char *file = strchr (after_num, '"') + 1;
+ *strchr (file, '"') = '\0';
+ if (INT_MAX <= lineno)
+ {
+ warn_at (loc, _("line number overflow"));
+ lineno = INT_MAX;
+ }
+ scanner_cursor.file = current_file = uniqstr_new (file);
+ scanner_cursor.line = lineno;
+ scanner_cursor.column = 1;
+}
+
+
+/*---------------------------------.
+| Report a rule that is too long. |
+`---------------------------------*/
+
+static void
+rule_length_overflow (location loc)
+{
+ fatal_at (loc, _("rule is too long"));
+}
+
+
+/*----------------------------------------------------------------.
+| For a token or comment starting at START, report message MSGID, |
+| which should say that an end marker was found before |
+| the expected TOKEN_END. |
+`----------------------------------------------------------------*/
+
+static void
+unexpected_end (boundary start, char const *msgid, char const *token_end)