mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-20 01:33:03 +00:00
(<INITIAL>{int}): Use set_errno and get_errno instead of errno.
(<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>\\x[0-9abcdefABCDEF]+): Likewise. (handle_action_dollar, handle_action_at): Likewise. (obstack_for_string): Renamed from string_obstack.
This commit is contained in:
166
src/scan-gram.l
166
src/scan-gram.l
@@ -24,14 +24,17 @@
|
|||||||
|
|
||||||
%{
|
%{
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
#include "mbswidth.h"
|
|
||||||
|
#include <mbswidth.h>
|
||||||
|
#include <get-errno.h>
|
||||||
|
#include <quote.h>
|
||||||
|
|
||||||
#include "complain.h"
|
#include "complain.h"
|
||||||
#include "files.h"
|
#include "files.h"
|
||||||
#include "quote.h"
|
|
||||||
#include "struniq.h"
|
|
||||||
#include "getargs.h"
|
#include "getargs.h"
|
||||||
#include "gram.h"
|
#include "gram.h"
|
||||||
#include "reader.h"
|
#include "reader.h"
|
||||||
|
#include "uniqstr.h"
|
||||||
|
|
||||||
#define YY_USER_INIT \
|
#define YY_USER_INIT \
|
||||||
do \
|
do \
|
||||||
@@ -45,14 +48,14 @@
|
|||||||
/* Location of scanner cursor. */
|
/* Location of scanner cursor. */
|
||||||
boundary 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);
|
#define YY_USER_ACTION adjust_location (loc, yytext, yyleng);
|
||||||
|
|
||||||
static size_t no_cr_read (FILE *, char *, size_t);
|
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_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
|
keep (to construct ID, STRINGS etc.). Use the following macros to
|
||||||
use it.
|
use it.
|
||||||
|
|
||||||
@@ -61,23 +64,23 @@ static size_t no_cr_read (FILE *, char *, size_t);
|
|||||||
STRING_FINISH also stores this string in LAST_STRING, which can be
|
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. */
|
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. */
|
/* A string representing the most recently saved token. */
|
||||||
static char *last_string;
|
static char *last_string;
|
||||||
|
|
||||||
|
|
||||||
#define STRING_GROW \
|
#define STRING_GROW \
|
||||||
obstack_grow (&string_obstack, yytext, yyleng)
|
obstack_grow (&obstack_for_string, yytext, yyleng)
|
||||||
|
|
||||||
#define STRING_FINISH \
|
#define STRING_FINISH \
|
||||||
do { \
|
do { \
|
||||||
obstack_1grow (&string_obstack, '\0'); \
|
obstack_1grow (&obstack_for_string, '\0'); \
|
||||||
last_string = obstack_finish (&string_obstack); \
|
last_string = obstack_finish (&obstack_for_string); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define STRING_FREE \
|
#define STRING_FREE \
|
||||||
obstack_free (&string_obstack, last_string)
|
obstack_free (&obstack_for_string, last_string)
|
||||||
|
|
||||||
void
|
void
|
||||||
scanner_last_string_free (void)
|
scanner_last_string_free (void)
|
||||||
@@ -93,10 +96,8 @@ scanner_last_string_free (void)
|
|||||||
Outside of well-formed rules, RULE_LENGTH has an undefined value. */
|
Outside of well-formed rules, RULE_LENGTH has an undefined value. */
|
||||||
static int rule_length;
|
static int rule_length;
|
||||||
|
|
||||||
static void handle_dollar (braced_code_t code_kind,
|
static void handle_dollar (braced_code code_kind, char *cp, location loc);
|
||||||
char *cp, location_t location);
|
static void handle_at (braced_code code_kind, char *cp, location loc);
|
||||||
static void handle_at (braced_code_t code_kind,
|
|
||||||
char *cp, location_t location);
|
|
||||||
static void handle_syncline (char *args);
|
static void handle_syncline (char *args);
|
||||||
static int convert_ucn_to_byte (char const *hex_text);
|
static int convert_ucn_to_byte (char const *hex_text);
|
||||||
static void unexpected_end_of_file (boundary, char const *);
|
static void unexpected_end_of_file (boundary, char const *);
|
||||||
@@ -131,13 +132,13 @@ splice (\\[ \f\t\v]*\n)*
|
|||||||
int context_state IF_LINT (= 0);
|
int context_state IF_LINT (= 0);
|
||||||
|
|
||||||
/* Location of most recent identifier, when applicable. */
|
/* 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
|
/* Where containing comment or string or character literal started,
|
||||||
started, when applicable. */
|
when applicable. */
|
||||||
boundary token_start IF_LINT (= loc->start);
|
boundary token_start IF_LINT (= loc->start);
|
||||||
%}
|
%}
|
||||||
|
|
||||||
@@ -223,9 +224,9 @@ splice (\\[ \f\t\v]*\n)*
|
|||||||
|
|
||||||
{int} {
|
{int} {
|
||||||
unsigned long num;
|
unsigned long num;
|
||||||
errno = 0;
|
set_errno (0);
|
||||||
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));
|
complain_at (*loc, _("integer out of range: %s"), quote (yytext));
|
||||||
num = INT_MAX;
|
num = INT_MAX;
|
||||||
@@ -253,9 +254,9 @@ splice (\\[ \f\t\v]*\n)*
|
|||||||
|
|
||||||
/* A type. */
|
/* A type. */
|
||||||
"<"{tag}">" {
|
"<"{tag}">" {
|
||||||
obstack_grow (&string_obstack, yytext + 1, yyleng - 2);
|
obstack_grow (&obstack_for_string, yytext + 1, yyleng - 2);
|
||||||
STRING_FINISH;
|
STRING_FINISH;
|
||||||
val->struniq = struniq_new (last_string);
|
val->uniqstr = uniqstr_new (last_string);
|
||||||
STRING_FREE;
|
STRING_FREE;
|
||||||
return TYPE;
|
return TYPE;
|
||||||
}
|
}
|
||||||
@@ -349,7 +350,7 @@ splice (\\[ \f\t\v]*\n)*
|
|||||||
STRING_GROW;
|
STRING_GROW;
|
||||||
STRING_FINISH;
|
STRING_FINISH;
|
||||||
loc->start = token_start;
|
loc->start = token_start;
|
||||||
val->string = last_string;
|
val->chars = last_string;
|
||||||
rule_length++;
|
rule_length++;
|
||||||
BEGIN INITIAL;
|
BEGIN INITIAL;
|
||||||
return STRING;
|
return STRING;
|
||||||
@@ -396,36 +397,36 @@ splice (\\[ \f\t\v]*\n)*
|
|||||||
if (UCHAR_MAX < c)
|
if (UCHAR_MAX < c)
|
||||||
complain_at (*loc, _("invalid escape sequence: %s"), quote (yytext));
|
complain_at (*loc, _("invalid escape sequence: %s"), quote (yytext));
|
||||||
else
|
else
|
||||||
obstack_1grow (&string_obstack, c);
|
obstack_1grow (&obstack_for_string, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
\\x[0-9abcdefABCDEF]+ {
|
\\x[0-9abcdefABCDEF]+ {
|
||||||
unsigned long c;
|
unsigned long c;
|
||||||
errno = 0;
|
set_errno (0);
|
||||||
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));
|
complain_at (*loc, _("invalid escape sequence: %s"), quote (yytext));
|
||||||
else
|
else
|
||||||
obstack_1grow (&string_obstack, c);
|
obstack_1grow (&obstack_for_string, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
\\a obstack_1grow (&string_obstack, '\a');
|
\\a obstack_1grow (&obstack_for_string, '\a');
|
||||||
\\b obstack_1grow (&string_obstack, '\b');
|
\\b obstack_1grow (&obstack_for_string, '\b');
|
||||||
\\f obstack_1grow (&string_obstack, '\f');
|
\\f obstack_1grow (&obstack_for_string, '\f');
|
||||||
\\n obstack_1grow (&string_obstack, '\n');
|
\\n obstack_1grow (&obstack_for_string, '\n');
|
||||||
\\r obstack_1grow (&string_obstack, '\r');
|
\\r obstack_1grow (&obstack_for_string, '\r');
|
||||||
\\t obstack_1grow (&string_obstack, '\t');
|
\\t obstack_1grow (&obstack_for_string, '\t');
|
||||||
\\v obstack_1grow (&string_obstack, '\v');
|
\\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} {
|
\\(u|U[0-9abcdefABCDEF]{4})[0-9abcdefABCDEF]{4} {
|
||||||
int c = convert_ucn_to_byte (yytext);
|
int c = convert_ucn_to_byte (yytext);
|
||||||
if (c < 0)
|
if (c < 0)
|
||||||
complain_at (*loc, _("invalid escape sequence: %s"), quote (yytext));
|
complain_at (*loc, _("invalid escape sequence: %s"), quote (yytext));
|
||||||
else
|
else
|
||||||
obstack_1grow (&string_obstack, c);
|
obstack_1grow (&obstack_for_string, c);
|
||||||
}
|
}
|
||||||
\\(.|\n) {
|
\\(.|\n) {
|
||||||
complain_at (*loc, _("unrecognized escape sequence: %s"), quote (yytext));
|
complain_at (*loc, _("unrecognized escape sequence: %s"), quote (yytext));
|
||||||
@@ -508,7 +509,7 @@ splice (\\[ \f\t\v]*\n)*
|
|||||||
{
|
{
|
||||||
STRING_FINISH;
|
STRING_FINISH;
|
||||||
loc->start = code_start;
|
loc->start = code_start;
|
||||||
val->string = last_string;
|
val->chars = last_string;
|
||||||
rule_length++;
|
rule_length++;
|
||||||
BEGIN INITIAL;
|
BEGIN INITIAL;
|
||||||
return BRACED_CODE;
|
return BRACED_CODE;
|
||||||
@@ -537,7 +538,7 @@ splice (\\[ \f\t\v]*\n)*
|
|||||||
"%}" {
|
"%}" {
|
||||||
STRING_FINISH;
|
STRING_FINISH;
|
||||||
loc->start = code_start;
|
loc->start = code_start;
|
||||||
val->string = last_string;
|
val->chars = last_string;
|
||||||
BEGIN INITIAL;
|
BEGIN INITIAL;
|
||||||
return PROLOGUE;
|
return PROLOGUE;
|
||||||
}
|
}
|
||||||
@@ -556,7 +557,7 @@ splice (\\[ \f\t\v]*\n)*
|
|||||||
<<EOF>> {
|
<<EOF>> {
|
||||||
STRING_FINISH;
|
STRING_FINISH;
|
||||||
loc->start = code_start;
|
loc->start = code_start;
|
||||||
val->string = last_string;
|
val->chars = last_string;
|
||||||
BEGIN INITIAL;
|
BEGIN INITIAL;
|
||||||
return EPILOGUE;
|
return EPILOGUE;
|
||||||
}
|
}
|
||||||
@@ -570,10 +571,10 @@ splice (\\[ \f\t\v]*\n)*
|
|||||||
|
|
||||||
<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 (&obstack_for_string, "$][");
|
||||||
\@ obstack_sgrow (&string_obstack, "@@");
|
\@ obstack_sgrow (&obstack_for_string, "@@");
|
||||||
\[ obstack_sgrow (&string_obstack, "@{");
|
\[ obstack_sgrow (&obstack_for_string, "@{");
|
||||||
\] obstack_sgrow (&string_obstack, "@}");
|
\] obstack_sgrow (&obstack_for_string, "@}");
|
||||||
.|\n STRING_GROW;
|
.|\n STRING_GROW;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -584,7 +585,7 @@ splice (\\[ \f\t\v]*\n)*
|
|||||||
size SIZE. */
|
size SIZE. */
|
||||||
|
|
||||||
static void
|
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 line = scanner_cursor.line;
|
||||||
int column = scanner_cursor.column;
|
int column = scanner_cursor.column;
|
||||||
@@ -669,11 +670,11 @@ no_cr_read (FILE *fp, char *buf, size_t size)
|
|||||||
| |
|
| |
|
||||||
| 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;
|
const char *type_name = NULL;
|
||||||
char *cp = text + 1;
|
char *cp = text + 1;
|
||||||
@@ -691,38 +692,37 @@ handle_action_dollar (char *text, location_t location)
|
|||||||
if (*cp == '$')
|
if (*cp == '$')
|
||||||
{
|
{
|
||||||
if (!type_name)
|
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);
|
||||||
if (!type_name && typed)
|
if (!type_name && typed)
|
||||||
complain_at (location, _("$$ of `%s' has no declared type"),
|
complain_at (loc, _("$$ of `%s' has no declared type"),
|
||||||
current_rule->sym->tag);
|
current_rule->sym->tag);
|
||||||
if (!type_name)
|
if (!type_name)
|
||||||
type_name = "";
|
type_name = "";
|
||||||
obstack_fgrow1 (&string_obstack,
|
obstack_fgrow1 (&obstack_for_string,
|
||||||
"]b4_lhs_value([%s])[", type_name);
|
"]b4_lhs_value([%s])[", type_name);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
long num;
|
long num;
|
||||||
errno = 0;
|
set_errno (0);
|
||||||
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;
|
int n = num;
|
||||||
if (!type_name && n > 0)
|
if (!type_name && n > 0)
|
||||||
type_name = symbol_list_n_type_name_get (current_rule, location,
|
type_name = symbol_list_n_type_name_get (current_rule, loc, n);
|
||||||
n);
|
|
||||||
if (!type_name && typed)
|
if (!type_name && typed)
|
||||||
complain_at (location, _("$%d of `%s' has no declared type"),
|
complain_at (loc, _("$%d of `%s' has no declared type"),
|
||||||
n, current_rule->sym->tag);
|
n, current_rule->sym->tag);
|
||||||
if (!type_name)
|
if (!type_name)
|
||||||
type_name = "";
|
type_name = "";
|
||||||
obstack_fgrow3 (&string_obstack,
|
obstack_fgrow3 (&obstack_for_string,
|
||||||
"]b4_rhs_value([%d], [%d], [%s])[",
|
"]b4_rhs_value([%d], [%d], [%s])[",
|
||||||
rule_length, n, type_name);
|
rule_length, n, type_name);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
complain_at (location, _("integer out of range: %s"), quote (text));
|
complain_at (loc, _("integer out of range: %s"), quote (text));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -733,13 +733,13 @@ handle_action_dollar (char *text, location_t location)
|
|||||||
`---------------------------------------------------------------*/
|
`---------------------------------------------------------------*/
|
||||||
|
|
||||||
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;
|
char *cp = text + 1;
|
||||||
if (*cp == '$')
|
if (*cp == '$')
|
||||||
obstack_sgrow (&string_obstack, "]b4_dollar_dollar[");
|
obstack_sgrow (&obstack_for_string, "]b4_dollar_dollar[");
|
||||||
else
|
else
|
||||||
complain_at (location, _("invalid value: %s"), quote (text));
|
complain_at (loc, _("invalid value: %s"), quote (text));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -749,18 +749,17 @@ handle_symbol_code_dollar (char *text, location_t location)
|
|||||||
`-----------------------------------------------------------------*/
|
`-----------------------------------------------------------------*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
handle_dollar (braced_code_t braced_code_kind,
|
handle_dollar (braced_code braced_code_kind, char *text, location loc)
|
||||||
char *text, location_t location)
|
|
||||||
{
|
{
|
||||||
switch (braced_code_kind)
|
switch (braced_code_kind)
|
||||||
{
|
{
|
||||||
case action_braced_code:
|
case action_braced_code:
|
||||||
handle_action_dollar (text, location);
|
handle_action_dollar (text, loc);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case destructor_braced_code:
|
case destructor_braced_code:
|
||||||
case printer_braced_code:
|
case printer_braced_code:
|
||||||
handle_symbol_code_dollar (text, location);
|
handle_symbol_code_dollar (text, loc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -768,33 +767,33 @@ handle_dollar (braced_code_t braced_code_kind,
|
|||||||
|
|
||||||
/*------------------------------------------------------.
|
/*------------------------------------------------------.
|
||||||
| 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;
|
char *cp = text + 1;
|
||||||
locations_flag = 1;
|
locations_flag = 1;
|
||||||
|
|
||||||
if (*cp == '$')
|
if (*cp == '$')
|
||||||
{
|
{
|
||||||
obstack_sgrow (&string_obstack, "]b4_lhs_location[");
|
obstack_sgrow (&obstack_for_string, "]b4_lhs_location[");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
long num;
|
long num;
|
||||||
errno = 0;
|
set_errno (0);
|
||||||
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;
|
int n = num;
|
||||||
obstack_fgrow2 (&string_obstack, "]b4_rhs_location([%d], [%d])[",
|
obstack_fgrow2 (&obstack_for_string, "]b4_rhs_location([%d], [%d])[",
|
||||||
rule_length, n);
|
rule_length, n);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
complain_at (location, _("integer out of range: %s"), quote (text));
|
complain_at (loc, _("integer out of range: %s"), quote (text));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -805,13 +804,13 @@ handle_action_at (char *text, location_t location)
|
|||||||
`---------------------------------------------------------------*/
|
`---------------------------------------------------------------*/
|
||||||
|
|
||||||
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;
|
char *cp = text + 1;
|
||||||
if (*cp == '$')
|
if (*cp == '$')
|
||||||
obstack_sgrow (&string_obstack, "]b4_at_dollar[");
|
obstack_sgrow (&obstack_for_string, "]b4_at_dollar[");
|
||||||
else
|
else
|
||||||
complain_at (location, _("invalid value: %s"), quote (text));
|
complain_at (loc, _("invalid value: %s"), quote (text));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -821,18 +820,17 @@ handle_symbol_code_at (char *text, location_t location)
|
|||||||
`-------------------------------------------------------------------*/
|
`-------------------------------------------------------------------*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
handle_at (braced_code_t braced_code_kind,
|
handle_at (braced_code braced_code_kind, char *text, location loc)
|
||||||
char *text, location_t location)
|
|
||||||
{
|
{
|
||||||
switch (braced_code_kind)
|
switch (braced_code_kind)
|
||||||
{
|
{
|
||||||
case action_braced_code:
|
case action_braced_code:
|
||||||
handle_action_at (text, location);
|
handle_action_at (text, loc);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case destructor_braced_code:
|
case destructor_braced_code:
|
||||||
case printer_braced_code:
|
case printer_braced_code:
|
||||||
handle_symbol_code_at (text, location);
|
handle_symbol_code_at (text, loc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -922,10 +920,10 @@ unexpected_end_of_file (boundary start, char const *token_end)
|
|||||||
{
|
{
|
||||||
size_t i = strlen (token_end);
|
size_t i = strlen (token_end);
|
||||||
|
|
||||||
location_t location;
|
location loc;
|
||||||
location.start = start;
|
loc.start = start;
|
||||||
location.end = scanner_cursor;
|
loc.end = scanner_cursor;
|
||||||
complain_at (location, _("missing `%s' at end of file"), token_end);
|
complain_at (loc, _("missing `%s' at end of file"), token_end);
|
||||||
|
|
||||||
/* Adjust scanner cursor so that any later message does not count
|
/* Adjust scanner cursor so that any later message does not count
|
||||||
the characters about to be inserted. */
|
the characters about to be inserted. */
|
||||||
@@ -943,7 +941,7 @@ unexpected_end_of_file (boundary start, char const *token_end)
|
|||||||
void
|
void
|
||||||
scanner_initialize (void)
|
scanner_initialize (void)
|
||||||
{
|
{
|
||||||
obstack_init (&string_obstack);
|
obstack_init (&obstack_for_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -954,7 +952,7 @@ scanner_initialize (void)
|
|||||||
void
|
void
|
||||||
scanner_free (void)
|
scanner_free (void)
|
||||||
{
|
{
|
||||||
obstack_free (&string_obstack, 0);
|
obstack_free (&obstack_for_string, 0);
|
||||||
/* Reclaim Flex's buffers. */
|
/* Reclaim Flex's buffers. */
|
||||||
yy_delete_buffer (YY_CURRENT_BUFFER);
|
yy_delete_buffer (YY_CURRENT_BUFFER);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user