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