diff options
author | Per Bothner <per@bothner.com> | 1995-10-05 22:15:49 +0000 |
---|---|---|
committer | Per Bothner <per@bothner.com> | 1995-10-05 22:15:49 +0000 |
commit | c700638ca7c1c0d0dd2fac7983b2d59ca7217099 (patch) | |
tree | 26f626fff3ab5bc27552c5492ee56a42666f3f9c /gdb/m2-exp.y | |
parent | db552bdadca2fda93c84cfa89dd41b49ee9e9193 (diff) | |
download | gdb-c700638ca7c1c0d0dd2fac7983b2d59ca7217099.zip gdb-c700638ca7c1c0d0dd2fac7983b2d59ca7217099.tar.gz gdb-c700638ca7c1c0d0dd2fac7983b2d59ca7217099.tar.bz2 |
* parse.c (write_dollar_variable): New function.
* c-exp.y (yylex): Replace code for recognizing '$' pseudo-variables
with a call to write_dollar_variable.
Simplify grammar correspondingly.
* f-exp.y: Likewise.
* m2-exp.y: Likewise.
* ch-exp.y: Likewise. (Remove function match_dollar_tokens.)
* scm-exp.c (scm_lreadr): Call write_dollar_variable to handle '$'.
Diffstat (limited to 'gdb/m2-exp.y')
-rw-r--r-- | gdb/m2-exp.y | 80 |
1 files changed, 2 insertions, 78 deletions
diff --git a/gdb/m2-exp.y b/gdb/m2-exp.y index efcaab8..9ec896f 100644 --- a/gdb/m2-exp.y +++ b/gdb/m2-exp.y @@ -178,9 +178,7 @@ static struct block *modblock=0; /* The GDB scope operator */ %token COLONCOLON -%token <lval> LAST REGNAME - -%token <ivar> INTERNAL_VAR +%token <voidval> INTERNAL_VAR /* M2 tokens */ %left ',' @@ -519,19 +517,6 @@ exp : FLOAT exp : variable ; -/* The GDB internal variable $$, et al. */ -exp : LAST - { write_exp_elt_opcode (OP_LAST); - write_exp_elt_longcst ((LONGEST) $1); - write_exp_elt_opcode (OP_LAST); } - ; - -exp : REGNAME - { write_exp_elt_opcode (OP_REGISTER); - write_exp_elt_longcst ((LONGEST) $1); - write_exp_elt_opcode (OP_REGISTER); } - ; - exp : SIZE '(' type ')' %prec UNARY { write_exp_elt_opcode (OP_LONG); write_exp_elt_type (builtin_type_int); @@ -580,9 +565,6 @@ variable: fblock /* GDB internal ($foo) variable */ variable: INTERNAL_VAR - { write_exp_elt_opcode (OP_INTERNALVAR); - write_exp_elt_intern ($1); - write_exp_elt_opcode (OP_INTERNALVAR); } ; /* GDB scope operator */ @@ -1003,61 +985,6 @@ yylex () lexptr += namelen; - /* Handle the tokens $digits; also $ (short for $0) and $$ (short for $$1) - and $$digits (equivalent to $<-digits> if you could type that). - Make token type LAST, and put the number (the digits) in yylval. */ - - if (*tokstart == '$') - { - register int negate = 0; - c = 1; - /* Double dollar means negate the number and add -1 as well. - Thus $$ alone means -1. */ - if (namelen >= 2 && tokstart[1] == '$') - { - negate = 1; - c = 2; - } - if (c == namelen) - { - /* Just dollars (one or two) */ - yylval.lval = - negate; - return LAST; - } - /* Is the rest of the token digits? */ - for (; c < namelen; c++) - if (!(tokstart[c] >= '0' && tokstart[c] <= '9')) - break; - if (c == namelen) - { - yylval.lval = atoi (tokstart + 1 + negate); - if (negate) - yylval.lval = - yylval.lval; - return LAST; - } - } - - /* Handle tokens that refer to machine registers: - $ followed by a register name. */ - - if (*tokstart == '$') { - for (c = 0; c < NUM_REGS; c++) - if (namelen - 1 == strlen (reg_names[c]) - && STREQN (tokstart + 1, reg_names[c], namelen - 1)) - { - yylval.lval = c; - return REGNAME; - } - for (c = 0; c < num_std_regs; c++) - if (namelen - 1 == strlen (std_regs[c].name) - && STREQN (tokstart + 1, std_regs[c].name, namelen - 1)) - { - yylval.lval = std_regs[c].regnum; - return REGNAME; - } - } - - /* Lookup special keywords */ for(i = 0 ; i < sizeof(keytab) / sizeof(keytab[0]) ; i++) if(namelen == strlen(keytab[i].keyw) && STREQN(tokstart,keytab[i].keyw,namelen)) @@ -1066,15 +993,12 @@ yylex () yylval.sval.ptr = tokstart; yylval.sval.length = namelen; - /* Any other names starting in $ are debugger internal variables. */ - if (*tokstart == '$') { - yylval.ivar = (struct internalvar *) lookup_internalvar (copy_name (yylval.sval) + 1); + write_dollar_variable (yylval.sval); return INTERNAL_VAR; } - /* Use token-type BLOCKNAME for symbols that happen to be defined as functions. If this is not so, then ... Use token-type TYPENAME for symbols that happen to be defined |