Module Name:    src
Committed By:   christos
Date:           Sun Jan  4 01:34:20 UTC 2015

Modified Files:
        src/external/bsd/byacc/dist: btyaccpar.c defs.h error.c main.c
            mstring.c output.c reader.c yaccpar.c
        src/external/bsd/byacc/include: config.h

Log Message:
Implement some more bison features (incomplete!!!)
This handles the mesa/gallium parser but the %error-verbose part needs a
little more work.


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1 -r1.2 src/external/bsd/byacc/dist/btyaccpar.c \
    src/external/bsd/byacc/dist/yaccpar.c
cvs rdiff -u -r1.8 -r1.9 src/external/bsd/byacc/dist/defs.h
cvs rdiff -u -r1.9 -r1.10 src/external/bsd/byacc/dist/error.c
cvs rdiff -u -r1.10 -r1.11 src/external/bsd/byacc/dist/main.c \
    src/external/bsd/byacc/dist/reader.c
cvs rdiff -u -r1.2 -r1.3 src/external/bsd/byacc/dist/mstring.c
cvs rdiff -u -r1.11 -r1.12 src/external/bsd/byacc/dist/output.c
cvs rdiff -u -r1.3 -r1.4 src/external/bsd/byacc/include/config.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/bsd/byacc/dist/btyaccpar.c
diff -u src/external/bsd/byacc/dist/btyaccpar.c:1.1.1.1 src/external/bsd/byacc/dist/btyaccpar.c:1.2
--- src/external/bsd/byacc/dist/btyaccpar.c:1.1.1.1	Sat Jan  3 17:58:23 2015
+++ src/external/bsd/byacc/dist/btyaccpar.c	Sat Jan  3 20:34:20 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: btyaccpar.c,v 1.1.1.1 2015/01/03 22:58:23 christos Exp $	*/
+/*	$NetBSD: btyaccpar.c,v 1.2 2015/01/04 01:34:20 christos Exp $	*/
 
 /* This file generated automatically using
  * @Id: skel2c,v 1.3 2014/04/06 19:48:04 tom Exp @
@@ -451,6 +451,10 @@ const char *const body_2[] =
     "        fprintf(stderr, \"%sdebug[<# of symbols on state stack>]\\n\", YYPREFIX);",
     "#endif",
     "",
+    0
+};
+
+const char *const body_3[] = {
 #if defined(YYBTYACC)
     "#if YYBTYACC",
     "    yyps = yyNewState(0); if (yyps == 0) goto yyenomem;",
Index: src/external/bsd/byacc/dist/yaccpar.c
diff -u src/external/bsd/byacc/dist/yaccpar.c:1.1.1.1 src/external/bsd/byacc/dist/yaccpar.c:1.2
--- src/external/bsd/byacc/dist/yaccpar.c:1.1.1.1	Sat Jan  3 17:58:23 2015
+++ src/external/bsd/byacc/dist/yaccpar.c	Sat Jan  3 20:34:20 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: yaccpar.c,v 1.1.1.1 2015/01/03 22:58:23 christos Exp $	*/
+/*	$NetBSD: yaccpar.c,v 1.2 2015/01/04 01:34:20 christos Exp $	*/
 
 /* This file generated automatically using
  * @Id: skel2c,v 1.3 2014/04/06 19:48:04 tom Exp @
@@ -211,6 +211,11 @@ const char *const body_2[] =
     "    }",
     "#endif",
     "",
+    0,
+};
+
+const char *const body_3[] =
+{
     "    yynerrs = 0;",
     "    yyerrflag = 0;",
     "    yychar = YYEMPTY;",

Index: src/external/bsd/byacc/dist/defs.h
diff -u src/external/bsd/byacc/dist/defs.h:1.8 src/external/bsd/byacc/dist/defs.h:1.9
--- src/external/bsd/byacc/dist/defs.h:1.8	Sat Jan  3 18:22:52 2015
+++ src/external/bsd/byacc/dist/defs.h	Sat Jan  3 20:34:20 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: defs.h,v 1.8 2015/01/03 23:22:52 christos Exp $	*/
+/*	$NetBSD: defs.h,v 1.9 2015/01/04 01:34:20 christos Exp $	*/
 
 #if HAVE_NBTOOL_CONFIG_H
 #include "nbtool_config.h"
@@ -123,10 +123,13 @@
 #define LEX_PARAM 14
 #define POSIX_YACC 15
 #define TOKEN_TABLE 16
+#define ERROR_VERBOSE 17
+#define XXXDEBUG 18
 
 #if defined(YYBTYACC)
-#define LOCATIONS 17
-#define DESTRUCTOR 18
+#define LOCATIONS 19
+#define DESTRUCTOR 20
+#define INITIAL_ACTION 21
 #endif
 
 /*  symbol classes  */
@@ -292,10 +295,12 @@ extern int outline;
 extern int exit_code;
 extern int pure_parser;
 extern int token_table;
+extern int error_verbose;
 #if defined(YYBTYACC)
 extern int locations;
 extern int backtrack;
 extern int destructor;
+extern char *initial_action;
 #endif
 
 extern const char *const banner[];
@@ -308,6 +313,7 @@ extern const char *const hdr_vars[];
 extern const char *const body_1[];
 extern const char *const body_vars[];
 extern const char *const body_2[];
