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