/* YACC parser for Pascal expressions, for GDB.
- Copyright (C) 2000-2018 Free Software Foundation, Inc.
+ Copyright (C) 2000-2019 Free Software Foundation, Inc.
This file is part of GDB.
static int yylex (void);
-void yyerror (const char *);
+static void yyerror (const char *);
static char *uptok (const char *, int);
%}
/* Special type cases, put in to allow the parser to distinguish different
legal basetypes. */
-%token <voidval> VARIABLE
+%token <voidval> DOLLAR_VARIABLE
/* Object pascal */
exp : variable
;
-exp : VARIABLE
+exp : DOLLAR_VARIABLE
/* Already written by write_dollar_variable.
Handle current_type. */
{ if (intvar) {
if (sym.symbol)
{
if (symbol_read_needs_frame (sym.symbol))
- {
- if (innermost_block == 0
- || contained_in (sym.block,
- innermost_block))
- innermost_block = sym.block;
- }
+ innermost_block.update (sym);
write_exp_elt_opcode (pstate, OP_VAR_VALUE);
write_exp_elt_block (pstate, sym.block);
/* Object pascal: it hangs off of `this'. Must
not inadvertently convert from a method call
to data ref. */
- if (innermost_block == 0
- || contained_in (sym.block,
- innermost_block))
- innermost_block = sym.block;
+ innermost_block.update (sym);
write_exp_elt_opcode (pstate, OP_THIS);
write_exp_elt_opcode (pstate, OP_THIS);
write_exp_elt_opcode (pstate, STRUCTOP_PTR);
{
int c;
int namelen;
- unsigned int i;
const char *tokstart;
char *uptokstart;
const char *tokptr;
/* See if it is a special token of length 3. */
if (explen > 2)
- for (i = 0; i < sizeof (tokentab3) / sizeof (tokentab3[0]); i++)
+ for (int i = 0; i < sizeof (tokentab3) / sizeof (tokentab3[0]); i++)
if (strncasecmp (tokstart, tokentab3[i].oper, 3) == 0
&& (!isalpha (tokentab3[i].oper[0]) || explen == 3
|| (!isalpha (tokstart[3])
/* See if it is a special token of length 2. */
if (explen > 1)
- for (i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++)
+ for (int i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++)
if (strncasecmp (tokstart, tokentab2[i].oper, 2) == 0
&& (!isalpha (tokentab2[i].oper[0]) || explen == 2
|| (!isalpha (tokstart[2])
goto symbol; /* Nope, must be a symbol. */
}
- /* FALL THRU into number case. */
+ /* FALL THRU. */
case '0':
case '1':
tmp[namelen] = '\0';
intvar = lookup_only_internalvar (tmp + 1);
free (uptokstart);
- return VARIABLE;
+ return DOLLAR_VARIABLE;
}
/* Use token-type BLOCKNAME for symbols that happen to be defined as
/* second chance uppercased (as Free Pascal does). */
if (!sym && is_a_field_of_this.type == NULL && !is_a_field)
{
- for (i = 0; i <= namelen; i++)
+ for (int i = 0; i <= namelen; i++)
{
if ((tmp[i] >= 'a' && tmp[i] <= 'z'))
tmp[i] -= ('a'-'A');
/* Third chance Capitalized (as GPC does). */
if (!sym && is_a_field_of_this.type == NULL && !is_a_field)
{
- for (i = 0; i <= namelen; i++)
+ for (int i = 0; i <= namelen; i++)
{
if (i == 0)
{
return yyparse ();
}
-void
+static void
yyerror (const char *msg)
{
if (prev_lexptr)
lexptr = prev_lexptr;
- error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr);
+ error (_("A %s in expression, near `%s'."), msg, lexptr);
}