+extern const char *const body_3[];
 extern const char *const trailer[];
 
 extern char *code_file_name;
@@ -432,7 +438,12 @@ extern void at_error(int a_lineno, char 
 extern void at_warning(int a_lineno, int i);
 extern void bad_formals(void) GCC_NORETURN;
 extern void default_action_warning(void);
-extern void destructor_redeclared_warning(int a_lineno, char *a_line, char *a_cptr);
+struct ainfo {
+	int a_lineno;
+	char *a_line;
+	char *a_cptr;
+};
+extern void destructor_redeclared_warning(const struct ainfo *);
 extern void dollar_error(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN;
 extern void dollar_warning(int a_lineno, int i);
 extern void fatal(const char *msg) GCC_NORETURN;
@@ -459,16 +470,16 @@ extern void unexpected_EOF(void) GCC_NOR
 extern void unknown_arg_warning(int d_lineno, const char *dlr_opt, const char *d_arg, const char *d_line, const char *d_cptr);
 extern void unknown_rhs(int i) GCC_NORETURN;
 extern void unsupported_flag_warning(const char *flag, const char *details);
-extern void unterminated_action(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN;
-extern void unterminated_comment(int c_lineno, char *c_line, char *c_cptr) GCC_NORETURN;
-extern void unterminated_string(int s_lineno, char *s_line, char *s_cptr) GCC_NORETURN;
-extern void unterminated_text(int t_lineno, char *t_line, char *t_cptr) GCC_NORETURN;
-extern void unterminated_union(int u_lineno, char *u_line, char *u_cptr) GCC_NORETURN;
+extern void unterminated_action(const struct ainfo *);
+extern void unterminated_comment(const struct ainfo *) GCC_NORETURN;
+extern void unterminated_string(const struct ainfo *) GCC_NORETURN;
+extern void unterminated_text(const struct ainfo *) GCC_NORETURN;
+extern void unterminated_union(const struct ainfo *) GCC_NORETURN;
 extern void untyped_arg_warning(int a_lineno, const char *dlr_opt, const char *a_name);
 extern void untyped_lhs(void) GCC_NORETURN;
 extern void untyped_rhs(int i, char *s) GCC_NORETURN;
 extern void used_reserved(char *s) GCC_NORETURN;
-extern void unterminated_arglist(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN;
+extern void unterminated_arglist(const struct ainfo *) GCC_NORETURN;
 extern void wrong_number_args_warning(const char *which, const char *a_name);
 extern void wrong_type_for_arg_warning(int i, char *a_name);
 

Index: src/external/bsd/byacc/dist/error.c
diff -u src/external/bsd/byacc/dist/error.c:1.9 src/external/bsd/byacc/dist/error.c:1.10
--- src/external/bsd/byacc/dist/error.c:1.9	Sat Jan  3 18:22:52 2015
+++ src/external/bsd/byacc/dist/error.c	Sat Jan  3 20:34:20 2015
@@ -1,9 +1,9 @@
-/*	$NetBSD: error.c,v 1.9 2015/01/03 23:22:52 christos Exp $	*/
+/*	$NetBSD: error.c,v 1.10 2015/01/04 01:34:20 christos Exp $	*/
 
 #include "defs.h"
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: error.c,v 1.9 2015/01/03 23:22:52 christos Exp $");
+__RCSID("$NetBSD: error.c,v 1.10 2015/01/04 01:34:20 christos Exp $");
 /* Id: error.c,v 1.11 2014/04/07 22:22:49 tom Exp  */
 
 /* routines for printing error messages  */
@@ -81,38 +81,38 @@ syntax_error(int st_lineno, char *st_lin
 }
 
 __dead void
-unterminated_comment(int c_lineno, char *c_line, char *c_cptr)
+unterminated_comment(const struct ainfo *a)
 {
     fprintf(stderr, "%s: e - line %d of \"%s\", unmatched /*\n",
-	    myname, c_lineno, input_file_name);
-    print_pos(c_line, c_cptr);
+	    myname, a->a_lineno, input_file_name);
+    print_pos(a->a_line, a->a_cptr);
     done(1);
 }
 
 __dead void
-unterminated_string(int s_lineno, char *s_line, char *s_cptr)
+unterminated_string(const struct ainfo *a)
 {
     fprintf(stderr, "%s: e - line %d of \"%s\", unterminated string\n",
-	    myname, s_lineno, input_file_name);
-    print_pos(s_line, s_cptr);
+	    myname, a->a_lineno, input_file_name);
+    print_pos(a->a_line, a->a_cptr);
     done(1);
 }
 
 __dead void
-unterminated_text(int t_lineno, char *t_line, char *t_cptr)
+unterminated_text(const struct ainfo *a)
 {
     fprintf(stderr, "%s: e - line %d of \"%s\", unmatched %%{\n",
-	    myname, t_lineno, input_file_name);
-    print_pos(t_line, t_cptr);
+	    myname, a->a_lineno, input_file_name);
+    print_pos(a->a_line, a->a_cptr);
     done(1);
 }
 
 __dead void
-unterminated_union(int u_lineno, char *u_line, char *u_cptr)
+unterminated_union(const struct ainfo *a)
 {
     fprintf(stderr, "%s: e - line %d of \"%s\", unterminated %%union \
-declaration\n", myname, u_lineno, input_file_name);
-    print_pos(u_line, u_cptr);
+declaration\n", myname, a->a_lineno, input_file_name);
+    print_pos(a->a_line, a->a_cptr);
     done(1);
 }
 
@@ -222,11 +222,11 @@ specifiers\n", myname, lineno, input_fil
 }
 
 void
