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 */