gas/
[deliverable/binutils-gdb.git] / gdb / p-exp.y
CommitLineData
373a8247 1/* YACC parser for Pascal expressions, for GDB.
7b6bb8da 2 Copyright (C) 2000, 2006, 2007, 2008, 2009, 2010, 2011
4c38e0a4 3 Free Software Foundation, Inc.
373a8247 4
5b1ba0e5 5 This file is part of GDB.
373a8247 6
5b1ba0e5
NS
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
373a8247 11
5b1ba0e5
NS
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
373a8247 16
5b1ba0e5
NS
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
373a8247
PM
19
20/* This file is derived from c-exp.y */
21
22/* Parse a Pascal expression from text in a string,
23 and return the result as a struct expression pointer.
24 That structure contains arithmetic operations in reverse polish,
25 with constants represented by operations that are followed by special data.
26 See expression.h for the details of the format.
27 What is important here is that it can be built up sequentially
28 during the process of parsing; the lower levels of the tree always
29 come first in the result.
30
31 Note that malloc's and realloc's in this file are transformed to
32 xmalloc and xrealloc respectively by the same sed command in the
33 makefile that remaps any other malloc/realloc inserted by the parser
34 generator. Doing this with #defines and trying to control the interaction
35 with include files (<malloc.h> and <stdlib.h> for example) just became
36 too messy, particularly when such includes can be inserted at random
37 times by the parser generator. */
38
29f319b8 39/* Known bugs or limitations:
373a8247
PM
40 - pascal string operations are not supported at all.
41 - there are some problems with boolean types.
42 - Pascal type hexadecimal constants are not supported
43 because they conflict with the internal variables format.
0df8b418 44 Probably also lots of other problems, less well defined PM. */
373a8247
PM
45%{
46
47#include "defs.h"
48#include "gdb_string.h"
49#include <ctype.h>
50#include "expression.h"
51#include "value.h"
52#include "parser-defs.h"
53#include "language.h"
54#include "p-lang.h"
55#include "bfd.h" /* Required by objfiles.h. */
56#include "symfile.h" /* Required by objfiles.h. */
0df8b418 57#include "objfiles.h" /* For have_full_symbols and have_partial_symbols. */
fe898f56 58#include "block.h"
373a8247 59
3e79cecf
UW
60#define parse_type builtin_type (parse_gdbarch)
61
373a8247
PM
62/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
63 as well as gratuitiously global symbol names, so we can have multiple
64 yacc generated parsers in gdb. Note that these are only the variables
65 produced by yacc. If other parser generators (bison, byacc, etc) produce
66 additional global names that conflict at link time, then those parser
0df8b418 67 generators need to be fixed instead of adding those names to this list. */
373a8247
PM
68
69#define yymaxdepth pascal_maxdepth
70#define yyparse pascal_parse
71#define yylex pascal_lex
72#define yyerror pascal_error
73#define yylval pascal_lval
74#define yychar pascal_char
75#define yydebug pascal_debug
6ced1581
PM
76#define yypact pascal_pact
77#define yyr1 pascal_r1
78#define yyr2 pascal_r2
79#define yydef pascal_def
80#define yychk pascal_chk
81#define yypgo pascal_pgo
373a8247
PM
82#define yyact pascal_act
83#define yyexca pascal_exca
84#define yyerrflag pascal_errflag
85#define yynerrs pascal_nerrs
86#define yyps pascal_ps
87#define yypv pascal_pv
88#define yys pascal_s
89#define yy_yys pascal_yys
90#define yystate pascal_state
91#define yytmp pascal_tmp
92#define yyv pascal_v
93#define yy_yyv pascal_yyv
94#define yyval pascal_val
95#define yylloc pascal_lloc
96#define yyreds pascal_reds /* With YYDEBUG defined */
97#define yytoks pascal_toks /* With YYDEBUG defined */
06891d83
JT
98#define yyname pascal_name /* With YYDEBUG defined */
99#define yyrule pascal_rule /* With YYDEBUG defined */
373a8247
PM
100#define yylhs pascal_yylhs
101#define yylen pascal_yylen
102#define yydefred pascal_yydefred
103#define yydgoto pascal_yydgoto
104#define yysindex pascal_yysindex
105#define yyrindex pascal_yyrindex
106#define yygindex pascal_yygindex
107#define yytable pascal_yytable
108#define yycheck pascal_yycheck
109
110#ifndef YYDEBUG
f461f5cf 111#define YYDEBUG 1 /* Default to yydebug support */
373a8247
PM
112#endif
113
f461f5cf
PM
114#define YYFPRINTF parser_fprintf
115
373a8247
PM
116int yyparse (void);
117
118static int yylex (void);
119
2021ad3a 120void yyerror (char *);
373a8247
PM
121
122static char * uptok (char *, int);
123%}
124
125/* Although the yacc "value" of an expression is not used,
126 since the result is stored in the structure being created,
127 other node types do have values. */
128
129%union
130 {
131 LONGEST lval;
132 struct {
133 LONGEST val;
134 struct type *type;
135 } typed_val_int;
136 struct {
137 DOUBLEST dval;
138 struct type *type;
139 } typed_val_float;
140 struct symbol *sym;
141 struct type *tval;
142 struct stoken sval;
143 struct ttype tsym;
144 struct symtoken ssym;
145 int voidval;
146 struct block *bval;
147 enum exp_opcode opcode;
148 struct internalvar *ivar;
149
150 struct type **tvec;
151 int *ivec;
152 }
153
154%{
155/* YYSTYPE gets defined by %union */
2021ad3a 156static int parse_number (char *, int, int, YYSTYPE *);
9819c6c8
PM
157
158static struct type *current_type;
a5a44b53 159static struct internalvar *intvar;
4ae0885a 160static int leftdiv_is_integer;
b9362cc7
AC
161static void push_current_type (void);
162static void pop_current_type (void);
9819c6c8 163static int search_field;
373a8247
PM
164%}
165
9819c6c8 166%type <voidval> exp exp1 type_exp start normal_start variable qualified_name
373a8247
PM
167%type <tval> type typebase
168/* %type <bval> block */
169
170/* Fancy type parsing. */
171%type <tval> ptype
172
173%token <typed_val_int> INT
174%token <typed_val_float> FLOAT
175
176/* Both NAME and TYPENAME tokens represent symbols in the input,
177 and both convey their data as strings.
178 But a TYPENAME is a string that happens to be defined as a typedef
179 or builtin type name (such as int or char)
180 and a NAME is any other symbol.
181 Contexts where this distinction is not important can use the
182 nonterminal "name", which matches either NAME or TYPENAME. */
183
6ced1581 184%token <sval> STRING
9819c6c8 185%token <sval> FIELDNAME
a5a44b53 186%token <voidval> COMPLETE
0df8b418 187%token <ssym> NAME /* BLOCKNAME defined below to give it higher precedence. */
373a8247
PM
188%token <tsym> TYPENAME
189%type <sval> name
190%type <ssym> name_not_typename
191
192/* A NAME_OR_INT is a symbol which is not known in the symbol table,
193 but which would parse as a valid number in the current input radix.
194 E.g. "c" when input_radix==16. Depending on the parse, it will be
195 turned into a name or into a number. */
196
197%token <ssym> NAME_OR_INT
198
199%token STRUCT CLASS SIZEOF COLONCOLON
200%token ERROR
201
202/* Special type cases, put in to allow the parser to distinguish different
203 legal basetypes. */
204
205%token <voidval> VARIABLE
206
207
208/* Object pascal */
209%token THIS
2692ddb3 210%token <lval> TRUEKEYWORD FALSEKEYWORD
373a8247
PM
211
212%left ','
213%left ABOVE_COMMA
214%right ASSIGN
215%left NOT
216%left OR
217%left XOR
218%left ANDAND
219%left '=' NOTEQUAL
220%left '<' '>' LEQ GEQ
221%left LSH RSH DIV MOD
222%left '@'
223%left '+' '-'
224%left '*' '/'
225%right UNARY INCREMENT DECREMENT
226%right ARROW '.' '[' '('
29f319b8 227%left '^'
373a8247
PM
228%token <ssym> BLOCKNAME
229%type <bval> block
230%left COLONCOLON
231
232\f
233%%
234
9819c6c8 235start : { current_type = NULL;
a5a44b53 236 intvar = NULL;
9819c6c8 237 search_field = 0;
4ae0885a 238 leftdiv_is_integer = 0;
9819c6c8 239 }
ef944135
TR
240 normal_start {}
241 ;
9819c6c8
PM
242
243normal_start :
244 exp1
373a8247
PM
245 | type_exp
246 ;
247
248type_exp: type
249 { write_exp_elt_opcode(OP_TYPE);
250 write_exp_elt_type($1);
9819c6c8
PM
251 write_exp_elt_opcode(OP_TYPE);
252 current_type = $1; } ;
373a8247
PM
253
254/* Expressions, including the comma operator. */
255exp1 : exp
256 | exp1 ',' exp
257 { write_exp_elt_opcode (BINOP_COMMA); }
258 ;
259
260/* Expressions, not including the comma operator. */
261exp : exp '^' %prec UNARY
9819c6c8 262 { write_exp_elt_opcode (UNOP_IND);
6ced1581 263 if (current_type)
9819c6c8 264 current_type = TYPE_TARGET_TYPE (current_type); }
ef944135 265 ;
373a8247
PM
266
267exp : '@' exp %prec UNARY
6ced1581 268 { write_exp_elt_opcode (UNOP_ADDR);
9819c6c8
PM
269 if (current_type)
270 current_type = TYPE_POINTER_TYPE (current_type); }
ef944135 271 ;
373a8247
PM
272
273exp : '-' exp %prec UNARY
274 { write_exp_elt_opcode (UNOP_NEG); }
275 ;
276
277exp : NOT exp %prec UNARY
278 { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
279 ;
280
281exp : INCREMENT '(' exp ')' %prec UNARY
282 { write_exp_elt_opcode (UNOP_PREINCREMENT); }
283 ;
284
285exp : DECREMENT '(' exp ')' %prec UNARY
286 { write_exp_elt_opcode (UNOP_PREDECREMENT); }
287 ;
288
a5a44b53
PM
289
290field_exp : exp '.' %prec UNARY
6ced1581 291 { search_field = 1; }
a5a44b53
PM
292 ;
293
6ced1581 294exp : field_exp FIELDNAME
373a8247 295 { write_exp_elt_opcode (STRUCTOP_STRUCT);
6ced1581 296 write_exp_string ($2);
a5a44b53 297 write_exp_elt_opcode (STRUCTOP_STRUCT);
6ced1581 298 search_field = 0;
a5a44b53 299 if (current_type)
6ced1581 300 {
a5a44b53
PM
301 while (TYPE_CODE (current_type)
302 == TYPE_CODE_PTR)
303 current_type =
304 TYPE_TARGET_TYPE (current_type);
305 current_type = lookup_struct_elt_type (
306 current_type, $2.ptr, 0);
307 }
308 }
6ced1581
PM
309 ;
310
a5a44b53
PM
311
312exp : field_exp name
313 { mark_struct_expression ();
314 write_exp_elt_opcode (STRUCTOP_STRUCT);
315 write_exp_string ($2);
9819c6c8 316 write_exp_elt_opcode (STRUCTOP_STRUCT);
6ced1581 317 search_field = 0;
9819c6c8 318 if (current_type)
6ced1581 319 {
a5a44b53
PM
320 while (TYPE_CODE (current_type)
321 == TYPE_CODE_PTR)
322 current_type =
323 TYPE_TARGET_TYPE (current_type);
9819c6c8 324 current_type = lookup_struct_elt_type (
a5a44b53
PM
325 current_type, $2.ptr, 0);
326 }
327 }
328 ;
329
330exp : field_exp COMPLETE
331 { struct stoken s;
332 mark_struct_expression ();
333 write_exp_elt_opcode (STRUCTOP_STRUCT);
334 s.ptr = "";
335 s.length = 0;
336 write_exp_string (s);
337 write_exp_elt_opcode (STRUCTOP_STRUCT); }
338 ;
339
9819c6c8 340exp : exp '['
0df8b418 341 /* We need to save the current_type value. */
6ced1581 342 { char *arrayname;
9819c6c8
PM
343 int arrayfieldindex;
344 arrayfieldindex = is_pascal_string_type (
345 current_type, NULL, NULL,
6ced1581
PM
346 NULL, NULL, &arrayname);
347 if (arrayfieldindex)
9819c6c8
PM
348 {
349 struct stoken stringsval;
350 stringsval.ptr = alloca (strlen (arrayname) + 1);
351 stringsval.length = strlen (arrayname);
352 strcpy (stringsval.ptr, arrayname);
353 current_type = TYPE_FIELD_TYPE (current_type,
6ced1581 354 arrayfieldindex - 1);
9819c6c8 355 write_exp_elt_opcode (STRUCTOP_STRUCT);
6ced1581 356 write_exp_string (stringsval);
9819c6c8
PM
357 write_exp_elt_opcode (STRUCTOP_STRUCT);
358 }
359 push_current_type (); }
360 exp1 ']'
361 { pop_current_type ();
362 write_exp_elt_opcode (BINOP_SUBSCRIPT);
363 if (current_type)
364 current_type = TYPE_TARGET_TYPE (current_type); }
ef944135 365 ;
373a8247
PM
366
367exp : exp '('
368 /* This is to save the value of arglist_len
369 being accumulated by an outer function call. */
9819c6c8
PM
370 { push_current_type ();
371 start_arglist (); }
373a8247
PM
372 arglist ')' %prec ARROW
373 { write_exp_elt_opcode (OP_FUNCALL);
374 write_exp_elt_longcst ((LONGEST) end_arglist ());
6ced1581 375 write_exp_elt_opcode (OP_FUNCALL);
4ae0885a
PM
376 pop_current_type ();
377 if (current_type)
378 current_type = TYPE_TARGET_TYPE (current_type);
379 }
373a8247
PM
380 ;
381
382arglist :
383 | exp
384 { arglist_len = 1; }
385 | arglist ',' exp %prec ABOVE_COMMA
386 { arglist_len++; }
387 ;
388
389exp : type '(' exp ')' %prec UNARY
fd0e9d45
PM
390 { if (current_type)
391 {
392 /* Allow automatic dereference of classes. */
393 if ((TYPE_CODE (current_type) == TYPE_CODE_PTR)
394 && (TYPE_CODE (TYPE_TARGET_TYPE (current_type)) == TYPE_CODE_CLASS)
395 && (TYPE_CODE ($1) == TYPE_CODE_CLASS))
396 write_exp_elt_opcode (UNOP_IND);
397 }
398 write_exp_elt_opcode (UNOP_CAST);
373a8247 399 write_exp_elt_type ($1);
6ced1581 400 write_exp_elt_opcode (UNOP_CAST);
9819c6c8 401 current_type = $1; }
373a8247
PM
402 ;
403
404exp : '(' exp1 ')'
405 { }
406 ;
407
408/* Binary operators in order of decreasing precedence. */
409
410exp : exp '*' exp
411 { write_exp_elt_opcode (BINOP_MUL); }
412 ;
413
4ae0885a
PM
414exp : exp '/' {
415 if (current_type && is_integral_type (current_type))
416 leftdiv_is_integer = 1;
6ced1581 417 }
4ae0885a 418 exp
6ced1581 419 {
4ae0885a
PM
420 if (leftdiv_is_integer && current_type
421 && is_integral_type (current_type))
422 {
423 write_exp_elt_opcode (UNOP_CAST);
3e79cecf
UW
424 write_exp_elt_type (parse_type->builtin_long_double);
425 current_type = parse_type->builtin_long_double;
4ae0885a
PM
426 write_exp_elt_opcode (UNOP_CAST);
427 leftdiv_is_integer = 0;
428 }
429
6ced1581 430 write_exp_elt_opcode (BINOP_DIV);
4ae0885a 431 }
373a8247
PM
432 ;
433
434exp : exp DIV exp
435 { write_exp_elt_opcode (BINOP_INTDIV); }
436 ;
437
438exp : exp MOD exp
439 { write_exp_elt_opcode (BINOP_REM); }
440 ;
441
442exp : exp '+' exp
443 { write_exp_elt_opcode (BINOP_ADD); }
444 ;
445
446exp : exp '-' exp
447 { write_exp_elt_opcode (BINOP_SUB); }
448 ;
449
450exp : exp LSH exp
451 { write_exp_elt_opcode (BINOP_LSH); }
452 ;
453
454exp : exp RSH exp
455 { write_exp_elt_opcode (BINOP_RSH); }
456 ;
457
458exp : exp '=' exp
6ced1581 459 { write_exp_elt_opcode (BINOP_EQUAL);
3e79cecf 460 current_type = parse_type->builtin_bool;
4ae0885a 461 }
373a8247
PM
462 ;
463
464exp : exp NOTEQUAL exp
6ced1581 465 { write_exp_elt_opcode (BINOP_NOTEQUAL);
3e79cecf 466 current_type = parse_type->builtin_bool;
4ae0885a 467 }
373a8247
PM
468 ;
469
470exp : exp LEQ exp
6ced1581 471 { write_exp_elt_opcode (BINOP_LEQ);
3e79cecf 472 current_type = parse_type->builtin_bool;
4ae0885a 473 }
373a8247
PM
474 ;
475
476exp : exp GEQ exp
6ced1581 477 { write_exp_elt_opcode (BINOP_GEQ);
3e79cecf 478 current_type = parse_type->builtin_bool;
4ae0885a 479 }
373a8247
PM
480 ;
481
482exp : exp '<' exp
6ced1581 483 { write_exp_elt_opcode (BINOP_LESS);
3e79cecf 484 current_type = parse_type->builtin_bool;
4ae0885a 485 }
373a8247
PM
486 ;
487
488exp : exp '>' exp
6ced1581 489 { write_exp_elt_opcode (BINOP_GTR);
3e79cecf 490 current_type = parse_type->builtin_bool;
4ae0885a 491 }
373a8247
PM
492 ;
493
494exp : exp ANDAND exp
495 { write_exp_elt_opcode (BINOP_BITWISE_AND); }
496 ;
497
498exp : exp XOR exp
499 { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
500 ;
501
502exp : exp OR exp
503 { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
504 ;
505
506exp : exp ASSIGN exp
507 { write_exp_elt_opcode (BINOP_ASSIGN); }
508 ;
509
2692ddb3 510exp : TRUEKEYWORD
373a8247
PM
511 { write_exp_elt_opcode (OP_BOOL);
512 write_exp_elt_longcst ((LONGEST) $1);
3e79cecf 513 current_type = parse_type->builtin_bool;
373a8247
PM
514 write_exp_elt_opcode (OP_BOOL); }
515 ;
516
2692ddb3 517exp : FALSEKEYWORD
373a8247
PM
518 { write_exp_elt_opcode (OP_BOOL);
519 write_exp_elt_longcst ((LONGEST) $1);
3e79cecf 520 current_type = parse_type->builtin_bool;
373a8247
PM
521 write_exp_elt_opcode (OP_BOOL); }
522 ;
523
524exp : INT
525 { write_exp_elt_opcode (OP_LONG);
526 write_exp_elt_type ($1.type);
4ae0885a 527 current_type = $1.type;
373a8247
PM
528 write_exp_elt_longcst ((LONGEST)($1.val));
529 write_exp_elt_opcode (OP_LONG); }
530 ;
531
532exp : NAME_OR_INT
533 { YYSTYPE val;
0df8b418
MS
534 parse_number ($1.stoken.ptr,
535 $1.stoken.length, 0, &val);
373a8247
PM
536 write_exp_elt_opcode (OP_LONG);
537 write_exp_elt_type (val.typed_val_int.type);
4ae0885a 538 current_type = val.typed_val_int.type;
0df8b418
MS
539 write_exp_elt_longcst ((LONGEST)
540 val.typed_val_int.val);
373a8247
PM
541 write_exp_elt_opcode (OP_LONG);
542 }
543 ;
544
545
546exp : FLOAT
547 { write_exp_elt_opcode (OP_DOUBLE);
548 write_exp_elt_type ($1.type);
4ae0885a 549 current_type = $1.type;
373a8247
PM
550 write_exp_elt_dblcst ($1.dval);
551 write_exp_elt_opcode (OP_DOUBLE); }
552 ;
553
554exp : variable
555 ;
556
557exp : VARIABLE
a5a44b53
PM
558 /* Already written by write_dollar_variable.
559 Handle current_type. */
560 { if (intvar) {
561 struct value * val, * mark;
562
563 mark = value_mark ();
564 val = value_of_internalvar (parse_gdbarch,
565 intvar);
566 current_type = value_type (val);
567 value_release_to_mark (mark);
568 }
569 }
570 ;
373a8247
PM
571
572exp : SIZEOF '(' type ')' %prec UNARY
573 { write_exp_elt_opcode (OP_LONG);
3e79cecf 574 write_exp_elt_type (parse_type->builtin_int);
373a8247
PM
575 CHECK_TYPEDEF ($3);
576 write_exp_elt_longcst ((LONGEST) TYPE_LENGTH ($3));
577 write_exp_elt_opcode (OP_LONG); }
578 ;
579
28e176a6
PM
580exp : SIZEOF '(' exp ')' %prec UNARY
581 { write_exp_elt_opcode (UNOP_SIZEOF); }
6ced1581 582
373a8247
PM
583exp : STRING
584 { /* C strings are converted into array constants with
585 an explicit null byte added at the end. Thus
586 the array upper bound is the string length.
587 There is no such thing in C as a completely empty
0df8b418 588 string. */
373a8247
PM
589 char *sp = $1.ptr; int count = $1.length;
590 while (count-- > 0)
591 {
592 write_exp_elt_opcode (OP_LONG);
3e79cecf 593 write_exp_elt_type (parse_type->builtin_char);
373a8247
PM
594 write_exp_elt_longcst ((LONGEST)(*sp++));
595 write_exp_elt_opcode (OP_LONG);
596 }
597 write_exp_elt_opcode (OP_LONG);
3e79cecf 598 write_exp_elt_type (parse_type->builtin_char);
373a8247
PM
599 write_exp_elt_longcst ((LONGEST)'\0');
600 write_exp_elt_opcode (OP_LONG);
601 write_exp_elt_opcode (OP_ARRAY);
602 write_exp_elt_longcst ((LONGEST) 0);
603 write_exp_elt_longcst ((LONGEST) ($1.length));
604 write_exp_elt_opcode (OP_ARRAY); }
605 ;
606
607/* Object pascal */
608exp : THIS
6ced1581 609 {
fd0e9d45
PM
610 struct value * this_val;
611 struct type * this_type;
612 write_exp_elt_opcode (OP_THIS);
6ced1581 613 write_exp_elt_opcode (OP_THIS);
0df8b418 614 /* We need type of this. */
7518bff5 615 this_val = value_of_this (parse_language, 0);
fd0e9d45 616 if (this_val)
04624583 617 this_type = value_type (this_val);
fd0e9d45
PM
618 else
619 this_type = NULL;
620 if (this_type)
621 {
622 if (TYPE_CODE (this_type) == TYPE_CODE_PTR)
623 {
624 this_type = TYPE_TARGET_TYPE (this_type);
625 write_exp_elt_opcode (UNOP_IND);
626 }
627 }
6ced1581 628
fd0e9d45
PM
629 current_type = this_type;
630 }
373a8247
PM
631 ;
632
633/* end of object pascal. */
634
635block : BLOCKNAME
636 {
637 if ($1.sym != 0)
638 $$ = SYMBOL_BLOCK_VALUE ($1.sym);
639 else
640 {
641 struct symtab *tem =
642 lookup_symtab (copy_name ($1.stoken));
643 if (tem)
0df8b418
MS
644 $$ = BLOCKVECTOR_BLOCK (BLOCKVECTOR (tem),
645 STATIC_BLOCK);
373a8247 646 else
001083c6 647 error (_("No file or function \"%s\"."),
373a8247
PM
648 copy_name ($1.stoken));
649 }
650 }
651 ;
652
653block : block COLONCOLON name
654 { struct symbol *tem
655 = lookup_symbol (copy_name ($3), $1,
2570f2b7 656 VAR_DOMAIN, (int *) NULL);
373a8247 657 if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
001083c6 658 error (_("No function \"%s\" in specified context."),
373a8247
PM
659 copy_name ($3));
660 $$ = SYMBOL_BLOCK_VALUE (tem); }
661 ;
662
663variable: block COLONCOLON name
664 { struct symbol *sym;
665 sym = lookup_symbol (copy_name ($3), $1,
2570f2b7 666 VAR_DOMAIN, (int *) NULL);
373a8247 667 if (sym == 0)
001083c6 668 error (_("No symbol \"%s\" in specified context."),
373a8247
PM
669 copy_name ($3));
670
671 write_exp_elt_opcode (OP_VAR_VALUE);
672 /* block_found is set by lookup_symbol. */
673 write_exp_elt_block (block_found);
674 write_exp_elt_sym (sym);
675 write_exp_elt_opcode (OP_VAR_VALUE); }
676 ;
677
678qualified_name: typebase COLONCOLON name
679 {
680 struct type *type = $1;
681 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
682 && TYPE_CODE (type) != TYPE_CODE_UNION)
001083c6 683 error (_("`%s' is not defined as an aggregate type."),
373a8247
PM
684 TYPE_NAME (type));
685
686 write_exp_elt_opcode (OP_SCOPE);
687 write_exp_elt_type (type);
688 write_exp_string ($3);
689 write_exp_elt_opcode (OP_SCOPE);
690 }
691 ;
692
693variable: qualified_name
694 | COLONCOLON name
695 {
696 char *name = copy_name ($2);
697 struct symbol *sym;
698 struct minimal_symbol *msymbol;
699
700 sym =
701 lookup_symbol (name, (const struct block *) NULL,
2570f2b7 702 VAR_DOMAIN, (int *) NULL);
373a8247
PM
703 if (sym)
704 {
705 write_exp_elt_opcode (OP_VAR_VALUE);
706 write_exp_elt_block (NULL);
707 write_exp_elt_sym (sym);
708 write_exp_elt_opcode (OP_VAR_VALUE);
709 break;
710 }
711
712 msymbol = lookup_minimal_symbol (name, NULL, NULL);
713 if (msymbol != NULL)
c841afd5 714 write_exp_msymbol (msymbol);
0df8b418
MS
715 else if (!have_full_symbols ()
716 && !have_partial_symbols ())
001083c6
PM
717 error (_("No symbol table is loaded. "
718 "Use the \"file\" command."));
373a8247 719 else
001083c6 720 error (_("No symbol \"%s\" in current context."),
0df8b418 721 name);
373a8247
PM
722 }
723 ;
724
725variable: name_not_typename
726 { struct symbol *sym = $1.sym;
727
728 if (sym)
729 {
730 if (symbol_read_needs_frame (sym))
731 {
0b058123
PM
732 if (innermost_block == 0
733 || contained_in (block_found,
734 innermost_block))
373a8247
PM
735 innermost_block = block_found;
736 }
737
738 write_exp_elt_opcode (OP_VAR_VALUE);
739 /* We want to use the selected frame, not
740 another more inner frame which happens to
741 be in the same block. */
742 write_exp_elt_block (NULL);
743 write_exp_elt_sym (sym);
744 write_exp_elt_opcode (OP_VAR_VALUE);
9819c6c8 745 current_type = sym->type; }
373a8247
PM
746 else if ($1.is_a_field_of_this)
747 {
9819c6c8
PM
748 struct value * this_val;
749 struct type * this_type;
373a8247
PM
750 /* Object pascal: it hangs off of `this'. Must
751 not inadvertently convert from a method call
752 to data ref. */
0b058123
PM
753 if (innermost_block == 0
754 || contained_in (block_found,
755 innermost_block))
373a8247
PM
756 innermost_block = block_found;
757 write_exp_elt_opcode (OP_THIS);
758 write_exp_elt_opcode (OP_THIS);
759 write_exp_elt_opcode (STRUCTOP_PTR);
760 write_exp_string ($1.stoken);
761 write_exp_elt_opcode (STRUCTOP_PTR);
0df8b418 762 /* We need type of this. */
7518bff5 763 this_val = value_of_this (parse_language, 0);
9819c6c8 764 if (this_val)
04624583 765 this_type = value_type (this_val);
9819c6c8
PM
766 else
767 this_type = NULL;
768 if (this_type)
769 current_type = lookup_struct_elt_type (
770 this_type,
020cc13c 771 copy_name ($1.stoken), 0);
9819c6c8 772 else
6ced1581 773 current_type = NULL;
373a8247
PM
774 }
775 else
776 {
777 struct minimal_symbol *msymbol;
710122da 778 char *arg = copy_name ($1.stoken);
373a8247
PM
779
780 msymbol =
781 lookup_minimal_symbol (arg, NULL, NULL);
782 if (msymbol != NULL)
c841afd5 783 write_exp_msymbol (msymbol);
0df8b418
MS
784 else if (!have_full_symbols ()
785 && !have_partial_symbols ())
001083c6
PM
786 error (_("No symbol table is loaded. "
787 "Use the \"file\" command."));
373a8247 788 else
001083c6 789 error (_("No symbol \"%s\" in current context."),
373a8247
PM
790 copy_name ($1.stoken));
791 }
792 }
793 ;
794
795
796ptype : typebase
797 ;
798
799/* We used to try to recognize more pointer to member types here, but
800 that didn't work (shift/reduce conflicts meant that these rules never
801 got executed). The problem is that
802 int (foo::bar::baz::bizzle)
803 is a function type but
804 int (foo::bar::baz::bizzle::*)
805 is a pointer to member type. Stroustrup loses again! */
806
807type : ptype
373a8247
PM
808 ;
809
810typebase /* Implements (approximately): (type-qualifier)* type-specifier */
fd0e9d45
PM
811 : '^' typebase
812 { $$ = lookup_pointer_type ($2); }
813 | TYPENAME
373a8247
PM
814 { $$ = $1.type; }
815 | STRUCT name
816 { $$ = lookup_struct (copy_name ($2),
817 expression_context_block); }
818 | CLASS name
819 { $$ = lookup_struct (copy_name ($2),
820 expression_context_block); }
821 /* "const" and "volatile" are curently ignored. A type qualifier
822 after the type is handled in the ptype rule. I think these could
823 be too. */
824 ;
825
826name : NAME { $$ = $1.stoken; }
827 | BLOCKNAME { $$ = $1.stoken; }
828 | TYPENAME { $$ = $1.stoken; }
829 | NAME_OR_INT { $$ = $1.stoken; }
830 ;
831
832name_not_typename : NAME
833 | BLOCKNAME
834/* These would be useful if name_not_typename was useful, but it is just
835 a fake for "variable", so these cause reduce/reduce conflicts because
836 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
837 =exp) or just an exp. If name_not_typename was ever used in an lvalue
838 context where only a name could occur, this might be useful.
839 | NAME_OR_INT
840 */
841 ;
842
843%%
844
845/* Take care of parsing a number (anything that starts with a digit).
846 Set yylval and return the token type; update lexptr.
847 LEN is the number of characters in it. */
848
849/*** Needs some error checking for the float case ***/
850
851static int
d30f5e1f 852parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
373a8247
PM
853{
854 /* FIXME: Shouldn't these be unsigned? We don't deal with negative values
855 here, and we do kind of silly things like cast to unsigned. */
710122da
DC
856 LONGEST n = 0;
857 LONGEST prevn = 0;
373a8247
PM
858 ULONGEST un;
859
710122da
DC
860 int i = 0;
861 int c;
862 int base = input_radix;
373a8247
PM
863 int unsigned_p = 0;
864
865 /* Number of "L" suffixes encountered. */
866 int long_p = 0;
867
868 /* We have found a "L" or "U" suffix. */
869 int found_suffix = 0;
870
871 ULONGEST high_bit;
872 struct type *signed_type;
873 struct type *unsigned_type;
874
875 if (parsed_float)
876 {
d30f5e1f
DE
877 if (! parse_c_float (parse_gdbarch, p, len,
878 &putithere->typed_val_float.dval,
879 &putithere->typed_val_float.type))
373a8247 880 return ERROR;
373a8247
PM
881 return FLOAT;
882 }
883
0df8b418 884 /* Handle base-switching prefixes 0x, 0t, 0d, 0. */
373a8247
PM
885 if (p[0] == '0')
886 switch (p[1])
887 {
888 case 'x':
889 case 'X':
890 if (len >= 3)
891 {
892 p += 2;
893 base = 16;
894 len -= 2;
895 }
896 break;
897
898 case 't':
899 case 'T':
900 case 'd':
901 case 'D':
902 if (len >= 3)
903 {
904 p += 2;
905 base = 10;
906 len -= 2;
907 }
908 break;
909
910 default:
911 base = 8;
912 break;
913 }
914
915 while (len-- > 0)
916 {
917 c = *p++;
918 if (c >= 'A' && c <= 'Z')
919 c += 'a' - 'A';
920 if (c != 'l' && c != 'u')
921 n *= base;
922 if (c >= '0' && c <= '9')
923 {
924 if (found_suffix)
925 return ERROR;
926 n += i = c - '0';
927 }
928 else
929 {
930 if (base > 10 && c >= 'a' && c <= 'f')
931 {
932 if (found_suffix)
933 return ERROR;
934 n += i = c - 'a' + 10;
935 }
936 else if (c == 'l')
937 {
938 ++long_p;
939 found_suffix = 1;
940 }
941 else if (c == 'u')
942 {
943 unsigned_p = 1;
944 found_suffix = 1;
945 }
946 else
947 return ERROR; /* Char not a digit */
948 }
949 if (i >= base)
0df8b418 950 return ERROR; /* Invalid digit in this base. */
373a8247
PM
951
952 /* Portably test for overflow (only works for nonzero values, so make
953 a second check for zero). FIXME: Can't we just make n and prevn
954 unsigned and avoid this? */
955 if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
0df8b418 956 unsigned_p = 1; /* Try something unsigned. */
373a8247
PM
957
958 /* Portably test for unsigned overflow.
959 FIXME: This check is wrong; for example it doesn't find overflow
960 on 0x123456789 when LONGEST is 32 bits. */
961 if (c != 'l' && c != 'u' && n != 0)
6ced1581 962 {
373a8247 963 if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
001083c6 964 error (_("Numeric constant too large."));
373a8247
PM
965 }
966 prevn = n;
967 }
968
969 /* An integer constant is an int, a long, or a long long. An L
970 suffix forces it to be long; an LL suffix forces it to be long
971 long. If not forced to a larger size, it gets the first type of
972 the above that it fits in. To figure out whether it fits, we
973 shift it right and see whether anything remains. Note that we
974 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
975 operation, because many compilers will warn about such a shift
9a76efb6
UW
976 (which always produces a zero result). Sometimes gdbarch_int_bit
977 or gdbarch_long_bit will be that big, sometimes not. To deal with
373a8247
PM
978 the case where it is we just always shift the value more than
979 once, with fewer bits each time. */
980
981 un = (ULONGEST)n >> 2;
982 if (long_p == 0
3e79cecf 983 && (un >> (gdbarch_int_bit (parse_gdbarch) - 2)) == 0)
373a8247 984 {
3e79cecf 985 high_bit = ((ULONGEST)1) << (gdbarch_int_bit (parse_gdbarch) - 1);
373a8247
PM
986
987 /* A large decimal (not hex or octal) constant (between INT_MAX
988 and UINT_MAX) is a long or unsigned long, according to ANSI,
989 never an unsigned int, but this code treats it as unsigned
990 int. This probably should be fixed. GCC gives a warning on
991 such constants. */
992
3e79cecf
UW
993 unsigned_type = parse_type->builtin_unsigned_int;
994 signed_type = parse_type->builtin_int;
373a8247
PM
995 }
996 else if (long_p <= 1
3e79cecf 997 && (un >> (gdbarch_long_bit (parse_gdbarch) - 2)) == 0)
373a8247 998 {
3e79cecf
UW
999 high_bit = ((ULONGEST)1) << (gdbarch_long_bit (parse_gdbarch) - 1);
1000 unsigned_type = parse_type->builtin_unsigned_long;
1001 signed_type = parse_type->builtin_long;
373a8247
PM
1002 }
1003 else
1004 {
7451d027 1005 int shift;
9a76efb6 1006 if (sizeof (ULONGEST) * HOST_CHAR_BIT
3e79cecf 1007 < gdbarch_long_long_bit (parse_gdbarch))
373a8247 1008 /* A long long does not fit in a LONGEST. */
7451d027
AC
1009 shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
1010 else
3e79cecf 1011 shift = (gdbarch_long_long_bit (parse_gdbarch) - 1);
7451d027 1012 high_bit = (ULONGEST) 1 << shift;
3e79cecf
UW
1013 unsigned_type = parse_type->builtin_unsigned_long_long;
1014 signed_type = parse_type->builtin_long_long;
373a8247
PM
1015 }
1016
1017 putithere->typed_val_int.val = n;
1018
1019 /* If the high bit of the worked out type is set then this number
0df8b418 1020 has to be unsigned. */
373a8247
PM
1021
1022 if (unsigned_p || (n & high_bit))
1023 {
1024 putithere->typed_val_int.type = unsigned_type;
1025 }
1026 else
1027 {
1028 putithere->typed_val_int.type = signed_type;
1029 }
1030
1031 return INT;
1032}
1033
9819c6c8
PM
1034
1035struct type_push
1036{
1037 struct type *stored;
1038 struct type_push *next;
1039};
1040
1041static struct type_push *tp_top = NULL;
1042
b9362cc7
AC
1043static void
1044push_current_type (void)
9819c6c8
PM
1045{
1046 struct type_push *tpnew;
1047 tpnew = (struct type_push *) malloc (sizeof (struct type_push));
1048 tpnew->next = tp_top;
1049 tpnew->stored = current_type;
1050 current_type = NULL;
6ced1581 1051 tp_top = tpnew;
9819c6c8
PM
1052}
1053
b9362cc7
AC
1054static void
1055pop_current_type (void)
9819c6c8
PM
1056{
1057 struct type_push *tp = tp_top;
1058 if (tp)
1059 {
1060 current_type = tp->stored;
1061 tp_top = tp->next;
bbe2ba60 1062 free (tp);
9819c6c8
PM
1063 }
1064}
1065
373a8247
PM
1066struct token
1067{
1068 char *operator;
1069 int token;
1070 enum exp_opcode opcode;
1071};
1072
1073static const struct token tokentab3[] =
1074 {
1075 {"shr", RSH, BINOP_END},
1076 {"shl", LSH, BINOP_END},
1077 {"and", ANDAND, BINOP_END},
1078 {"div", DIV, BINOP_END},
1079 {"not", NOT, BINOP_END},
1080 {"mod", MOD, BINOP_END},
1081 {"inc", INCREMENT, BINOP_END},
1082 {"dec", DECREMENT, BINOP_END},
1083 {"xor", XOR, BINOP_END}
1084 };
1085
1086static const struct token tokentab2[] =
1087 {
1088 {"or", OR, BINOP_END},
1089 {"<>", NOTEQUAL, BINOP_END},
1090 {"<=", LEQ, BINOP_END},
1091 {">=", GEQ, BINOP_END},
9819c6c8
PM
1092 {":=", ASSIGN, BINOP_END},
1093 {"::", COLONCOLON, BINOP_END} };
373a8247 1094
0df8b418
MS
1095/* Allocate uppercased var: */
1096/* make an uppercased copy of tokstart. */
373a8247
PM
1097static char * uptok (tokstart, namelen)
1098 char *tokstart;
1099 int namelen;
1100{
1101 int i;
1102 char *uptokstart = (char *)malloc(namelen+1);
1103 for (i = 0;i <= namelen;i++)
1104 {
1105 if ((tokstart[i]>='a' && tokstart[i]<='z'))
1106 uptokstart[i] = tokstart[i]-('a'-'A');
1107 else
1108 uptokstart[i] = tokstart[i];
1109 }
1110 uptokstart[namelen]='\0';
1111 return uptokstart;
1112}
373a8247 1113
a5a44b53
PM
1114/* This is set if the previously-returned token was a structure
1115 operator '.'. This is used only when parsing to
1116 do field name completion. */
1117static int last_was_structop;
1118
1119/* Read one token, getting characters through lexptr. */
373a8247
PM
1120
1121static int
eeae04df 1122yylex (void)
373a8247
PM
1123{
1124 int c;
1125 int namelen;
1126 unsigned int i;
1127 char *tokstart;
1128 char *uptokstart;
1129 char *tokptr;
d3d6d173 1130 int explen, tempbufindex;
373a8247
PM
1131 static char *tempbuf;
1132 static int tempbufsize;
a5a44b53 1133 int saw_structop = last_was_structop;
6ced1581 1134
a5a44b53 1135 last_was_structop = 0;
373a8247
PM
1136 retry:
1137
24467a86
PM
1138 prev_lexptr = lexptr;
1139
373a8247 1140 tokstart = lexptr;
d3d6d173 1141 explen = strlen (lexptr);
373a8247 1142 /* See if it is a special token of length 3. */
d3d6d173
PM
1143 if (explen > 2)
1144 for (i = 0; i < sizeof (tokentab3) / sizeof (tokentab3[0]); i++)
9c21ccdc 1145 if (strncasecmp (tokstart, tokentab3[i].operator, 3) == 0
d3d6d173 1146 && (!isalpha (tokentab3[i].operator[0]) || explen == 3
0df8b418
MS
1147 || (!isalpha (tokstart[3])
1148 && !isdigit (tokstart[3]) && tokstart[3] != '_')))
d3d6d173
PM
1149 {
1150 lexptr += 3;
1151 yylval.opcode = tokentab3[i].opcode;
1152 return tokentab3[i].token;
1153 }
373a8247
PM
1154
1155 /* See if it is a special token of length 2. */
d3d6d173
PM
1156 if (explen > 1)
1157 for (i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++)
9c21ccdc 1158 if (strncasecmp (tokstart, tokentab2[i].operator, 2) == 0
d3d6d173 1159 && (!isalpha (tokentab2[i].operator[0]) || explen == 2
0df8b418
MS
1160 || (!isalpha (tokstart[2])
1161 && !isdigit (tokstart[2]) && tokstart[2] != '_')))
d3d6d173
PM
1162 {
1163 lexptr += 2;
1164 yylval.opcode = tokentab2[i].opcode;
1165 return tokentab2[i].token;
1166 }
373a8247
PM
1167
1168 switch (c = *tokstart)
1169 {
1170 case 0:
a5a44b53
PM
1171 if (saw_structop && search_field)
1172 return COMPLETE;
1173 else
1174 return 0;
373a8247
PM
1175
1176 case ' ':
1177 case '\t':
1178 case '\n':
1179 lexptr++;
1180 goto retry;
1181
1182 case '\'':
1183 /* We either have a character constant ('0' or '\177' for example)
1184 or we have a quoted symbol reference ('foo(int,int)' in object pascal
0df8b418 1185 for example). */
373a8247
PM
1186 lexptr++;
1187 c = *lexptr++;
1188 if (c == '\\')
f870a310 1189 c = parse_escape (parse_gdbarch, &lexptr);
373a8247 1190 else if (c == '\'')
001083c6 1191 error (_("Empty character constant."));
373a8247
PM
1192
1193 yylval.typed_val_int.val = c;
3e79cecf 1194 yylval.typed_val_int.type = parse_type->builtin_char;
373a8247
PM
1195
1196 c = *lexptr++;
1197 if (c != '\'')
1198 {
1199 namelen = skip_quoted (tokstart) - tokstart;
1200 if (namelen > 2)
1201 {
1202 lexptr = tokstart + namelen;
1203 if (lexptr[-1] != '\'')
001083c6 1204 error (_("Unmatched single quote."));
373a8247
PM
1205 namelen -= 2;
1206 tokstart++;
1207 uptokstart = uptok(tokstart,namelen);
1208 goto tryname;
1209 }
001083c6 1210 error (_("Invalid character constant."));
373a8247
PM
1211 }
1212 return INT;
1213
1214 case '(':
1215 paren_depth++;
1216 lexptr++;
1217 return c;
1218
1219 case ')':
1220 if (paren_depth == 0)
1221 return 0;
1222 paren_depth--;
1223 lexptr++;
1224 return c;
1225
1226 case ',':
1227 if (comma_terminates && paren_depth == 0)
1228 return 0;
1229 lexptr++;
1230 return c;
1231
1232 case '.':
1233 /* Might be a floating point number. */
1234 if (lexptr[1] < '0' || lexptr[1] > '9')
a5a44b53
PM
1235 {
1236 if (in_parse_field)
1237 last_was_structop = 1;
1238 goto symbol; /* Nope, must be a symbol. */
1239 }
1240
373a8247
PM
1241 /* FALL THRU into number case. */
1242
1243 case '0':
1244 case '1':
1245 case '2':
1246 case '3':
1247 case '4':
1248 case '5':
1249 case '6':
1250 case '7':
1251 case '8':
1252 case '9':
1253 {
1254 /* It's a number. */
1255 int got_dot = 0, got_e = 0, toktype;
710122da 1256 char *p = tokstart;
373a8247
PM
1257 int hex = input_radix > 10;
1258
1259 if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
1260 {
1261 p += 2;
1262 hex = 1;
1263 }
0df8b418
MS
1264 else if (c == '0' && (p[1]=='t' || p[1]=='T'
1265 || p[1]=='d' || p[1]=='D'))
373a8247
PM
1266 {
1267 p += 2;
1268 hex = 0;
1269 }
1270
1271 for (;; ++p)
1272 {
1273 /* This test includes !hex because 'e' is a valid hex digit
1274 and thus does not indicate a floating point number when
1275 the radix is hex. */
1276 if (!hex && !got_e && (*p == 'e' || *p == 'E'))
1277 got_dot = got_e = 1;
1278 /* This test does not include !hex, because a '.' always indicates
1279 a decimal floating point number regardless of the radix. */
1280 else if (!got_dot && *p == '.')
1281 got_dot = 1;
1282 else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
1283 && (*p == '-' || *p == '+'))
1284 /* This is the sign of the exponent, not the end of the
1285 number. */
1286 continue;
1287 /* We will take any letters or digits. parse_number will
1288 complain if past the radix, or if L or U are not final. */
1289 else if ((*p < '0' || *p > '9')
1290 && ((*p < 'a' || *p > 'z')
1291 && (*p < 'A' || *p > 'Z')))
1292 break;
1293 }
0df8b418
MS
1294 toktype = parse_number (tokstart,
1295 p - tokstart, got_dot | got_e, &yylval);
373a8247
PM
1296 if (toktype == ERROR)
1297 {
1298 char *err_copy = (char *) alloca (p - tokstart + 1);
1299
1300 memcpy (err_copy, tokstart, p - tokstart);
1301 err_copy[p - tokstart] = 0;
001083c6 1302 error (_("Invalid number \"%s\"."), err_copy);
373a8247
PM
1303 }
1304 lexptr = p;
1305 return toktype;
1306 }
1307
1308 case '+':
1309 case '-':
1310 case '*':
1311 case '/':
1312 case '|':
1313 case '&':
1314 case '^':
1315 case '~':
1316 case '!':
1317 case '@':
1318 case '<':
1319 case '>':
1320 case '[':
1321 case ']':
1322 case '?':
1323 case ':':
1324 case '=':
1325 case '{':
1326 case '}':
1327 symbol:
1328 lexptr++;
1329 return c;
1330
1331 case '"':
1332
1333 /* Build the gdb internal form of the input string in tempbuf,
1334 translating any standard C escape forms seen. Note that the
1335 buffer is null byte terminated *only* for the convenience of
1336 debugging gdb itself and printing the buffer contents when
1337 the buffer contains no embedded nulls. Gdb does not depend
1338 upon the buffer being null byte terminated, it uses the length
1339 string instead. This allows gdb to handle C strings (as well
0df8b418 1340 as strings in other languages) with embedded null bytes. */
373a8247
PM
1341
1342 tokptr = ++tokstart;
1343 tempbufindex = 0;
1344
1345 do {
1346 /* Grow the static temp buffer if necessary, including allocating
0df8b418 1347 the first one on demand. */
373a8247
PM
1348 if (tempbufindex + 1 >= tempbufsize)
1349 {
1350 tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
1351 }
9819c6c8 1352
373a8247
PM
1353 switch (*tokptr)
1354 {
1355 case '\0':
1356 case '"':
0df8b418 1357 /* Do nothing, loop will terminate. */
373a8247
PM
1358 break;
1359 case '\\':
1360 tokptr++;
f870a310 1361 c = parse_escape (parse_gdbarch, &tokptr);
373a8247
PM
1362 if (c == -1)
1363 {
1364 continue;
1365 }
1366 tempbuf[tempbufindex++] = c;
1367 break;
1368 default:
1369 tempbuf[tempbufindex++] = *tokptr++;
1370 break;
1371 }
1372 } while ((*tokptr != '"') && (*tokptr != '\0'));
1373 if (*tokptr++ != '"')
1374 {
001083c6 1375 error (_("Unterminated string in expression."));
373a8247 1376 }
0df8b418 1377 tempbuf[tempbufindex] = '\0'; /* See note above. */
373a8247
PM
1378 yylval.sval.ptr = tempbuf;
1379 yylval.sval.length = tempbufindex;
1380 lexptr = tokptr;
1381 return (STRING);
1382 }
1383
1384 if (!(c == '_' || c == '$'
1385 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
1386 /* We must have come across a bad character (e.g. ';'). */
001083c6 1387 error (_("Invalid character '%c' in expression."), c);
373a8247
PM
1388
1389 /* It's a name. See how long it is. */
1390 namelen = 0;
1391 for (c = tokstart[namelen];
1392 (c == '_' || c == '$' || (c >= '0' && c <= '9')
1393 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
1394 {
1395 /* Template parameter lists are part of the name.
1396 FIXME: This mishandles `print $a<4&&$a>3'. */
1397 if (c == '<')
1398 {
1399 int i = namelen;
1400 int nesting_level = 1;
1401 while (tokstart[++i])
1402 {
1403 if (tokstart[i] == '<')
1404 nesting_level++;
1405 else if (tokstart[i] == '>')
1406 {
1407 if (--nesting_level == 0)
1408 break;
1409 }
1410 }
1411 if (tokstart[i] == '>')
1412 namelen = i;
1413 else
1414 break;
1415 }
1416
0df8b418 1417 /* do NOT uppercase internals because of registers !!! */
373a8247
PM
1418 c = tokstart[++namelen];
1419 }
1420
1421 uptokstart = uptok(tokstart,namelen);
1422
1423 /* The token "if" terminates the expression and is NOT
1424 removed from the input stream. */
1425 if (namelen == 2 && uptokstart[0] == 'I' && uptokstart[1] == 'F')
1426 {
7877e977 1427 free (uptokstart);
373a8247
PM
1428 return 0;
1429 }
1430
1431 lexptr += namelen;
1432
1433 tryname:
1434
1435 /* Catch specific keywords. Should be done with a data structure. */
1436 switch (namelen)
1437 {
1438 case 6:
0b058123 1439 if (strcmp (uptokstart, "OBJECT") == 0)
7877e977
MS
1440 {
1441 free (uptokstart);
1442 return CLASS;
1443 }
0b058123 1444 if (strcmp (uptokstart, "RECORD") == 0)
7877e977
MS
1445 {
1446 free (uptokstart);
1447 return STRUCT;
1448 }
0b058123 1449 if (strcmp (uptokstart, "SIZEOF") == 0)
7877e977
MS
1450 {
1451 free (uptokstart);
1452 return SIZEOF;
1453 }
373a8247
PM
1454 break;
1455 case 5:
0b058123 1456 if (strcmp (uptokstart, "CLASS") == 0)
7877e977
MS
1457 {
1458 free (uptokstart);
1459 return CLASS;
1460 }
0b058123 1461 if (strcmp (uptokstart, "FALSE") == 0)
373a8247
PM
1462 {
1463 yylval.lval = 0;
7877e977 1464 free (uptokstart);
2692ddb3 1465 return FALSEKEYWORD;
373a8247
PM
1466 }
1467 break;
1468 case 4:
0b058123 1469 if (strcmp (uptokstart, "TRUE") == 0)
373a8247
PM
1470 {
1471 yylval.lval = 1;
7877e977 1472 free (uptokstart);
2692ddb3 1473 return TRUEKEYWORD;
373a8247 1474 }
0b058123 1475 if (strcmp (uptokstart, "SELF") == 0)
373a8247 1476 {
0df8b418
MS
1477 /* Here we search for 'this' like
1478 inserted in FPC stabs debug info. */
8343f86c 1479 static const char this_name[] = "this";
373a8247
PM
1480
1481 if (lookup_symbol (this_name, expression_context_block,
2570f2b7 1482 VAR_DOMAIN, (int *) NULL))
7877e977
MS
1483 {
1484 free (uptokstart);
1485 return THIS;
1486 }
373a8247
PM
1487 }
1488 break;
1489 default:
1490 break;
1491 }
1492
1493 yylval.sval.ptr = tokstart;
1494 yylval.sval.length = namelen;
1495
1496 if (*tokstart == '$')
1497 {
a5a44b53 1498 char c;
373a8247
PM
1499 /* $ is the normal prefix for pascal hexadecimal values
1500 but this conflicts with the GDB use for debugger variables
1501 so in expression to enter hexadecimal values
1502 we still need to use C syntax with 0xff */
1503 write_dollar_variable (yylval.sval);
a5a44b53
PM
1504 c = tokstart[namelen];
1505 tokstart[namelen] = 0;
1506 intvar = lookup_only_internalvar (++tokstart);
1507 --tokstart;
1508 tokstart[namelen] = c;
7877e977 1509 free (uptokstart);
373a8247
PM
1510 return VARIABLE;
1511 }
1512
1513 /* Use token-type BLOCKNAME for symbols that happen to be defined as
1514 functions or symtabs. If this is not so, then ...
1515 Use token-type TYPENAME for symbols that happen to be defined
1516 currently as names of types; NAME for other symbols.
1517 The caller is not constrained to care about the distinction. */
1518 {
1519 char *tmp = copy_name (yylval.sval);
1520 struct symbol *sym;
1521 int is_a_field_of_this = 0;
9819c6c8 1522 int is_a_field = 0;
373a8247
PM
1523 int hextype;
1524
9819c6c8
PM
1525
1526 if (search_field && current_type)
0df8b418 1527 is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL);
a5a44b53 1528 if (is_a_field || in_parse_field)
9819c6c8
PM
1529 sym = NULL;
1530 else
1531 sym = lookup_symbol (tmp, expression_context_block,
2570f2b7 1532 VAR_DOMAIN, &is_a_field_of_this);
94a716bf 1533 /* second chance uppercased (as Free Pascal does). */
9819c6c8 1534 if (!sym && !is_a_field_of_this && !is_a_field)
373a8247 1535 {
94a716bf 1536 for (i = 0; i <= namelen; i++)
373a8247 1537 {
94a716bf 1538 if ((tmp[i] >= 'a' && tmp[i] <= 'z'))
373a8247 1539 tmp[i] -= ('a'-'A');
373a8247 1540 }
9819c6c8 1541 if (search_field && current_type)
0df8b418 1542 is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL);
a5a44b53 1543 if (is_a_field || in_parse_field)
9819c6c8
PM
1544 sym = NULL;
1545 else
1546 sym = lookup_symbol (tmp, expression_context_block,
2570f2b7 1547 VAR_DOMAIN, &is_a_field_of_this);
9819c6c8 1548 if (sym || is_a_field_of_this || is_a_field)
94a716bf
PM
1549 for (i = 0; i <= namelen; i++)
1550 {
1551 if ((tokstart[i] >= 'a' && tokstart[i] <= 'z'))
1552 tokstart[i] -= ('a'-'A');
1553 }
1554 }
1555 /* Third chance Capitalized (as GPC does). */
9819c6c8 1556 if (!sym && !is_a_field_of_this && !is_a_field)
94a716bf
PM
1557 {
1558 for (i = 0; i <= namelen; i++)
1559 {
1560 if (i == 0)
1561 {
1562 if ((tmp[i] >= 'a' && tmp[i] <= 'z'))
1563 tmp[i] -= ('a'-'A');
1564 }
1565 else
1566 if ((tmp[i] >= 'A' && tmp[i] <= 'Z'))
1567 tmp[i] -= ('A'-'a');
1568 }
9819c6c8 1569 if (search_field && current_type)
0df8b418 1570 is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL);
a5a44b53 1571 if (is_a_field || in_parse_field)
9819c6c8
PM
1572 sym = NULL;
1573 else
1574 sym = lookup_symbol (tmp, expression_context_block,
2570f2b7 1575 VAR_DOMAIN, &is_a_field_of_this);
9819c6c8 1576 if (sym || is_a_field_of_this || is_a_field)
94a716bf
PM
1577 for (i = 0; i <= namelen; i++)
1578 {
1579 if (i == 0)
1580 {
1581 if ((tokstart[i] >= 'a' && tokstart[i] <= 'z'))
1582 tokstart[i] -= ('a'-'A');
1583 }
1584 else
1585 if ((tokstart[i] >= 'A' && tokstart[i] <= 'Z'))
1586 tokstart[i] -= ('A'-'a');
1587 }
373a8247 1588 }
9819c6c8
PM
1589
1590 if (is_a_field)
1591 {
1592 tempbuf = (char *) realloc (tempbuf, namelen + 1);
1593 strncpy (tempbuf, tokstart, namelen); tempbuf [namelen] = 0;
1594 yylval.sval.ptr = tempbuf;
6ced1581 1595 yylval.sval.length = namelen;
7877e977 1596 free (uptokstart);
9819c6c8 1597 return FIELDNAME;
6ced1581 1598 }
373a8247
PM
1599 /* Call lookup_symtab, not lookup_partial_symtab, in case there are
1600 no psymtabs (coff, xcoff, or some future change to blow away the
1601 psymtabs once once symbols are read). */
0b058123
PM
1602 if ((sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
1603 || lookup_symtab (tmp))
373a8247
PM
1604 {
1605 yylval.ssym.sym = sym;
1606 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
7877e977 1607 free (uptokstart);
373a8247
PM
1608 return BLOCKNAME;
1609 }
1610 if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
1611 {
1612#if 1
1613 /* Despite the following flaw, we need to keep this code enabled.
1614 Because we can get called from check_stub_method, if we don't
1615 handle nested types then it screws many operations in any
1616 program which uses nested types. */
1617 /* In "A::x", if x is a member function of A and there happens
1618 to be a type (nested or not, since the stabs don't make that
1619 distinction) named x, then this code incorrectly thinks we
1620 are dealing with nested types rather than a member function. */
1621
1622 char *p;
1623 char *namestart;
1624 struct symbol *best_sym;
1625
1626 /* Look ahead to detect nested types. This probably should be
1627 done in the grammar, but trying seemed to introduce a lot
1628 of shift/reduce and reduce/reduce conflicts. It's possible
1629 that it could be done, though. Or perhaps a non-grammar, but
1630 less ad hoc, approach would work well. */
1631
1632 /* Since we do not currently have any way of distinguishing
1633 a nested type from a non-nested one (the stabs don't tell
1634 us whether a type is nested), we just ignore the
1635 containing type. */
1636
1637 p = lexptr;
1638 best_sym = sym;
1639 while (1)
1640 {
1641 /* Skip whitespace. */
1642 while (*p == ' ' || *p == '\t' || *p == '\n')
1643 ++p;
1644 if (*p == ':' && p[1] == ':')
1645 {
1646 /* Skip the `::'. */
1647 p += 2;
1648 /* Skip whitespace. */
1649 while (*p == ' ' || *p == '\t' || *p == '\n')
1650 ++p;
1651 namestart = p;
1652 while (*p == '_' || *p == '$' || (*p >= '0' && *p <= '9')
1653 || (*p >= 'a' && *p <= 'z')
1654 || (*p >= 'A' && *p <= 'Z'))
1655 ++p;
1656 if (p != namestart)
1657 {
1658 struct symbol *cur_sym;
1659 /* As big as the whole rest of the expression, which is
1660 at least big enough. */
1661 char *ncopy = alloca (strlen (tmp)+strlen (namestart)+3);
1662 char *tmp1;
1663
1664 tmp1 = ncopy;
1665 memcpy (tmp1, tmp, strlen (tmp));
1666 tmp1 += strlen (tmp);
1667 memcpy (tmp1, "::", 2);
1668 tmp1 += 2;
1669 memcpy (tmp1, namestart, p - namestart);
1670 tmp1[p - namestart] = '\0';
1671 cur_sym = lookup_symbol (ncopy, expression_context_block,
2570f2b7 1672 VAR_DOMAIN, (int *) NULL);
373a8247
PM
1673 if (cur_sym)
1674 {
1675 if (SYMBOL_CLASS (cur_sym) == LOC_TYPEDEF)
1676 {
1677 best_sym = cur_sym;
1678 lexptr = p;
1679 }
1680 else
1681 break;
1682 }
1683 else
1684 break;
1685 }
1686 else
1687 break;
1688 }
1689 else
1690 break;
1691 }
1692
1693 yylval.tsym.type = SYMBOL_TYPE (best_sym);
1694#else /* not 0 */
1695 yylval.tsym.type = SYMBOL_TYPE (sym);
1696#endif /* not 0 */
7877e977 1697 free (uptokstart);
373a8247
PM
1698 return TYPENAME;
1699 }
54a5b07d 1700 yylval.tsym.type
3e79cecf
UW
1701 = language_lookup_primitive_type_by_name (parse_language,
1702 parse_gdbarch, tmp);
54a5b07d 1703 if (yylval.tsym.type != NULL)
7877e977
MS
1704 {
1705 free (uptokstart);
1706 return TYPENAME;
1707 }
373a8247
PM
1708
1709 /* Input names that aren't symbols but ARE valid hex numbers,
1710 when the input radix permits them, can be names or numbers
1711 depending on the parse. Note we support radixes > 16 here. */
0b058123
PM
1712 if (!sym
1713 && ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10)
1714 || (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
373a8247
PM
1715 {
1716 YYSTYPE newlval; /* Its value is ignored. */
1717 hextype = parse_number (tokstart, namelen, 0, &newlval);
1718 if (hextype == INT)
1719 {
1720 yylval.ssym.sym = sym;
1721 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
7877e977 1722 free (uptokstart);
373a8247
PM
1723 return NAME_OR_INT;
1724 }
1725 }
1726
1727 free(uptokstart);
0df8b418 1728 /* Any other kind of symbol. */
373a8247
PM
1729 yylval.ssym.sym = sym;
1730 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1731 return NAME;
1732 }
1733}
1734
1735void
1736yyerror (msg)
1737 char *msg;
1738{
24467a86
PM
1739 if (prev_lexptr)
1740 lexptr = prev_lexptr;
1741
001083c6 1742 error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr);
373a8247 1743}
This page took 1.296622 seconds and 4 git commands to generate.