-unterminated_action(int a_lineno, char *a_line, char *a_cptr)
+unterminated_action(const struct ainfo *a)
 {
     fprintf(stderr, "%s: e - line %d of \"%s\", unterminated action\n",
-	    myname, a_lineno, input_file_name);
-    print_pos(a_line, a_cptr);
+	    myname, a->a_lineno, input_file_name);
+    print_pos(a->a_line, a->a_cptr);
     done(1);
 }
 
@@ -319,12 +319,12 @@ at_error(int a_lineno, char *a_line, cha
 }
 
 void
-unterminated_arglist(int a_lineno, char *a_line, char *a_cptr)
+unterminated_arglist(const struct ainfo *a)
 {
     fprintf(stderr,
 	    "%s: e - line %d of \"%s\", unterminated argument list\n",
-	    myname, a_lineno, input_file_name);
-    print_pos(a_line, a_cptr);
+	    myname, a->a_lineno, input_file_name);
+    print_pos(a->a_line, a->a_cptr);
     done(1);
 }
 
@@ -397,10 +397,10 @@ start_requires_args(char *a_name)
 }
 
 void
-destructor_redeclared_warning(int a_lineno, char *a_line, char *a_cptr)
+destructor_redeclared_warning(const struct ainfo *a)
 {
     fprintf(stderr, "%s: w - line %d of \"%s\", destructor redeclared\n",
-	    myname, a_lineno, input_file_name);
-    print_pos(a_line, a_cptr);
+	    myname, a->a_lineno, input_file_name);
+    print_pos(a->a_line, a->a_cptr);
 }
 #endif

Index: src/external/bsd/byacc/dist/main.c
diff -u src/external/bsd/byacc/dist/main.c:1.10 src/external/bsd/byacc/dist/main.c:1.11
--- src/external/bsd/byacc/dist/main.c:1.10	Sat Jan  3 18:22:52 2015
+++ src/external/bsd/byacc/dist/main.c	Sat Jan  3 20:34:20 2015
@@ -1,9 +1,9 @@
-/*	$NetBSD: main.c,v 1.10 2015/01/03 23:22:52 christos Exp $	*/
+/*	$NetBSD: main.c,v 1.11 2015/01/04 01:34:20 christos Exp $	*/
 
 #include "defs.h"
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: main.c,v 1.10 2015/01/03 23:22:52 christos Exp $");
+__RCSID("$NetBSD: main.c,v 1.11 2015/01/04 01:34:20 christos Exp $");
 /* Id: main.c,v 1.54 2014/10/06 22:40:07 tom Exp  */
 
 #include <signal.h>
@@ -98,6 +98,7 @@ char *symbol_assoc;
 
 int pure_parser;
 int token_table;
+int error_verbose;
 
 #if defined(YYBTYACC)
 Value_t *symbol_pval;
@@ -105,6 +106,7 @@ char **symbol_destructor;
 char **symbol_type_tag;
 int locations = 0;	/* default to no position processing */
 int backtrack = 0;	/* default is no backtracking */
+char *initial_action = NULL;
 #endif
 
 int exit_code;
Index: src/external/bsd/byacc/dist/reader.c
diff -u src/external/bsd/byacc/dist/reader.c:1.10 src/external/bsd/byacc/dist/reader.c:1.11
--- src/external/bsd/byacc/dist/reader.c:1.10	Sat Jan  3 18:22:52 2015
+++ src/external/bsd/byacc/dist/reader.c	Sat Jan  3 20:34:20 2015
@@ -1,11 +1,11 @@
-/*	$NetBSD: reader.c,v 1.10 2015/01/03 23:22:52 christos Exp $	*/
+/*	$NetBSD: reader.c,v 1.11 2015/01/04 01:34:20 christos Exp $	*/
 
 /* Id: reader.c,v 1.58 2014/10/06 22:15:08 tom Exp  */
 
 #include "defs.h"
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: reader.c,v 1.10 2015/01/03 23:22:52 christos Exp $");
+__RCSID("$NetBSD: reader.c,v 1.11 2015/01/04 01:34:20 christos Exp $");
 
 /*  The line size must be a positive integer.  One hundred was chosen	*/
 /*  because few lines in Yacc input grammars exceed 100 characters.	*/
