(<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>\\x[0-
9abcdefABCDEF]+): Likewise.
(handle_action_dollar, handle_action_at): Likewise.
(obstack_for_string): Renamed from string_obstack.
+
+#include <mbswidth.h>
+#include <get-errno.h>
+#include <quote.h>
+
#include "complain.h"
#include "files.h"
#include "complain.h"
#include "files.h"
-#include "quote.h"
-#include "struniq.h"
#include "getargs.h"
#include "gram.h"
#include "reader.h"
#include "getargs.h"
#include "gram.h"
#include "reader.h"
#define YY_USER_INIT \
do \
#define YY_USER_INIT \
do \
/* Location of scanner cursor. */
boundary scanner_cursor;
/* Location of scanner cursor. */
boundary scanner_cursor;
-static void adjust_location (location_t *, char const *, size_t);
+static void adjust_location (location *, char const *, size_t);
#define YY_USER_ACTION adjust_location (loc, yytext, yyleng);
static size_t no_cr_read (FILE *, char *, size_t);
#define YY_INPUT(buf, result, size) ((result) = no_cr_read (yyin, buf, size))
#define YY_USER_ACTION adjust_location (loc, yytext, yyleng);
static size_t no_cr_read (FILE *, char *, size_t);
#define YY_INPUT(buf, result, size) ((result) = no_cr_read (yyin, buf, size))
-/* STRING_OBSTACK -- Used to store all the characters that we need to
+/* OBSTACK_FOR_STRING -- Used to store all the characters that we need to
keep (to construct ID, STRINGS etc.). Use the following macros to
use it.
keep (to construct ID, STRINGS etc.). Use the following macros to
use it.
STRING_FINISH also stores this string in LAST_STRING, which can be
used, and which is used by STRING_FREE to free the last string. */
STRING_FINISH also stores this string in LAST_STRING, which can be
used, and which is used by STRING_FREE to free the last string. */
-static struct obstack string_obstack;
+static struct obstack obstack_for_string;
/* A string representing the most recently saved token. */
static char *last_string;
#define STRING_GROW \
/* A string representing the most recently saved token. */
static char *last_string;
#define STRING_GROW \
- obstack_grow (&string_obstack, yytext, yyleng)
+ obstack_grow (&obstack_for_string, yytext, yyleng)
#define STRING_FINISH \
do { \
#define STRING_FINISH \
do { \
- obstack_1grow (&string_obstack, '\0'); \
- last_string = obstack_finish (&string_obstack); \
+ obstack_1grow (&obstack_for_string, '\0'); \
+ last_string = obstack_finish (&obstack_for_string); \
} while (0)
#define STRING_FREE \
} while (0)
#define STRING_FREE \
- obstack_free (&string_obstack, last_string)
+ obstack_free (&obstack_for_string, last_string)
void
scanner_last_string_free (void)
void
scanner_last_string_free (void)
Outside of well-formed rules, RULE_LENGTH has an undefined value. */
static int rule_length;
Outside of well-formed rules, RULE_LENGTH has an undefined value. */
static int rule_length;
-static void handle_dollar (braced_code_t code_kind,
- char *cp, location_t location);
-static void handle_at (braced_code_t code_kind,
- char *cp, location_t location);
+static void handle_dollar (braced_code code_kind, char *cp, location loc);
+static void handle_at (braced_code code_kind, char *cp, location loc);
static void handle_syncline (char *args);
static int convert_ucn_to_byte (char const *hex_text);
static void unexpected_end_of_file (boundary, char const *);
static void handle_syncline (char *args);
static int convert_ucn_to_byte (char const *hex_text);
static void unexpected_end_of_file (boundary, char const *);
int context_state IF_LINT (= 0);
/* Location of most recent identifier, when applicable. */
int context_state IF_LINT (= 0);
/* Location of most recent identifier, when applicable. */
- location_t id_loc IF_LINT (= *loc);
+ location id_loc IF_LINT (= *loc);
- /* Location where containing code started, when applicable. */
+ /* Where containing code started, when applicable. */
boundary code_start IF_LINT (= loc->start);
boundary code_start IF_LINT (= loc->start);
- /* Location where containing comment or string or character literal
- started, when applicable. */
+ /* Where containing comment or string or character literal started,
+ when applicable. */
boundary token_start IF_LINT (= loc->start);
%}
boundary token_start IF_LINT (= loc->start);
%}
{int} {
unsigned long num;
{int} {
unsigned long num;
num = strtoul (yytext, 0, 10);
num = strtoul (yytext, 0, 10);
- if (INT_MAX < num || errno)
+ if (INT_MAX < num || get_errno ())
{
complain_at (*loc, _("integer out of range: %s"), quote (yytext));
num = INT_MAX;
{
complain_at (*loc, _("integer out of range: %s"), quote (yytext));
num = INT_MAX;
/* A type. */
"<"{tag}">" {
/* A type. */
"<"{tag}">" {
- obstack_grow (&string_obstack, yytext + 1, yyleng - 2);
+ obstack_grow (&obstack_for_string, yytext + 1, yyleng - 2);
- val->struniq = struniq_new (last_string);
+ val->uniqstr = uniqstr_new (last_string);
STRING_FREE;
return TYPE;
}
STRING_FREE;
return TYPE;
}
STRING_GROW;
STRING_FINISH;
loc->start = token_start;
STRING_GROW;
STRING_FINISH;
loc->start = token_start;
- val->string = last_string;
+ val->chars = last_string;
rule_length++;
BEGIN INITIAL;
return STRING;
rule_length++;
BEGIN INITIAL;
return STRING;
if (UCHAR_MAX < c)
complain_at (*loc, _("invalid escape sequence: %s"), quote (yytext));
else
if (UCHAR_MAX < c)
complain_at (*loc, _("invalid escape sequence: %s"), quote (yytext));
else
- obstack_1grow (&string_obstack, c);
+ obstack_1grow (&obstack_for_string, c);
}
\\x[0-9abcdefABCDEF]+ {
unsigned long c;
}
\\x[0-9abcdefABCDEF]+ {
unsigned long c;
c = strtoul (yytext + 2, 0, 16);
c = strtoul (yytext + 2, 0, 16);
- if (UCHAR_MAX < c || errno)
+ if (UCHAR_MAX < c || get_errno ())
complain_at (*loc, _("invalid escape sequence: %s"), quote (yytext));
else
complain_at (*loc, _("invalid escape sequence: %s"), quote (yytext));
else
- obstack_1grow (&string_obstack, c);
+ obstack_1grow (&obstack_for_string, c);
- \\a obstack_1grow (&string_obstack, '\a');
- \\b obstack_1grow (&string_obstack, '\b');
- \\f obstack_1grow (&string_obstack, '\f');
- \\n obstack_1grow (&string_obstack, '\n');
- \\r obstack_1grow (&string_obstack, '\r');
- \\t obstack_1grow (&string_obstack, '\t');
- \\v obstack_1grow (&string_obstack, '\v');
+ \\a obstack_1grow (&obstack_for_string, '\a');
+ \\b obstack_1grow (&obstack_for_string, '\b');
+ \\f obstack_1grow (&obstack_for_string, '\f');
+ \\n obstack_1grow (&obstack_for_string, '\n');
+ \\r obstack_1grow (&obstack_for_string, '\r');
+ \\t obstack_1grow (&obstack_for_string, '\t');
+ \\v obstack_1grow (&obstack_for_string, '\v');
/* \\[\"\'?\\] would be shorter, but it confuses xgettext. */
/* \\[\"\'?\\] would be shorter, but it confuses xgettext. */
- \\("\""|"'"|"?"|"\\") obstack_1grow (&string_obstack, yytext[1]);
+ \\("\""|"'"|"?"|"\\") obstack_1grow (&obstack_for_string, yytext[1]);
\\(u|U[0-9abcdefABCDEF]{4})[0-9abcdefABCDEF]{4} {
int c = convert_ucn_to_byte (yytext);
if (c < 0)
complain_at (*loc, _("invalid escape sequence: %s"), quote (yytext));
else
\\(u|U[0-9abcdefABCDEF]{4})[0-9abcdefABCDEF]{4} {
int c = convert_ucn_to_byte (yytext);
if (c < 0)
complain_at (*loc, _("invalid escape sequence: %s"), quote (yytext));
else
- obstack_1grow (&string_obstack, c);
+ obstack_1grow (&obstack_for_string, c);
}
\\(.|\n) {
complain_at (*loc, _("unrecognized escape sequence: %s"), quote (yytext));
}
\\(.|\n) {
complain_at (*loc, _("unrecognized escape sequence: %s"), quote (yytext));
{
STRING_FINISH;
loc->start = code_start;
{
STRING_FINISH;
loc->start = code_start;
- val->string = last_string;
+ val->chars = last_string;
rule_length++;
BEGIN INITIAL;
return BRACED_CODE;
rule_length++;
BEGIN INITIAL;
return BRACED_CODE;
"%}" {
STRING_FINISH;
loc->start = code_start;
"%}" {
STRING_FINISH;
loc->start = code_start;
- val->string = last_string;
+ val->chars = last_string;
BEGIN INITIAL;
return PROLOGUE;
}
BEGIN INITIAL;
return PROLOGUE;
}
<<EOF>> {
STRING_FINISH;
loc->start = code_start;
<<EOF>> {
STRING_FINISH;
loc->start = code_start;
- val->string = last_string;
+ val->chars = last_string;
BEGIN INITIAL;
return EPILOGUE;
}
BEGIN INITIAL;
return EPILOGUE;
}
<SC_COMMENT,SC_LINE_COMMENT,SC_STRING,SC_CHARACTER,SC_BRACED_CODE,SC_PROLOGUE,SC_EPILOGUE>
{
<SC_COMMENT,SC_LINE_COMMENT,SC_STRING,SC_CHARACTER,SC_BRACED_CODE,SC_PROLOGUE,SC_EPILOGUE>
{
- \$ obstack_sgrow (&string_obstack, "$][");
- \@ obstack_sgrow (&string_obstack, "@@");
- \[ obstack_sgrow (&string_obstack, "@{");
- \] obstack_sgrow (&string_obstack, "@}");
+ \$ obstack_sgrow (&obstack_for_string, "$][");
+ \@ obstack_sgrow (&obstack_for_string, "@@");
+ \[ obstack_sgrow (&obstack_for_string, "@{");
+ \] obstack_sgrow (&obstack_for_string, "@}");
size SIZE. */
static void
size SIZE. */
static void
-adjust_location (location_t *loc, char const *token, size_t size)
+adjust_location (location *loc, char const *token, size_t size)
{
int line = scanner_cursor.line;
int column = scanner_cursor.column;
{
int line = scanner_cursor.line;
int column = scanner_cursor.column;
| |
| Possible inputs: $[<TYPENAME>]($|integer) |
| |
| |
| Possible inputs: $[<TYPENAME>]($|integer) |
| |
-| Output to the STRING_OBSTACK a reference to this semantic value. |
+| Output to OBSTACK_FOR_STRING a reference to this semantic value. |
`------------------------------------------------------------------*/
static inline void
`------------------------------------------------------------------*/
static inline void
-handle_action_dollar (char *text, location_t location)
+handle_action_dollar (char *text, location loc)
{
const char *type_name = NULL;
char *cp = text + 1;
{
const char *type_name = NULL;
char *cp = text + 1;
if (*cp == '$')
{
if (!type_name)
if (*cp == '$')
{
if (!type_name)
- type_name = symbol_list_n_type_name_get (current_rule, location, 0);
+ type_name = symbol_list_n_type_name_get (current_rule, loc, 0);
- complain_at (location, _("$$ of `%s' has no declared type"),
+ complain_at (loc, _("$$ of `%s' has no declared type"),
current_rule->sym->tag);
if (!type_name)
type_name = "";
current_rule->sym->tag);
if (!type_name)
type_name = "";
- obstack_fgrow1 (&string_obstack,
+ obstack_fgrow1 (&obstack_for_string,
"]b4_lhs_value([%s])[", type_name);
}
else
{
long num;
"]b4_lhs_value([%s])[", type_name);
}
else
{
long num;
num = strtol (cp, 0, 10);
num = strtol (cp, 0, 10);
- if (INT_MIN <= num && num <= rule_length && ! errno)
+ if (INT_MIN <= num && num <= rule_length && ! get_errno ())
{
int n = num;
if (!type_name && n > 0)
{
int n = num;
if (!type_name && n > 0)
- type_name = symbol_list_n_type_name_get (current_rule, location,
- n);
+ type_name = symbol_list_n_type_name_get (current_rule, loc, n);
- complain_at (location, _("$%d of `%s' has no declared type"),
- n, current_rule->sym->tag);
+ complain_at (loc, _("$%d of `%s' has no declared type"),
+ n, current_rule->sym->tag);
if (!type_name)
type_name = "";
if (!type_name)
type_name = "";
- obstack_fgrow3 (&string_obstack,
+ obstack_fgrow3 (&obstack_for_string,
"]b4_rhs_value([%d], [%d], [%s])[",
rule_length, n, type_name);
}
else
"]b4_rhs_value([%d], [%d], [%s])[",
rule_length, n, type_name);
}
else
- complain_at (location, _("integer out of range: %s"), quote (text));
+ complain_at (loc, _("integer out of range: %s"), quote (text));
`---------------------------------------------------------------*/
static inline void
`---------------------------------------------------------------*/
static inline void
-handle_symbol_code_dollar (char *text, location_t location)
+handle_symbol_code_dollar (char *text, location loc)
{
char *cp = text + 1;
if (*cp == '$')
{
char *cp = text + 1;
if (*cp == '$')
- obstack_sgrow (&string_obstack, "]b4_dollar_dollar[");
+ obstack_sgrow (&obstack_for_string, "]b4_dollar_dollar[");
- complain_at (location, _("invalid value: %s"), quote (text));
+ complain_at (loc, _("invalid value: %s"), quote (text));
`-----------------------------------------------------------------*/
static void
`-----------------------------------------------------------------*/
static void
-handle_dollar (braced_code_t braced_code_kind,
- char *text, location_t location)
+handle_dollar (braced_code braced_code_kind, char *text, location loc)
{
switch (braced_code_kind)
{
case action_braced_code:
{
switch (braced_code_kind)
{
case action_braced_code:
- handle_action_dollar (text, location);
+ handle_action_dollar (text, loc);
break;
case destructor_braced_code:
case printer_braced_code:
break;
case destructor_braced_code:
case printer_braced_code:
- handle_symbol_code_dollar (text, location);
+ handle_symbol_code_dollar (text, loc);
/*------------------------------------------------------.
| TEXT is a location token (i.e., a `@...'). Output to |
/*------------------------------------------------------.
| TEXT is a location token (i.e., a `@...'). Output to |
-| STRING_OBSTACK a reference to this location. |
+| OBSTACK_FOR_STRING a reference to this location. |
`------------------------------------------------------*/
static inline void
`------------------------------------------------------*/
static inline void
-handle_action_at (char *text, location_t location)
+handle_action_at (char *text, location loc)
{
char *cp = text + 1;
locations_flag = 1;
if (*cp == '$')
{
{
char *cp = text + 1;
locations_flag = 1;
if (*cp == '$')
{
- obstack_sgrow (&string_obstack, "]b4_lhs_location[");
+ obstack_sgrow (&obstack_for_string, "]b4_lhs_location[");
num = strtol (cp, 0, 10);
num = strtol (cp, 0, 10);
- if (INT_MIN <= num && num <= rule_length && ! errno)
+ if (INT_MIN <= num && num <= rule_length && ! get_errno ())
- obstack_fgrow2 (&string_obstack, "]b4_rhs_location([%d], [%d])[",
+ obstack_fgrow2 (&obstack_for_string, "]b4_rhs_location([%d], [%d])[",
- complain_at (location, _("integer out of range: %s"), quote (text));
+ complain_at (loc, _("integer out of range: %s"), quote (text));
`---------------------------------------------------------------*/
static inline void
`---------------------------------------------------------------*/
static inline void
-handle_symbol_code_at (char *text, location_t location)
+handle_symbol_code_at (char *text, location loc)
{
char *cp = text + 1;
if (*cp == '$')
{
char *cp = text + 1;
if (*cp == '$')
- obstack_sgrow (&string_obstack, "]b4_at_dollar[");
+ obstack_sgrow (&obstack_for_string, "]b4_at_dollar[");
- complain_at (location, _("invalid value: %s"), quote (text));
+ complain_at (loc, _("invalid value: %s"), quote (text));
`-------------------------------------------------------------------*/
static void
`-------------------------------------------------------------------*/
static void
-handle_at (braced_code_t braced_code_kind,
- char *text, location_t location)
+handle_at (braced_code braced_code_kind, char *text, location loc)
{
switch (braced_code_kind)
{
case action_braced_code:
{
switch (braced_code_kind)
{
case action_braced_code:
- handle_action_at (text, location);
+ handle_action_at (text, loc);
break;
case destructor_braced_code:
case printer_braced_code:
break;
case destructor_braced_code:
case printer_braced_code:
- handle_symbol_code_at (text, location);
+ handle_symbol_code_at (text, loc);
{
size_t i = strlen (token_end);
{
size_t i = strlen (token_end);
- location_t location;
- location.start = start;
- location.end = scanner_cursor;
- complain_at (location, _("missing `%s' at end of file"), token_end);
+ location loc;
+ loc.start = start;
+ loc.end = scanner_cursor;
+ complain_at (loc, _("missing `%s' at end of file"), token_end);
/* Adjust scanner cursor so that any later message does not count
the characters about to be inserted. */
/* Adjust scanner cursor so that any later message does not count
the characters about to be inserted. */
void
scanner_initialize (void)
{
void
scanner_initialize (void)
{
- obstack_init (&string_obstack);
+ obstack_init (&obstack_for_string);
void
scanner_free (void)
{
void
scanner_free (void)
{
- obstack_free (&string_obstack, 0);
+ obstack_free (&obstack_for_string, 0);
/* Reclaim Flex's buffers. */
yy_delete_buffer (YY_CURRENT_BUFFER);
}
/* Reclaim Flex's buffers. */
yy_delete_buffer (YY_CURRENT_BUFFER);
}