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