@@ -27,6 +27,7 @@ __RCSID("$NetBSD: reader.c,v 1.10 2015/0
 
 static void start_rule(bucket *bp, int s_lineno);
 #if defined(YYBTYACC)
+static void copy_initial_action(void);
 static void copy_destructor(void);
 static char *process_destructor_XX(char *code, char *tag);
 #endif
@@ -186,10 +187,10 @@ static void
 skip_comment(void)
 {
     char *s;
-
-    int st_lineno = lineno;
-    char *st_line = dup_line();
-    char *st_cptr = st_line + (cptr - line);
+    struct ainfo a;
+    a.a_lineno = lineno;
+    a.a_line = dup_line();
+    a.a_cptr = a.a_line + (cptr - line);
 
     s = cptr + 2;
     for (;;)
@@ -197,14 +198,14 @@ skip_comment(void)
 	if (*s == '*' && s[1] == '/')
 	{
 	    cptr = s + 2;
-	    FREE(st_line);
+	    FREE(a.a_line);
 	    return;
 	}
 	if (*s == '\n')
 	{
 	    get_line();
 	    if (line == 0)
-		unterminated_comment(st_lineno, st_line, st_cptr);
+		unterminated_comment(&a);
 	    s = cptr;
 	}
 	else
@@ -291,17 +292,22 @@ nextc(void)
 /* *INDENT-OFF* */
 static struct keyword
 {
-    char name[13];
+    char name[14];
     int token;
 }
 keywords[] = {
     { "binary",      NONASSOC },
+    { "debug",	     XXXDEBUG },
 #if defined(YYBTYACC)
     { "destructor",  DESTRUCTOR },
 #endif
+    { "error-verbose",ERROR_VERBOSE },
     { "expect",      EXPECT },
     { "expect-rr",   EXPECT_RR },
     { "ident",       IDENT }, 
+#if defined(YYBTYACC)
+    { "initial-action", INITIAL_ACTION },
+#endif
     { "left",        LEFT },
     { "lex-param",   LEX_PARAM },
 #if defined(YYBTYACC)
@@ -429,9 +435,10 @@ copy_string(int quote)
 {
     struct mstring *temp = msnew();
     int c;
-    int s_lineno = lineno;
-    char *s_line = dup_line();
-    char *s_cptr = s_line + (cptr - line - 1);
+    struct ainfo a;
+    a.a_lineno = lineno;
+    a.a_line = dup_line();
+    a.a_cptr = a.a_line + (cptr - line - 1);
 
     for (;;)
     {
@@ -439,11 +446,11 @@ copy_string(int quote)
 	mputc(temp, c);
 	if (c == quote)
 	{
-	    FREE(s_line);
+	    FREE(a.a_line);
 	    return msdone(temp);
 	}
 	if (c == '\n')
-	    unterminated_string(s_lineno, s_line, s_cptr);
+	    unterminated_string(&a);
 	if (c == '\\')
 	{
 	    c = *cptr++;
@@ -452,7 +459,7 @@ copy_string(int quote)
 	    {
 		get_line();
 		if (line == 0)
-		    unterminated_string(s_lineno, s_line, s_cptr);
+		    unterminated_string(&a);
 	    }
 	}
     }
@@ -479,9 +486,10 @@ copy_comment(void)
     }
     else if (c == '*')
     {
-	int c_lineno = lineno;
-	char *c_line = dup_line();
-	char *c_cptr = c_line + (cptr - line - 1);
+	struct ainfo a;
+	a.a_lineno = lineno;
+	a.a_line = dup_line();
+	a.a_cptr = a.a_line + (cptr - line - 1);
 
 	mputc(temp, c);
 	++cptr;
@@ -493,14 +501,14 @@ copy_comment(void)
 	    {
 		mputc(temp, '/');
 		++cptr;
-		FREE(c_line);
+		FREE(a.a_line);
 		return msdone(temp);
 	    }
 	    if (c == '\n')
 	    {
 		get_line();
 		if (line == 0)
-		    unterminated_comment(c_lineno, c_line, c_cptr);
+		    unterminated_comment(&a);
 	    }
 	}
     }
@@ -513,15 +521,16 @@ copy_text(void)
     int c;
     FILE *f = text_file;
     int need_newline = 0;
-    int t_lineno = lineno;
-    char *t_line = dup_line();
-    char *t_cptr = t_line + (cptr - line - 2);
+    struct ainfo a;
+    a.a_lineno = lineno;
+    a.a_line = dup_line();
+    a.a_cptr = a.a_line + (cptr - line - 2);
 
     if (*cptr == '\n')
     {
 	get_line();
 	if (line == 0)
-	    unterminated_text(t_lineno, t_line, t_cptr);
+	    unterminated_text(&a);
     }
     if (!lflag)
 	fprintf(f, line_format, lineno, input_file_name);
@@ -536,7 +545,7 @@ copy_text(void)
 	get_line();
 	if (line)
 	    goto loop;
-	unterminated_text(t_lineno, t_line, t_cptr);
+	unterminated_text(&a);
 
     case '\'':
     case '"':
@@ -566,7 +575,7 @@ copy_text(void)
 	    if (need_newline)
 		putc('\n', f);
 	    ++cptr;
-	    FREE(t_line);
+	    FREE(a.a_line);
 	    return;
 	}
 	/* FALLTHRU */
@@ -599,9 +608,10 @@ copy_union(void)
 {
     int c;
     int depth;
-    int u_lineno = lineno;
-    char *u_line = dup_line();
-    char *u_cptr = u_line + (cptr - line - 6);
+    struct ainfo a;
+    a.a_lineno = lineno;
+    a.a_line = dup_line();
+    a.a_cptr = a.a_line + (cptr - line - 6);
 
     if (unionized)
 	over_unionized(cptr - 6);
@@ -627,7 +637,7 @@ copy_union(void)
     case '\n':
 	get_line();
 	if (line == 0)
-	    unterminated_union(u_lineno, u_line, u_cptr);
+	    unterminated_union(&a);
 	goto loop;
 
     case L_CURL:
@@ -639,7 +649,7 @@ copy_union(void)
 	{
 	    puts_both(" YYSTYPE;\n");
 	    puts_both("#endif /* !YYSTYPE_IS_DECLARED */\n");
-	    FREE(u_line);
+	    FREE(a.a_line);
 	    return;
 	}
 	goto loop;
@@ -975,9 +985,10 @@ get_literal(void)
     int n;
     char *s;
     bucket *bp;
-    int s_lineno = lineno;
-    char *s_line = dup_line();
-    char *s_cptr = s_line + (cptr - line);
+    struct ainfo a;
+    a.a_lineno = lineno;
+    a.a_line = dup_line();
+    a.a_cptr = a.a_line + (cptr - line);
 
     quote = *cptr++;
     cinc = 0;
@@ -987,7 +998,7 @@ get_literal(void)
 	if (c == quote)
 	    break;
 	if (c == '\n')
-	    unterminated_string(s_lineno, s_line, s_cptr);
+	    unterminated_string(&a);
 	if (c == '\\')
 	{
 	    char *c_cptr = cptr - 1;
@@ -998,7 +1009,7 @@ get_literal(void)
 	    case '\n':
 		get_line();
 		if (line == 0)
-		    unterminated_string(s_lineno, s_line, s_cptr);
+		    unterminated_string(&a);
 		continue;
 
 	    case '0':
@@ -1070,7 +1081,7 @@ get_literal(void)
 	}
 	cachec(c);
     }
-    FREE(s_line);
+    FREE(a.a_line);
 
     n = cinc;
     s = TMALLOC(char, n);
@@ -1270,7 +1281,7 @@ scan_id(void)
 {
     char *b = cptr;
 
-    while (isalnum(*cptr) || *cptr == '_' || *cptr == '$')
+    while (isalnum((unsigned char)*cptr) || *cptr == '_' || *cptr == '$')
 	cptr++;
     return cache_tag(b, (size_t) (cptr - b));
 }
@@ -1562,6 +1573,10 @@ read_declarations(void)
 	    token_table = 1;
 	    break;
 
+	case ERROR_VERBOSE:
+	    error_verbose = 1;
+	    break;
+
 #if defined(YYBTYACC)
 	case LOCATIONS:
 	    locations = 1;
@@ -1571,8 +1586,15 @@ read_declarations(void)
 	    destructor = 1;
 	    copy_destructor();
 	    break;
+	case INITIAL_ACTION:
+	    copy_initial_action();
+	    break;
 #endif
 
+	case XXXDEBUG:
+	    /* XXX: FIXME */
+	    break;
+
 	case POSIX_YACC:
 	    /* noop for bison compatibility. byacc is already designed to be posix
 	     * yacc compatible. */
@@ -1654,9 +1676,11 @@ copy_args(int *alen)
     struct mstring *s = msnew();
     int depth = 0, len = 1;
     char c, quote = 0;
-    int a_lineno = lineno;
-    char *a_line = dup_line();
-    char *a_cptr = a_line + (cptr - line - 1);
+    struct ainfo a;
+
+    a.a_lineno = lineno;
+    a.a_line = dup_line();
+    a.a_cptr = a.a_line + (cptr - line - 1);
 
     while ((c = *cptr++) != R_PAREN || depth || quote)
     {
@@ -1673,9 +1697,9 @@ copy_args(int *alen)
 	    if (!line)
 	    {
 		if (quote)
-		    unterminated_string(a_lineno, a_line, a_cptr);
+		    unterminated_string(&a);
 		else
-		    unterminated_arglist(a_lineno, a_line, a_cptr);
+		    unterminated_arglist(&a);
 	    }
 	}
 	else if (quote)
@@ -1700,7 +1724,7 @@ copy_args(int *alen)
     }
     if (alen)
 	*alen = len;
