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