-    FREE(a_line);
+    FREE(a.a_line);
     return msdone(s);
 }
 
@@ -1709,13 +1733,13 @@ parse_id(char *p, char **save)
 {
     char *b;
 
-    while (isspace(*p))
+    while (isspace((unsigned char)*p))
 	if (*p++ == '\n')
 	    rescan_lineno++;
-    if (!isalpha(*p) && *p != '_')
+    if (!isalpha((unsigned char)*p) && *p != '_')
 	return NULL;
     b = p;
-    while (isalnum(*p) || *p == '_' || *p == '$')
+    while (isalnum((unsigned char)*p) || *p == '_' || *p == '$')
 	p++;
     if (save)
     {
@@ -1729,7 +1753,7 @@ parse_int(char *p, int *save)
 {
     int neg = 0, val = 0;
 
-    while (isspace(*p))
+    while (isspace((unsigned char)*p))
 	if (*p++ == '\n')
 	    rescan_lineno++;
     if (*p == '-')
@@ -1737,9 +1761,9 @@ parse_int(char *p, int *save)
 	neg = 1;
 	p++;
     }
-    if (!isdigit(*p))
+    if (!isdigit((unsigned char)*p))
 	return NULL;
-    while (isdigit(*p))
+    while (isdigit((unsigned char)*p))
 	val = val * 10 + *p++ - '0';
     if (neg)
 	val = -val;
@@ -1773,12 +1797,12 @@ parse_arginfo(bucket *a, char *args, int
 	return;
     for (i = 0; i < argslen; i++)
     {
-	while (isspace(*p))
+	while (isspace((unsigned char)*p))
 	    if (*p++ == '\n')
 		rescan_lineno++;
 	if (*p++ != '$')
 	    bad_formals();
-	while (isspace(*p))
+	while (isspace((unsigned char)*p))
 	    if (*p++ == '\n')
 		rescan_lineno++;
 	if (*p == '<')
@@ -1786,7 +1810,7 @@ parse_arginfo(bucket *a, char *args, int
 	    havetags = 1;
 	    if (!(p = parse_id(p + 1, &tmp)))
 		bad_formals();
-	    while (isspace(*p))
+	    while (isspace((unsigned char)*p))
 		if (*p++ == '\n')
 		    rescan_lineno++;
 	    if (*p++ != '>')
@@ -1803,7 +1827,7 @@ parse_arginfo(bucket *a, char *args, int
 	    a->argtags[i] = NULL;
 	if (!(p = parse_id(p, &a->argnames[i])))
 	    bad_formals();
-	while (isspace(*p))
+	while (isspace((unsigned char)*p))
 	    if (*p++ == '\n')
 		rescan_lineno++;
 	if (*p++)
@@ -1852,7 +1876,7 @@ compile_arg(char **theptr, char *yyvalta
 	    if (*++p == '<')
 		if (!(p = parse_id(++p, &tag)) || *p++ != '>')
 		    illegal_tag(rescan_lineno, NULL, NULL);
-	    if (isdigit(*p) || *p == '-')
+	    if (isdigit((unsigned char)*p) || *p == '-')
 	    {
 		int val;
 		if (!(p = parse_int(p, &val)))
@@ -1876,7 +1900,7 @@ compile_arg(char **theptr, char *yyvalta
 		else if (havetags)
 		    unknown_rhs(val);
 	    }
-	    else if (isalpha(*p) || *p == '_')
+	    else if (isalpha((unsigned char)*p) || *p == '_')
 	    {
 		char *arg;
 		if (!(p = parse_id(p, &arg)))
@@ -2232,12 +2256,14 @@ copy_action(void)
 #endif
     char *tag;
     FILE *f = action_file;
-    int a_lineno = lineno;
-    char *a_line = dup_line();
-    char *a_cptr = a_line + (cptr - line);
+    struct ainfo a;
     Value_t *offsets = NULL, maxoffset;
     bucket **rhs;
 
+    a.a_lineno = lineno;
+    a.a_line = dup_line();
+    a.a_cptr = a.a_line + (cptr - line);
+
     if (last_was_action)
 	insert_empty_rule();
     last_was_action = 1;
@@ -2403,7 +2429,7 @@ copy_action(void)
 	    goto loop;
 	}
 #if defined(YYBTYACC)
-	else if (isalpha(cptr[1]) || cptr[1] == '_')
+	else if (isalpha((unsigned char)cptr[1]) || cptr[1] == '_')
 	{
 	    char *arg;
 	    ++cptr;
@@ -2494,7 +2520,7 @@ copy_action(void)
 		goto loop;
 	    }
 	    fprintf(f, "\nbreak;\n");
-	    FREE(a_line);
+	    FREE(a.a_line);
 	    if (maxoffset > 0)
 		FREE(offsets);
 	    return;
@@ -2508,13 +2534,13 @@ copy_action(void)
 	get_line();
 	if (line)
 	    goto loop;
-	unterminated_action(a_lineno, a_line, a_cptr);
+	unterminated_action(&a);
 
     case ';':
 	if (depth > 0)
 	    goto loop;
 	fprintf(f, "\nbreak;\n");
-	free(a_line);
+	free(a.a_line);
 	if (maxoffset > 0)
 	    FREE(offsets);
 	return;
@@ -2557,7 +2583,7 @@ copy_action(void)
 	}
 #endif
 	fprintf(f, "\nbreak;\n");
-	free(a_line);
+	free(a.a_line);
 	if (maxoffset > 0)
 	    FREE(offsets);
 	return;
@@ -2585,32 +2611,27 @@ copy_action(void)
 }
 
 #if defined(YYBTYACC)
-static void
-copy_destructor(void)
+static char *
+get_code(struct ainfo *a, const char *loc)
 {
     int c;
     int depth;
     char *tag;
-    bucket *bp;
-    struct mstring *destructor_text = msnew();
-    char *code_text;
-    int a_lineno;
-    char *a_line;
-    char *a_cptr;
+    struct mstring *code_mstr = msnew();
 
     if (!lflag)
-	msprintf(destructor_text, line_format, lineno, input_file_name);
+	msprintf(code_mstr, line_format, lineno, input_file_name);
 
     cptr = after_blanks(cptr);
     if (*cptr == L_CURL)
 	/* avoid putting curly-braces in first column, to ease editing */
-	mputc(destructor_text, '\t');
+	mputc(code_mstr, '\t');
     else
 	syntax_error(lineno, line, cptr);
 
-    a_lineno = lineno;
-    a_line = dup_line();
-    a_cptr = a_line + (cptr - line);
+    a->a_lineno = lineno;
+    a->a_line = dup_line();
+    a->a_cptr = a->a_line + (cptr - line);
 
     depth = 0;
   loop:
@@ -2628,7 +2649,7 @@ copy_destructor(void)
 	    c = *cptr;
 	    if (c == '$')
 	    {
-		msprintf(destructor_text, "(*val).%s", tag);
+		msprintf(code_mstr, "(*val).%s", tag);
 		++cptr;
 		FREE(d_line);
 		goto loop;
@@ -2639,7 +2660,7 @@ copy_destructor(void)
 	else if (cptr[1] == '$')
 	{
 	    /* process '$$' later; replacement is context dependent */
-	    msprintf(destructor_text, "$$");
+	    msprintf(code_mstr, "$$");
 	    cptr += 2;
 	    goto loop;
 	}
@@ -2653,7 +2674,7 @@ copy_destructor(void)
 	    char *l_cptr = l_line + (cptr - line);
 	    syntax_error(l_lineno, l_line, l_cptr);
 	}
-	msprintf(destructor_text, "(*loc)");
+	msprintf(code_mstr, loc);
 	cptr += 2;
 	goto loop;
     }
@@ -2661,21 +2682,21 @@ copy_destructor(void)
     {
 	do
 	{
-	    mputc(destructor_text, c);
+	    mputc(code_mstr, c);
 	    c = *++cptr;
 	}
 	while (isalnum(c) || c == '_' || c == '$');
 	goto loop;
     }
     ++cptr;
-    mputc(destructor_text, c);
+    mputc(code_mstr, c);
     switch (c)
     {
     case '\n':
 	get_line();
 	if (line)
 	    goto loop;
-	unterminated_action(a_lineno, a_line, a_cptr);
+	unterminated_action(a);
 
     case L_CURL:
 	++depth;
@@ -2684,13 +2705,13 @@ copy_destructor(void)
     case R_CURL:
 	if (--depth > 0)
 	    goto loop;
-	goto process_symbols;
+	goto out;
 
     case '\'':
     case '"':
 	{
 	    char *s = copy_string(c);
-	    msprintf(destructor_text, "%s", s);
+	    msprintf(code_mstr, "%s", s);
 	    free(s);
 	}
 	goto loop;
@@ -2698,7 +2719,7 @@ copy_destructor(void)
     case '/':
 	{
 	    char *s = copy_comment();
-	    msprintf(destructor_text, "%s", s);
+	    msprintf(code_mstr, "%s", s);
 	    free(s);
 	}
 	goto loop;
@@ -2706,8 +2727,29 @@ copy_destructor(void)
     default:
 	goto loop;
     }
-  process_symbols:
-    code_text = msdone(destructor_text);
+  out:
+    return msdone(code_mstr);
+}
+
+static void
+copy_initial_action(void)
+{
+    struct ainfo a;
+
+    initial_action = get_code(&a, "yyloc");
+    free(a.a_line);
+}
+
+static void
+copy_destructor(void)
+{
+    char *code_text;
+    int c;
+    struct ainfo a;
+    bucket *bp;
+
+    code_text = get_code(&a, "(*loc)");
+
     for (;;)
     {
 	c = nextc();
@@ -2726,7 +2768,7 @@ copy_destructor(void)
 		    default_destructor[UNTYPED_DEFAULT] = bp;
 		}
 		if (bp->destructor != NULL)
-		    destructor_redeclared_warning(a_lineno, a_line, a_cptr);
+		    destructor_redeclared_warning(&a);
 		else
 		    /* replace "$$" with "(*val)" in destructor code */
 		    bp->destructor = process_destructor_XX(code_text, NULL);
@@ -2742,7 +2784,7 @@ copy_destructor(void)
 		    default_destructor[TYPED_DEFAULT] = bp;
 		}
 		if (bp->destructor != NULL)
-		    destructor_redeclared_warning(a_lineno, a_line, a_cptr);
+		    destructor_redeclared_warning(&a);
 		else
 		{
 		    /* postpone re-processing destructor $$s until end of grammar spec */
@@ -2753,10 +2795,10 @@ copy_destructor(void)
 	    }
 	    else
 	    {			/* "semantic type" default destructor */
-		tag = get_tag();
+		char *tag = get_tag();
 		bp = lookup_type_destructor(tag);
 		if (bp->destructor != NULL)
-		    destructor_redeclared_warning(a_lineno, a_line, a_cptr);
+		    destructor_redeclared_warning(&a);
 		else
 		    /* replace "$$" with "(*val).tag" in destructor code */
 		    bp->destructor = process_destructor_XX(code_text, tag);
@@ -2766,7 +2808,7 @@ copy_destructor(void)
 	{			/* "symbol" destructor */
 	    bp = get_name();
 	    if (bp->destructor != NULL)
-		destructor_redeclared_warning(a_lineno, a_line, a_cptr);
+		destructor_redeclared_warning(&a);
 	    else
 	    {
 		/* postpone re-processing destructor $$s until end of grammar spec */
@@ -2778,7 +2820,7 @@ copy_destructor(void)
 	else
 	    break;
     }
-    free(a_line);
+    free(a.a_line);
     free(code_text);
 }
 

Index: src/external/bsd/byacc/dist/mstring.c
diff -u src/external/bsd/byacc/dist/mstring.c:1.2 src/external/bsd/byacc/dist/mstring.c:1.3
--- src/external/bsd/byacc/dist/mstring.c:1.2	Sat Jan  3 18:22:52 2015
+++ src/external/bsd/byacc/dist/mstring.c	Sat Jan  3 20:34:20 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: mstring.c,v 1.2 2015/01/03 23:22:52 christos Exp $	*/
+/*	$NetBSD: mstring.c,v 1.3 2015/01/04 01:34:20 christos Exp $	*/
 
 /* Id: mstring.c,v 1.6 2014/04/22 23:36:31 tom Exp  */
 #if HAVE_NBTOOL_CONFIG_H
@@ -6,7 +6,7 @@
 #endif
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: mstring.c,v 1.2 2015/01/03 23:22:52 christos Exp $");
+__RCSID("$NetBSD: mstring.c,v 1.3 2015/01/04 01:34:20 christos Exp $");
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -165,20 +165,20 @@ strnscmp(const char *a, const char *b)
 {
     while (1)
     {
-	while (isspace(*a))
+	while (isspace((unsigned char)*a))
 	    a++;
-	while (isspace(*b))
+	while (isspace((unsigned char)*b))
 	    b++;
 	while (*a && *a == *b)
 	    a++, b++;
-	if (isspace(*a))
+	if (isspace((unsigned char)*a))
 	{
-	    if (isalnum(a[-1]) && isalnum(*b))
+	    if (isalnum((unsigned char)a[-1]) && isalnum((unsigned char)*b))
 		break;
 	}
-	else if (isspace(*b))
+	else if (isspace((unsigned char)*b))
 	{
-	    if (isalnum(b[-1]) && isalnum(*a))
+	    if (isalnum((unsigned char)b[-1]) && isalnum((unsigned char)*a))
 		break;
 	}
 	else
@@ -194,7 +194,7 @@ strnshash(const char *s)
 
     while (*s)
     {
-	if (!isspace(*s))
+	if (!isspace((unsigned char)*s))
 	    h = (h << 5) - h + (unsigned char)*s;
 	s++;
     }

Index: src/external/bsd/byacc/dist/output.c
diff -u src/external/bsd/byacc/dist/output.c:1.11 src/external/bsd/byacc/dist/output.c:1.12
--- src/external/bsd/byacc/dist/output.c:1.11	Sat Jan  3 18:22:52 2015
+++ src/external/bsd/byacc/dist/output.c	Sat Jan  3 20:34:20 2015
@@ -1,11 +1,11 @@
-/*	$NetBSD: output.c,v 1.11 2015/01/03 23:22:52 christos Exp $	*/
+/*	$NetBSD: output.c,v 1.12 2015/01/04 01:34:20 christos Exp $	*/
 
 /* Id: output.c,v 1.74 2014/10/05 23:21:09 tom Exp  */
 
 #include "defs.h"
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: output.c,v 1.11 2015/01/03 23:22:52 christos Exp $");
+__RCSID("$NetBSD: output.c,v 1.12 2015/01/04 01:34:20 christos Exp $");
 
 #define StaticOrR	(rflag ? "" : "static ")
 #define CountLine(fp)   (!rflag || ((fp) == code_file))
@@ -1560,6 +1560,7 @@ output_ltype(FILE * fp)
     putl_code(fp, "    int first_column;\n");
     putl_code(fp, "    int last_line;\n");
     putl_code(fp, "    int last_column;\n");
+    putl_code(fp, "    char *source;\n");
     putl_code(fp, "} YYLTYPE;\n");
     putl_code(fp, "#define YYLTYPE_IS_DECLARED 1\n");
     putl_code(fp, "#endif\n");
@@ -1838,6 +1839,13 @@ output_yydestruct_decl(FILE * fp)
 }
 
 static void
+output_initial_action(void)
+{
+    if (initial_action)
+	fprintf(code_file, "%s\n", initial_action);
+}
+
+static void
 output_yydestruct_impl(void)
 {
     int i;
@@ -2043,6 +2051,11 @@ output(void)
 	write_section(code_file, body_vars);
     }
     write_section(code_file, body_2);
+#if defined(YYBTYACC)
+    if (initial_action)
+	output_initial_action();
+#endif
+    write_section(code_file, body_3);
     output_semantic_actions();
     write_section(code_file, trailer);
 }

Index: src/external/bsd/byacc/include/config.h
diff -u src/external/bsd/byacc/include/config.h:1.3 src/external/bsd/byacc/include/config.h:1.4
--- src/external/bsd/byacc/include/config.h:1.3	Sat Apr  6 10:52:25 2013
+++ src/external/bsd/byacc/include/config.h	Sat Jan  3 20:34:20 2015
@@ -31,6 +31,12 @@
 /* Define to 1 if mkstemp() is available and working. */
 #define HAVE_MKSTEMP 1
 
+/* Define to 1 if vsnprintf() is available and working. */
+#define HAVE_VSNPRINTF 1
+
+/* Define to maximum table size (default: 32500) */
+/* #undef MAXTABLE */
+
 /* Define to 1 if filesystem supports mixed-case filenames. */
 #define MIXEDCASE_FILENAMES 1
 
@@ -38,7 +44,7 @@
 /* #undef NO_LEAKS */
 
 /* Define to the system name. */
-#define SYSTEM_NAME "netbsd"
+#define SYSTEM_NAME "NetBSD"
 
 /* "Define to 1 if you want to use dbmalloc for testing." */
 /* #undef USE_DBMALLOC */
@@ -49,5 +55,8 @@
 /* "Define to 1 if you want to use valgrind for testing." */
 /* #undef USE_VALGRIND */
 
+/* Define to 1 to enable backtracking extension */
+#define YYBTYACC 1
+
 /* Define to 1 if you want to perform memory-leak testing. */
 /* #undef YY_NO_LEAKS */

Reply via email to