DWARF: handle non-local references in nested functions
[deliverable/binutils-gdb.git] / gdb / go-exp.y
1 /* YACC parser for Go expressions, for GDB.
2
3 Copyright (C) 2012-2015 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 /* This file is derived from c-exp.y, p-exp.y. */
21
22 /* Parse a Go expression from text in a string,
23 and return the result as a struct expression pointer.
24 That structure contains arithmetic operations in reverse polish,
25 with constants represented by operations that are followed by special data.
26 See expression.h for the details of the format.
27 What is important here is that it can be built up sequentially
28 during the process of parsing; the lower levels of the tree always
29 come first in the result.
30
31 Note that malloc's and realloc's in this file are transformed to
32 xmalloc and xrealloc respectively by the same sed command in the
33 makefile that remaps any other malloc/realloc inserted by the parser
34 generator. Doing this with #defines and trying to control the interaction
35 with include files (<malloc.h> and <stdlib.h> for example) just became
36 too messy, particularly when such includes can be inserted at random
37 times by the parser generator. */
38
39 /* Known bugs or limitations:
40
41 - Unicode
42 - &^
43 - '_' (blank identifier)
44 - automatic deref of pointers
45 - method expressions
46 - interfaces, channels, etc.
47
48 And lots of other things.
49 I'm sure there's some cleanup to do.
50 */
51
52 %{
53
54 #include "defs.h"
55 #include <ctype.h>
56 #include "expression.h"
57 #include "value.h"
58 #include "parser-defs.h"
59 #include "language.h"
60 #include "c-lang.h"
61 #include "go-lang.h"
62 #include "bfd.h" /* Required by objfiles.h. */
63 #include "symfile.h" /* Required by objfiles.h. */
64 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
65 #include "charset.h"
66 #include "block.h"
67
68 #define parse_type(ps) builtin_type (parse_gdbarch (ps))
69
70 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
71 as well as gratuitiously global symbol names, so we can have multiple
72 yacc generated parsers in gdb. Note that these are only the variables
73 produced by yacc. If other parser generators (bison, byacc, etc) produce
74 additional global names that conflict at link time, then those parser
75 generators need to be fixed instead of adding those names to this list. */
76
77 #define yymaxdepth go_maxdepth
78 #define yyparse go_parse_internal
79 #define yylex go_lex
80 #define yyerror go_error
81 #define yylval go_lval
82 #define yychar go_char
83 #define yydebug go_debug
84 #define yypact go_pact
85 #define yyr1 go_r1
86 #define yyr2 go_r2
87 #define yydef go_def
88 #define yychk go_chk
89 #define yypgo go_pgo
90 #define yyact go_act
91 #define yyexca go_exca
92 #define yyerrflag go_errflag
93 #define yynerrs go_nerrs
94 #define yyps go_ps
95 #define yypv go_pv
96 #define yys go_s
97 #define yy_yys go_yys
98 #define yystate go_state
99 #define yytmp go_tmp
100 #define yyv go_v
101 #define yy_yyv go_yyv
102 #define yyval go_val
103 #define yylloc go_lloc
104 #define yyreds go_reds /* With YYDEBUG defined */
105 #define yytoks go_toks /* With YYDEBUG defined */
106 #define yyname go_name /* With YYDEBUG defined */
107 #define yyrule go_rule /* With YYDEBUG defined */
108 #define yylhs go_yylhs
109 #define yylen go_yylen
110 #define yydefred go_yydefred
111 #define yydgoto go_yydgoto
112 #define yysindex go_yysindex
113 #define yyrindex go_yyrindex
114 #define yygindex go_yygindex
115 #define yytable go_yytable
116 #define yycheck go_yycheck
117
118 #ifndef YYDEBUG
119 #define YYDEBUG 1 /* Default to yydebug support */
120 #endif
121
122 #define YYFPRINTF parser_fprintf
123
124 /* The state of the parser, used internally when we are parsing the
125 expression. */
126
127 static struct parser_state *pstate = NULL;
128
129 int yyparse (void);
130
131 static int yylex (void);
132
133 void yyerror (char *);
134
135 %}
136
137 /* Although the yacc "value" of an expression is not used,
138 since the result is stored in the structure being created,
139 other node types do have values. */
140
141 %union
142 {
143 LONGEST lval;
144 struct {
145 LONGEST val;
146 struct type *type;
147 } typed_val_int;
148 struct {
149 DOUBLEST dval;
150 struct type *type;
151 } typed_val_float;
152 struct stoken sval;
153 struct symtoken ssym;
154 struct type *tval;
155 struct typed_stoken tsval;
156 struct ttype tsym;
157 int voidval;
158 enum exp_opcode opcode;
159 struct internalvar *ivar;
160 struct stoken_vector svec;
161 }
162
163 %{
164 /* YYSTYPE gets defined by %union. */
165 static int parse_number (struct parser_state *,
166 const char *, int, int, YYSTYPE *);
167 static int parse_go_float (struct gdbarch *gdbarch, const char *p, int len,
168 DOUBLEST *d, struct type **t);
169 %}
170
171 %type <voidval> exp exp1 type_exp start variable lcurly
172 %type <lval> rcurly
173 %type <tval> type
174
175 %token <typed_val_int> INT
176 %token <typed_val_float> FLOAT
177
178 /* Both NAME and TYPENAME tokens represent symbols in the input,
179 and both convey their data as strings.
180 But a TYPENAME is a string that happens to be defined as a type
181 or builtin type name (such as int or char)
182 and a NAME is any other symbol.
183 Contexts where this distinction is not important can use the
184 nonterminal "name", which matches either NAME or TYPENAME. */
185
186 %token <tsval> RAW_STRING
187 %token <tsval> STRING
188 %token <tsval> CHAR
189 %token <ssym> NAME
190 %token <tsym> TYPENAME /* Not TYPE_NAME cus already taken. */
191 %token <voidval> COMPLETE
192 /*%type <sval> name*/
193 %type <svec> string_exp
194 %type <ssym> name_not_typename
195
196 /* A NAME_OR_INT is a symbol which is not known in the symbol table,
197 but which would parse as a valid number in the current input radix.
198 E.g. "c" when input_radix==16. Depending on the parse, it will be
199 turned into a name or into a number. */
200 %token <ssym> NAME_OR_INT
201
202 %token <lval> TRUE_KEYWORD FALSE_KEYWORD
203 %token STRUCT_KEYWORD INTERFACE_KEYWORD TYPE_KEYWORD CHAN_KEYWORD
204 %token SIZEOF_KEYWORD
205 %token LEN_KEYWORD CAP_KEYWORD
206 %token NEW_KEYWORD
207 %token IOTA_KEYWORD NIL_KEYWORD
208 %token CONST_KEYWORD
209 %token DOTDOTDOT
210 %token ENTRY
211 %token ERROR
212
213 /* Special type cases. */
214 %token BYTE_KEYWORD /* An alias of uint8. */
215
216 %token <sval> DOLLAR_VARIABLE
217
218 %token <opcode> ASSIGN_MODIFY
219
220 %left ','
221 %left ABOVE_COMMA
222 %right '=' ASSIGN_MODIFY
223 %right '?'
224 %left OROR
225 %left ANDAND
226 %left '|'
227 %left '^'
228 %left '&'
229 %left ANDNOT
230 %left EQUAL NOTEQUAL
231 %left '<' '>' LEQ GEQ
232 %left LSH RSH
233 %left '@'
234 %left '+' '-'
235 %left '*' '/' '%'
236 %right UNARY INCREMENT DECREMENT
237 %right LEFT_ARROW '.' '[' '('
238
239 \f
240 %%
241
242 start : exp1
243 | type_exp
244 ;
245
246 type_exp: type
247 { write_exp_elt_opcode (pstate, OP_TYPE);
248 write_exp_elt_type (pstate, $1);
249 write_exp_elt_opcode (pstate, OP_TYPE); }
250 ;
251
252 /* Expressions, including the comma operator. */
253 exp1 : exp
254 | exp1 ',' exp
255 { write_exp_elt_opcode (pstate, BINOP_COMMA); }
256 ;
257
258 /* Expressions, not including the comma operator. */
259 exp : '*' exp %prec UNARY
260 { write_exp_elt_opcode (pstate, UNOP_IND); }
261 ;
262
263 exp : '&' exp %prec UNARY
264 { write_exp_elt_opcode (pstate, UNOP_ADDR); }
265 ;
266
267 exp : '-' exp %prec UNARY
268 { write_exp_elt_opcode (pstate, UNOP_NEG); }
269 ;
270
271 exp : '+' exp %prec UNARY
272 { write_exp_elt_opcode (pstate, UNOP_PLUS); }
273 ;
274
275 exp : '!' exp %prec UNARY
276 { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
277 ;
278
279 exp : '^' exp %prec UNARY
280 { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
281 ;
282
283 exp : exp INCREMENT %prec UNARY
284 { write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); }
285 ;
286
287 exp : exp DECREMENT %prec UNARY
288 { write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); }
289 ;
290
291 /* foo->bar is not in Go. May want as a gdb extension. Later. */
292
293 exp : exp '.' name_not_typename
294 { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
295 write_exp_string (pstate, $3.stoken);
296 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
297 ;
298
299 exp : exp '.' name_not_typename COMPLETE
300 { mark_struct_expression (pstate);
301 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
302 write_exp_string (pstate, $3.stoken);
303 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
304 ;
305
306 exp : exp '.' COMPLETE
307 { struct stoken s;
308 mark_struct_expression (pstate);
309 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
310 s.ptr = "";
311 s.length = 0;
312 write_exp_string (pstate, s);
313 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
314 ;
315
316 exp : exp '[' exp1 ']'
317 { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
318 ;
319
320 exp : exp '('
321 /* This is to save the value of arglist_len
322 being accumulated by an outer function call. */
323 { start_arglist (); }
324 arglist ')' %prec LEFT_ARROW
325 { write_exp_elt_opcode (pstate, OP_FUNCALL);
326 write_exp_elt_longcst (pstate,
327 (LONGEST) end_arglist ());
328 write_exp_elt_opcode (pstate, OP_FUNCALL); }
329 ;
330
331 lcurly : '{'
332 { start_arglist (); }
333 ;
334
335 arglist :
336 ;
337
338 arglist : exp
339 { arglist_len = 1; }
340 ;
341
342 arglist : arglist ',' exp %prec ABOVE_COMMA
343 { arglist_len++; }
344 ;
345
346 rcurly : '}'
347 { $$ = end_arglist () - 1; }
348 ;
349
350 exp : lcurly type rcurly exp %prec UNARY
351 { write_exp_elt_opcode (pstate, UNOP_MEMVAL);
352 write_exp_elt_type (pstate, $2);
353 write_exp_elt_opcode (pstate, UNOP_MEMVAL); }
354 ;
355
356 exp : type '(' exp ')' %prec UNARY
357 { write_exp_elt_opcode (pstate, UNOP_CAST);
358 write_exp_elt_type (pstate, $1);
359 write_exp_elt_opcode (pstate, UNOP_CAST); }
360 ;
361
362 exp : '(' exp1 ')'
363 { }
364 ;
365
366 /* Binary operators in order of decreasing precedence. */
367
368 exp : exp '@' exp
369 { write_exp_elt_opcode (pstate, BINOP_REPEAT); }
370 ;
371
372 exp : exp '*' exp
373 { write_exp_elt_opcode (pstate, BINOP_MUL); }
374 ;
375
376 exp : exp '/' exp
377 { write_exp_elt_opcode (pstate, BINOP_DIV); }
378 ;
379
380 exp : exp '%' exp
381 { write_exp_elt_opcode (pstate, BINOP_REM); }
382 ;
383
384 exp : exp '+' exp
385 { write_exp_elt_opcode (pstate, BINOP_ADD); }
386 ;
387
388 exp : exp '-' exp
389 { write_exp_elt_opcode (pstate, BINOP_SUB); }
390 ;
391
392 exp : exp LSH exp
393 { write_exp_elt_opcode (pstate, BINOP_LSH); }
394 ;
395
396 exp : exp RSH exp
397 { write_exp_elt_opcode (pstate, BINOP_RSH); }
398 ;
399
400 exp : exp EQUAL exp
401 { write_exp_elt_opcode (pstate, BINOP_EQUAL); }
402 ;
403
404 exp : exp NOTEQUAL exp
405 { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
406 ;
407
408 exp : exp LEQ exp
409 { write_exp_elt_opcode (pstate, BINOP_LEQ); }
410 ;
411
412 exp : exp GEQ exp
413 { write_exp_elt_opcode (pstate, BINOP_GEQ); }
414 ;
415
416 exp : exp '<' exp
417 { write_exp_elt_opcode (pstate, BINOP_LESS); }
418 ;
419
420 exp : exp '>' exp
421 { write_exp_elt_opcode (pstate, BINOP_GTR); }
422 ;
423
424 exp : exp '&' exp
425 { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
426 ;
427
428 exp : exp '^' exp
429 { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
430 ;
431
432 exp : exp '|' exp
433 { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
434 ;
435
436 exp : exp ANDAND exp
437 { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
438 ;
439
440 exp : exp OROR exp
441 { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
442 ;
443
444 exp : exp '?' exp ':' exp %prec '?'
445 { write_exp_elt_opcode (pstate, TERNOP_COND); }
446 ;
447
448 exp : exp '=' exp
449 { write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
450 ;
451
452 exp : exp ASSIGN_MODIFY exp
453 { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY);
454 write_exp_elt_opcode (pstate, $2);
455 write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); }
456 ;
457
458 exp : INT
459 { write_exp_elt_opcode (pstate, OP_LONG);
460 write_exp_elt_type (pstate, $1.type);
461 write_exp_elt_longcst (pstate, (LONGEST)($1.val));
462 write_exp_elt_opcode (pstate, OP_LONG); }
463 ;
464
465 exp : CHAR
466 {
467 struct stoken_vector vec;
468 vec.len = 1;
469 vec.tokens = &$1;
470 write_exp_string_vector (pstate, $1.type, &vec);
471 }
472 ;
473
474 exp : NAME_OR_INT
475 { YYSTYPE val;
476 parse_number (pstate, $1.stoken.ptr,
477 $1.stoken.length, 0, &val);
478 write_exp_elt_opcode (pstate, OP_LONG);
479 write_exp_elt_type (pstate, val.typed_val_int.type);
480 write_exp_elt_longcst (pstate, (LONGEST)
481 val.typed_val_int.val);
482 write_exp_elt_opcode (pstate, OP_LONG);
483 }
484 ;
485
486
487 exp : FLOAT
488 { write_exp_elt_opcode (pstate, OP_DOUBLE);
489 write_exp_elt_type (pstate, $1.type);
490 write_exp_elt_dblcst (pstate, $1.dval);
491 write_exp_elt_opcode (pstate, OP_DOUBLE); }
492 ;
493
494 exp : variable
495 ;
496
497 exp : DOLLAR_VARIABLE
498 {
499 write_dollar_variable (pstate, $1);
500 }
501 ;
502
503 exp : SIZEOF_KEYWORD '(' type ')' %prec UNARY
504 {
505 /* TODO(dje): Go objects in structs. */
506 write_exp_elt_opcode (pstate, OP_LONG);
507 /* TODO(dje): What's the right type here? */
508 write_exp_elt_type
509 (pstate,
510 parse_type (pstate)->builtin_unsigned_int);
511 $3 = check_typedef ($3);
512 write_exp_elt_longcst (pstate,
513 (LONGEST) TYPE_LENGTH ($3));
514 write_exp_elt_opcode (pstate, OP_LONG);
515 }
516 ;
517
518 exp : SIZEOF_KEYWORD '(' exp ')' %prec UNARY
519 {
520 /* TODO(dje): Go objects in structs. */
521 write_exp_elt_opcode (pstate, UNOP_SIZEOF);
522 }
523
524 string_exp:
525 STRING
526 {
527 /* We copy the string here, and not in the
528 lexer, to guarantee that we do not leak a
529 string. */
530 /* Note that we NUL-terminate here, but just
531 for convenience. */
532 struct typed_stoken *vec = XNEW (struct typed_stoken);
533 $$.len = 1;
534 $$.tokens = vec;
535
536 vec->type = $1.type;
537 vec->length = $1.length;
538 vec->ptr = malloc ($1.length + 1);
539 memcpy (vec->ptr, $1.ptr, $1.length + 1);
540 }
541
542 | string_exp '+' STRING
543 {
544 /* Note that we NUL-terminate here, but just
545 for convenience. */
546 char *p;
547 ++$$.len;
548 $$.tokens = realloc ($$.tokens,
549 $$.len * sizeof (struct typed_stoken));
550
551 p = malloc ($3.length + 1);
552 memcpy (p, $3.ptr, $3.length + 1);
553
554 $$.tokens[$$.len - 1].type = $3.type;
555 $$.tokens[$$.len - 1].length = $3.length;
556 $$.tokens[$$.len - 1].ptr = p;
557 }
558 ;
559
560 exp : string_exp %prec ABOVE_COMMA
561 {
562 int i;
563
564 write_exp_string_vector (pstate, 0 /*always utf8*/,
565 &$1);
566 for (i = 0; i < $1.len; ++i)
567 free ($1.tokens[i].ptr);
568 free ($1.tokens);
569 }
570 ;
571
572 exp : TRUE_KEYWORD
573 { write_exp_elt_opcode (pstate, OP_BOOL);
574 write_exp_elt_longcst (pstate, (LONGEST) $1);
575 write_exp_elt_opcode (pstate, OP_BOOL); }
576 ;
577
578 exp : FALSE_KEYWORD
579 { write_exp_elt_opcode (pstate, OP_BOOL);
580 write_exp_elt_longcst (pstate, (LONGEST) $1);
581 write_exp_elt_opcode (pstate, OP_BOOL); }
582 ;
583
584 variable: name_not_typename ENTRY
585 { struct symbol *sym = $1.sym.symbol;
586
587 if (sym == NULL
588 || !SYMBOL_IS_ARGUMENT (sym)
589 || !symbol_read_needs_frame (sym))
590 error (_("@entry can be used only for function "
591 "parameters, not for \"%s\""),
592 copy_name ($1.stoken));
593
594 write_exp_elt_opcode (pstate, OP_VAR_ENTRY_VALUE);
595 write_exp_elt_sym (pstate, sym);
596 write_exp_elt_opcode (pstate, OP_VAR_ENTRY_VALUE);
597 }
598 ;
599
600 variable: name_not_typename
601 { struct block_symbol sym = $1.sym;
602
603 if (sym.symbol)
604 {
605 if (symbol_read_needs_frame (sym.symbol))
606 {
607 if (innermost_block == 0
608 || contained_in (sym.block,
609 innermost_block))
610 innermost_block = sym.block;
611 }
612
613 write_exp_elt_opcode (pstate, OP_VAR_VALUE);
614 write_exp_elt_block (pstate, sym.block);
615 write_exp_elt_sym (pstate, sym.symbol);
616 write_exp_elt_opcode (pstate, OP_VAR_VALUE);
617 }
618 else if ($1.is_a_field_of_this)
619 {
620 /* TODO(dje): Can we get here?
621 E.g., via a mix of c++ and go? */
622 gdb_assert_not_reached ("go with `this' field");
623 }
624 else
625 {
626 struct bound_minimal_symbol msymbol;
627 char *arg = copy_name ($1.stoken);
628
629 msymbol =
630 lookup_bound_minimal_symbol (arg);
631 if (msymbol.minsym != NULL)
632 write_exp_msymbol (pstate, msymbol);
633 else if (!have_full_symbols ()
634 && !have_partial_symbols ())
635 error (_("No symbol table is loaded. "
636 "Use the \"file\" command."));
637 else
638 error (_("No symbol \"%s\" in current context."),
639 copy_name ($1.stoken));
640 }
641 }
642 ;
643
644 /* TODO
645 method_exp: PACKAGENAME '.' name '.' name
646 {
647 }
648 ;
649 */
650
651 type /* Implements (approximately): [*] type-specifier */
652 : '*' type
653 { $$ = lookup_pointer_type ($2); }
654 | TYPENAME
655 { $$ = $1.type; }
656 /*
657 | STRUCT_KEYWORD name
658 { $$ = lookup_struct (copy_name ($2),
659 expression_context_block); }
660 */
661 | BYTE_KEYWORD
662 { $$ = builtin_go_type (parse_gdbarch (pstate))
663 ->builtin_uint8; }
664 ;
665
666 /* TODO
667 name : NAME { $$ = $1.stoken; }
668 | TYPENAME { $$ = $1.stoken; }
669 | NAME_OR_INT { $$ = $1.stoken; }
670 ;
671 */
672
673 name_not_typename
674 : NAME
675 /* These would be useful if name_not_typename was useful, but it is just
676 a fake for "variable", so these cause reduce/reduce conflicts because
677 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
678 =exp) or just an exp. If name_not_typename was ever used in an lvalue
679 context where only a name could occur, this might be useful.
680 | NAME_OR_INT
681 */
682 ;
683
684 %%
685
686 /* Wrapper on parse_c_float to get the type right for Go. */
687
688 static int
689 parse_go_float (struct gdbarch *gdbarch, const char *p, int len,
690 DOUBLEST *d, struct type **t)
691 {
692 int result = parse_c_float (gdbarch, p, len, d, t);
693 const struct builtin_type *builtin_types = builtin_type (gdbarch);
694 const struct builtin_go_type *builtin_go_types = builtin_go_type (gdbarch);
695
696 if (*t == builtin_types->builtin_float)
697 *t = builtin_go_types->builtin_float32;
698 else if (*t == builtin_types->builtin_double)
699 *t = builtin_go_types->builtin_float64;
700
701 return result;
702 }
703
704 /* Take care of parsing a number (anything that starts with a digit).
705 Set yylval and return the token type; update lexptr.
706 LEN is the number of characters in it. */
707
708 /* FIXME: Needs some error checking for the float case. */
709 /* FIXME(dje): IWBN to use c-exp.y's parse_number if we could.
710 That will require moving the guts into a function that we both call
711 as our YYSTYPE is different than c-exp.y's */
712
713 static int
714 parse_number (struct parser_state *par_state,
715 const char *p, int len, int parsed_float, YYSTYPE *putithere)
716 {
717 /* FIXME: Shouldn't these be unsigned? We don't deal with negative values
718 here, and we do kind of silly things like cast to unsigned. */
719 LONGEST n = 0;
720 LONGEST prevn = 0;
721 ULONGEST un;
722
723 int i = 0;
724 int c;
725 int base = input_radix;
726 int unsigned_p = 0;
727
728 /* Number of "L" suffixes encountered. */
729 int long_p = 0;
730
731 /* We have found a "L" or "U" suffix. */
732 int found_suffix = 0;
733
734 ULONGEST high_bit;
735 struct type *signed_type;
736 struct type *unsigned_type;
737
738 if (parsed_float)
739 {
740 if (! parse_go_float (parse_gdbarch (par_state), p, len,
741 &putithere->typed_val_float.dval,
742 &putithere->typed_val_float.type))
743 return ERROR;
744 return FLOAT;
745 }
746
747 /* Handle base-switching prefixes 0x, 0t, 0d, 0. */
748 if (p[0] == '0')
749 switch (p[1])
750 {
751 case 'x':
752 case 'X':
753 if (len >= 3)
754 {
755 p += 2;
756 base = 16;
757 len -= 2;
758 }
759 break;
760
761 case 'b':
762 case 'B':
763 if (len >= 3)
764 {
765 p += 2;
766 base = 2;
767 len -= 2;
768 }
769 break;
770
771 case 't':
772 case 'T':
773 case 'd':
774 case 'D':
775 if (len >= 3)
776 {
777 p += 2;
778 base = 10;
779 len -= 2;
780 }
781 break;
782
783 default:
784 base = 8;
785 break;
786 }
787
788 while (len-- > 0)
789 {
790 c = *p++;
791 if (c >= 'A' && c <= 'Z')
792 c += 'a' - 'A';
793 if (c != 'l' && c != 'u')
794 n *= base;
795 if (c >= '0' && c <= '9')
796 {
797 if (found_suffix)
798 return ERROR;
799 n += i = c - '0';
800 }
801 else
802 {
803 if (base > 10 && c >= 'a' && c <= 'f')
804 {
805 if (found_suffix)
806 return ERROR;
807 n += i = c - 'a' + 10;
808 }
809 else if (c == 'l')
810 {
811 ++long_p;
812 found_suffix = 1;
813 }
814 else if (c == 'u')
815 {
816 unsigned_p = 1;
817 found_suffix = 1;
818 }
819 else
820 return ERROR; /* Char not a digit */
821 }
822 if (i >= base)
823 return ERROR; /* Invalid digit in this base. */
824
825 /* Portably test for overflow (only works for nonzero values, so make
826 a second check for zero). FIXME: Can't we just make n and prevn
827 unsigned and avoid this? */
828 if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
829 unsigned_p = 1; /* Try something unsigned. */
830
831 /* Portably test for unsigned overflow.
832 FIXME: This check is wrong; for example it doesn't find overflow
833 on 0x123456789 when LONGEST is 32 bits. */
834 if (c != 'l' && c != 'u' && n != 0)
835 {
836 if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
837 error (_("Numeric constant too large."));
838 }
839 prevn = n;
840 }
841
842 /* An integer constant is an int, a long, or a long long. An L
843 suffix forces it to be long; an LL suffix forces it to be long
844 long. If not forced to a larger size, it gets the first type of
845 the above that it fits in. To figure out whether it fits, we
846 shift it right and see whether anything remains. Note that we
847 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
848 operation, because many compilers will warn about such a shift
849 (which always produces a zero result). Sometimes gdbarch_int_bit
850 or gdbarch_long_bit will be that big, sometimes not. To deal with
851 the case where it is we just always shift the value more than
852 once, with fewer bits each time. */
853
854 un = (ULONGEST)n >> 2;
855 if (long_p == 0
856 && (un >> (gdbarch_int_bit (parse_gdbarch (par_state)) - 2)) == 0)
857 {
858 high_bit
859 = ((ULONGEST)1) << (gdbarch_int_bit (parse_gdbarch (par_state)) - 1);
860
861 /* A large decimal (not hex or octal) constant (between INT_MAX
862 and UINT_MAX) is a long or unsigned long, according to ANSI,
863 never an unsigned int, but this code treats it as unsigned
864 int. This probably should be fixed. GCC gives a warning on
865 such constants. */
866
867 unsigned_type = parse_type (par_state)->builtin_unsigned_int;
868 signed_type = parse_type (par_state)->builtin_int;
869 }
870 else if (long_p <= 1
871 && (un >> (gdbarch_long_bit (parse_gdbarch (par_state)) - 2)) == 0)
872 {
873 high_bit
874 = ((ULONGEST)1) << (gdbarch_long_bit (parse_gdbarch (par_state)) - 1);
875 unsigned_type = parse_type (par_state)->builtin_unsigned_long;
876 signed_type = parse_type (par_state)->builtin_long;
877 }
878 else
879 {
880 int shift;
881 if (sizeof (ULONGEST) * HOST_CHAR_BIT
882 < gdbarch_long_long_bit (parse_gdbarch (par_state)))
883 /* A long long does not fit in a LONGEST. */
884 shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
885 else
886 shift = (gdbarch_long_long_bit (parse_gdbarch (par_state)) - 1);
887 high_bit = (ULONGEST) 1 << shift;
888 unsigned_type = parse_type (par_state)->builtin_unsigned_long_long;
889 signed_type = parse_type (par_state)->builtin_long_long;
890 }
891
892 putithere->typed_val_int.val = n;
893
894 /* If the high bit of the worked out type is set then this number
895 has to be unsigned. */
896
897 if (unsigned_p || (n & high_bit))
898 {
899 putithere->typed_val_int.type = unsigned_type;
900 }
901 else
902 {
903 putithere->typed_val_int.type = signed_type;
904 }
905
906 return INT;
907 }
908
909 /* Temporary obstack used for holding strings. */
910 static struct obstack tempbuf;
911 static int tempbuf_init;
912
913 /* Parse a string or character literal from TOKPTR. The string or
914 character may be wide or unicode. *OUTPTR is set to just after the
915 end of the literal in the input string. The resulting token is
916 stored in VALUE. This returns a token value, either STRING or
917 CHAR, depending on what was parsed. *HOST_CHARS is set to the
918 number of host characters in the literal. */
919
920 static int
921 parse_string_or_char (const char *tokptr, const char **outptr,
922 struct typed_stoken *value, int *host_chars)
923 {
924 int quote;
925
926 /* Build the gdb internal form of the input string in tempbuf. Note
927 that the buffer is null byte terminated *only* for the
928 convenience of debugging gdb itself and printing the buffer
929 contents when the buffer contains no embedded nulls. Gdb does
930 not depend upon the buffer being null byte terminated, it uses
931 the length string instead. This allows gdb to handle C strings
932 (as well as strings in other languages) with embedded null
933 bytes */
934
935 if (!tempbuf_init)
936 tempbuf_init = 1;
937 else
938 obstack_free (&tempbuf, NULL);
939 obstack_init (&tempbuf);
940
941 /* Skip the quote. */
942 quote = *tokptr;
943 ++tokptr;
944
945 *host_chars = 0;
946
947 while (*tokptr)
948 {
949 char c = *tokptr;
950 if (c == '\\')
951 {
952 ++tokptr;
953 *host_chars += c_parse_escape (&tokptr, &tempbuf);
954 }
955 else if (c == quote)
956 break;
957 else
958 {
959 obstack_1grow (&tempbuf, c);
960 ++tokptr;
961 /* FIXME: this does the wrong thing with multi-byte host
962 characters. We could use mbrlen here, but that would
963 make "set host-charset" a bit less useful. */
964 ++*host_chars;
965 }
966 }
967
968 if (*tokptr != quote)
969 {
970 if (quote == '"')
971 error (_("Unterminated string in expression."));
972 else
973 error (_("Unmatched single quote."));
974 }
975 ++tokptr;
976
977 value->type = C_STRING | (quote == '\'' ? C_CHAR : 0); /*FIXME*/
978 value->ptr = obstack_base (&tempbuf);
979 value->length = obstack_object_size (&tempbuf);
980
981 *outptr = tokptr;
982
983 return quote == '\'' ? CHAR : STRING;
984 }
985
986 struct token
987 {
988 char *oper;
989 int token;
990 enum exp_opcode opcode;
991 };
992
993 static const struct token tokentab3[] =
994 {
995 {">>=", ASSIGN_MODIFY, BINOP_RSH},
996 {"<<=", ASSIGN_MODIFY, BINOP_LSH},
997 /*{"&^=", ASSIGN_MODIFY, BINOP_BITWISE_ANDNOT}, TODO */
998 {"...", DOTDOTDOT, OP_NULL},
999 };
1000
1001 static const struct token tokentab2[] =
1002 {
1003 {"+=", ASSIGN_MODIFY, BINOP_ADD},
1004 {"-=", ASSIGN_MODIFY, BINOP_SUB},
1005 {"*=", ASSIGN_MODIFY, BINOP_MUL},
1006 {"/=", ASSIGN_MODIFY, BINOP_DIV},
1007 {"%=", ASSIGN_MODIFY, BINOP_REM},
1008 {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR},
1009 {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND},
1010 {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR},
1011 {"++", INCREMENT, BINOP_END},
1012 {"--", DECREMENT, BINOP_END},
1013 /*{"->", RIGHT_ARROW, BINOP_END}, Doesn't exist in Go. */
1014 {"<-", LEFT_ARROW, BINOP_END},
1015 {"&&", ANDAND, BINOP_END},
1016 {"||", OROR, BINOP_END},
1017 {"<<", LSH, BINOP_END},
1018 {">>", RSH, BINOP_END},
1019 {"==", EQUAL, BINOP_END},
1020 {"!=", NOTEQUAL, BINOP_END},
1021 {"<=", LEQ, BINOP_END},
1022 {">=", GEQ, BINOP_END},
1023 /*{"&^", ANDNOT, BINOP_END}, TODO */
1024 };
1025
1026 /* Identifier-like tokens. */
1027 static const struct token ident_tokens[] =
1028 {
1029 {"true", TRUE_KEYWORD, OP_NULL},
1030 {"false", FALSE_KEYWORD, OP_NULL},
1031 {"nil", NIL_KEYWORD, OP_NULL},
1032 {"const", CONST_KEYWORD, OP_NULL},
1033 {"struct", STRUCT_KEYWORD, OP_NULL},
1034 {"type", TYPE_KEYWORD, OP_NULL},
1035 {"interface", INTERFACE_KEYWORD, OP_NULL},
1036 {"chan", CHAN_KEYWORD, OP_NULL},
1037 {"byte", BYTE_KEYWORD, OP_NULL}, /* An alias of uint8. */
1038 {"len", LEN_KEYWORD, OP_NULL},
1039 {"cap", CAP_KEYWORD, OP_NULL},
1040 {"new", NEW_KEYWORD, OP_NULL},
1041 {"iota", IOTA_KEYWORD, OP_NULL},
1042 };
1043
1044 /* This is set if a NAME token appeared at the very end of the input
1045 string, with no whitespace separating the name from the EOF. This
1046 is used only when parsing to do field name completion. */
1047 static int saw_name_at_eof;
1048
1049 /* This is set if the previously-returned token was a structure
1050 operator -- either '.' or ARROW. This is used only when parsing to
1051 do field name completion. */
1052 static int last_was_structop;
1053
1054 /* Read one token, getting characters through lexptr. */
1055
1056 static int
1057 lex_one_token (struct parser_state *par_state)
1058 {
1059 int c;
1060 int namelen;
1061 unsigned int i;
1062 const char *tokstart;
1063 int saw_structop = last_was_structop;
1064 char *copy;
1065
1066 last_was_structop = 0;
1067
1068 retry:
1069
1070 prev_lexptr = lexptr;
1071
1072 tokstart = lexptr;
1073 /* See if it is a special token of length 3. */
1074 for (i = 0; i < sizeof (tokentab3) / sizeof (tokentab3[0]); i++)
1075 if (strncmp (tokstart, tokentab3[i].oper, 3) == 0)
1076 {
1077 lexptr += 3;
1078 yylval.opcode = tokentab3[i].opcode;
1079 return tokentab3[i].token;
1080 }
1081
1082 /* See if it is a special token of length 2. */
1083 for (i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++)
1084 if (strncmp (tokstart, tokentab2[i].oper, 2) == 0)
1085 {
1086 lexptr += 2;
1087 yylval.opcode = tokentab2[i].opcode;
1088 /* NOTE: -> doesn't exist in Go, so we don't need to watch for
1089 setting last_was_structop here. */
1090 return tokentab2[i].token;
1091 }
1092
1093 switch (c = *tokstart)
1094 {
1095 case 0:
1096 if (saw_name_at_eof)
1097 {
1098 saw_name_at_eof = 0;
1099 return COMPLETE;
1100 }
1101 else if (saw_structop)
1102 return COMPLETE;
1103 else
1104 return 0;
1105
1106 case ' ':
1107 case '\t':
1108 case '\n':
1109 lexptr++;
1110 goto retry;
1111
1112 case '[':
1113 case '(':
1114 paren_depth++;
1115 lexptr++;
1116 return c;
1117
1118 case ']':
1119 case ')':
1120 if (paren_depth == 0)
1121 return 0;
1122 paren_depth--;
1123 lexptr++;
1124 return c;
1125
1126 case ',':
1127 if (comma_terminates
1128 && paren_depth == 0)
1129 return 0;
1130 lexptr++;
1131 return c;
1132
1133 case '.':
1134 /* Might be a floating point number. */
1135 if (lexptr[1] < '0' || lexptr[1] > '9')
1136 {
1137 if (parse_completion)
1138 last_was_structop = 1;
1139 goto symbol; /* Nope, must be a symbol. */
1140 }
1141 /* FALL THRU into number case. */
1142
1143 case '0':
1144 case '1':
1145 case '2':
1146 case '3':
1147 case '4':
1148 case '5':
1149 case '6':
1150 case '7':
1151 case '8':
1152 case '9':
1153 {
1154 /* It's a number. */
1155 int got_dot = 0, got_e = 0, toktype;
1156 const char *p = tokstart;
1157 int hex = input_radix > 10;
1158
1159 if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
1160 {
1161 p += 2;
1162 hex = 1;
1163 }
1164
1165 for (;; ++p)
1166 {
1167 /* This test includes !hex because 'e' is a valid hex digit
1168 and thus does not indicate a floating point number when
1169 the radix is hex. */
1170 if (!hex && !got_e && (*p == 'e' || *p == 'E'))
1171 got_dot = got_e = 1;
1172 /* This test does not include !hex, because a '.' always indicates
1173 a decimal floating point number regardless of the radix. */
1174 else if (!got_dot && *p == '.')
1175 got_dot = 1;
1176 else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
1177 && (*p == '-' || *p == '+'))
1178 /* This is the sign of the exponent, not the end of the
1179 number. */
1180 continue;
1181 /* We will take any letters or digits. parse_number will
1182 complain if past the radix, or if L or U are not final. */
1183 else if ((*p < '0' || *p > '9')
1184 && ((*p < 'a' || *p > 'z')
1185 && (*p < 'A' || *p > 'Z')))
1186 break;
1187 }
1188 toktype = parse_number (par_state, tokstart, p - tokstart,
1189 got_dot|got_e, &yylval);
1190 if (toktype == ERROR)
1191 {
1192 char *err_copy = (char *) alloca (p - tokstart + 1);
1193
1194 memcpy (err_copy, tokstart, p - tokstart);
1195 err_copy[p - tokstart] = 0;
1196 error (_("Invalid number \"%s\"."), err_copy);
1197 }
1198 lexptr = p;
1199 return toktype;
1200 }
1201
1202 case '@':
1203 {
1204 const char *p = &tokstart[1];
1205 size_t len = strlen ("entry");
1206
1207 while (isspace (*p))
1208 p++;
1209 if (strncmp (p, "entry", len) == 0 && !isalnum (p[len])
1210 && p[len] != '_')
1211 {
1212 lexptr = &p[len];
1213 return ENTRY;
1214 }
1215 }
1216 /* FALLTHRU */
1217 case '+':
1218 case '-':
1219 case '*':
1220 case '/':
1221 case '%':
1222 case '|':
1223 case '&':
1224 case '^':
1225 case '~':
1226 case '!':
1227 case '<':
1228 case '>':
1229 case '?':
1230 case ':':
1231 case '=':
1232 case '{':
1233 case '}':
1234 symbol:
1235 lexptr++;
1236 return c;
1237
1238 case '\'':
1239 case '"':
1240 case '`':
1241 {
1242 int host_len;
1243 int result = parse_string_or_char (tokstart, &lexptr, &yylval.tsval,
1244 &host_len);
1245 if (result == CHAR)
1246 {
1247 if (host_len == 0)
1248 error (_("Empty character constant."));
1249 else if (host_len > 2 && c == '\'')
1250 {
1251 ++tokstart;
1252 namelen = lexptr - tokstart - 1;
1253 goto tryname;
1254 }
1255 else if (host_len > 1)
1256 error (_("Invalid character constant."));
1257 }
1258 return result;
1259 }
1260 }
1261
1262 if (!(c == '_' || c == '$'
1263 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
1264 /* We must have come across a bad character (e.g. ';'). */
1265 error (_("Invalid character '%c' in expression."), c);
1266
1267 /* It's a name. See how long it is. */
1268 namelen = 0;
1269 for (c = tokstart[namelen];
1270 (c == '_' || c == '$' || (c >= '0' && c <= '9')
1271 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));)
1272 {
1273 c = tokstart[++namelen];
1274 }
1275
1276 /* The token "if" terminates the expression and is NOT removed from
1277 the input stream. It doesn't count if it appears in the
1278 expansion of a macro. */
1279 if (namelen == 2
1280 && tokstart[0] == 'i'
1281 && tokstart[1] == 'f')
1282 {
1283 return 0;
1284 }
1285
1286 /* For the same reason (breakpoint conditions), "thread N"
1287 terminates the expression. "thread" could be an identifier, but
1288 an identifier is never followed by a number without intervening
1289 punctuation.
1290 Handle abbreviations of these, similarly to
1291 breakpoint.c:find_condition_and_thread.
1292 TODO: Watch for "goroutine" here? */
1293 if (namelen >= 1
1294 && strncmp (tokstart, "thread", namelen) == 0
1295 && (tokstart[namelen] == ' ' || tokstart[namelen] == '\t'))
1296 {
1297 const char *p = tokstart + namelen + 1;
1298
1299 while (*p == ' ' || *p == '\t')
1300 p++;
1301 if (*p >= '0' && *p <= '9')
1302 return 0;
1303 }
1304
1305 lexptr += namelen;
1306
1307 tryname:
1308
1309 yylval.sval.ptr = tokstart;
1310 yylval.sval.length = namelen;
1311
1312 /* Catch specific keywords. */
1313 copy = copy_name (yylval.sval);
1314 for (i = 0; i < sizeof (ident_tokens) / sizeof (ident_tokens[0]); i++)
1315 if (strcmp (copy, ident_tokens[i].oper) == 0)
1316 {
1317 /* It is ok to always set this, even though we don't always
1318 strictly need to. */
1319 yylval.opcode = ident_tokens[i].opcode;
1320 return ident_tokens[i].token;
1321 }
1322
1323 if (*tokstart == '$')
1324 return DOLLAR_VARIABLE;
1325
1326 if (parse_completion && *lexptr == '\0')
1327 saw_name_at_eof = 1;
1328 return NAME;
1329 }
1330
1331 /* An object of this type is pushed on a FIFO by the "outer" lexer. */
1332 typedef struct
1333 {
1334 int token;
1335 YYSTYPE value;
1336 } token_and_value;
1337
1338 DEF_VEC_O (token_and_value);
1339
1340 /* A FIFO of tokens that have been read but not yet returned to the
1341 parser. */
1342 static VEC (token_and_value) *token_fifo;
1343
1344 /* Non-zero if the lexer should return tokens from the FIFO. */
1345 static int popping;
1346
1347 /* Temporary storage for yylex; this holds symbol names as they are
1348 built up. */
1349 static struct obstack name_obstack;
1350
1351 /* Build "package.name" in name_obstack.
1352 For convenience of the caller, the name is NUL-terminated,
1353 but the NUL is not included in the recorded length. */
1354
1355 static struct stoken
1356 build_packaged_name (const char *package, int package_len,
1357 const char *name, int name_len)
1358 {
1359 struct stoken result;
1360
1361 obstack_free (&name_obstack, obstack_base (&name_obstack));
1362 obstack_grow (&name_obstack, package, package_len);
1363 obstack_grow_str (&name_obstack, ".");
1364 obstack_grow (&name_obstack, name, name_len);
1365 obstack_grow (&name_obstack, "", 1);
1366 result.ptr = obstack_base (&name_obstack);
1367 result.length = obstack_object_size (&name_obstack) - 1;
1368
1369 return result;
1370 }
1371
1372 /* Return non-zero if NAME is a package name.
1373 BLOCK is the scope in which to interpret NAME; this can be NULL
1374 to mean the global scope. */
1375
1376 static int
1377 package_name_p (const char *name, const struct block *block)
1378 {
1379 struct symbol *sym;
1380 struct field_of_this_result is_a_field_of_this;
1381
1382 sym = lookup_symbol (name, block, STRUCT_DOMAIN, &is_a_field_of_this).symbol;
1383
1384 if (sym
1385 && SYMBOL_CLASS (sym) == LOC_TYPEDEF
1386 && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_MODULE)
1387 return 1;
1388
1389 return 0;
1390 }
1391
1392 /* Classify a (potential) function in the "unsafe" package.
1393 We fold these into "keywords" to keep things simple, at least until
1394 something more complex is warranted. */
1395
1396 static int
1397 classify_unsafe_function (struct stoken function_name)
1398 {
1399 char *copy = copy_name (function_name);
1400
1401 if (strcmp (copy, "Sizeof") == 0)
1402 {
1403 yylval.sval = function_name;
1404 return SIZEOF_KEYWORD;
1405 }
1406
1407 error (_("Unknown function in `unsafe' package: %s"), copy);
1408 }
1409
1410 /* Classify token(s) "name1.name2" where name1 is known to be a package.
1411 The contents of the token are in `yylval'.
1412 Updates yylval and returns the new token type.
1413
1414 The result is one of NAME, NAME_OR_INT, or TYPENAME. */
1415
1416 static int
1417 classify_packaged_name (const struct block *block)
1418 {
1419 char *copy;
1420 struct block_symbol sym;
1421 struct field_of_this_result is_a_field_of_this;
1422
1423 copy = copy_name (yylval.sval);
1424
1425 sym = lookup_symbol (copy, block, VAR_DOMAIN, &is_a_field_of_this);
1426
1427 if (sym.symbol)
1428 {
1429 yylval.ssym.sym = sym;
1430 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1431 }
1432
1433 return NAME;
1434 }
1435
1436 /* Classify a NAME token.
1437 The contents of the token are in `yylval'.
1438 Updates yylval and returns the new token type.
1439 BLOCK is the block in which lookups start; this can be NULL
1440 to mean the global scope.
1441
1442 The result is one of NAME, NAME_OR_INT, or TYPENAME. */
1443
1444 static int
1445 classify_name (struct parser_state *par_state, const struct block *block)
1446 {
1447 struct type *type;
1448 struct block_symbol sym;
1449 char *copy;
1450 struct field_of_this_result is_a_field_of_this;
1451
1452 copy = copy_name (yylval.sval);
1453
1454 /* Try primitive types first so they win over bad/weird debug info. */
1455 type = language_lookup_primitive_type (parse_language (par_state),
1456 parse_gdbarch (par_state),
1457 copy);
1458 if (type != NULL)
1459 {
1460 /* NOTE: We take advantage of the fact that yylval coming in was a
1461 NAME, and that struct ttype is a compatible extension of struct
1462 stoken, so yylval.tsym.stoken is already filled in. */
1463 yylval.tsym.type = type;
1464 return TYPENAME;
1465 }
1466
1467 /* TODO: What about other types? */
1468
1469 sym = lookup_symbol (copy, block, VAR_DOMAIN, &is_a_field_of_this);
1470
1471 if (sym.symbol)
1472 {
1473 yylval.ssym.sym = sym;
1474 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1475 return NAME;
1476 }
1477
1478 /* If we didn't find a symbol, look again in the current package.
1479 This is to, e.g., make "p global_var" work without having to specify
1480 the package name. We intentionally only looks for objects in the
1481 current package. */
1482
1483 {
1484 char *current_package_name = go_block_package_name (block);
1485
1486 if (current_package_name != NULL)
1487 {
1488 struct stoken sval =
1489 build_packaged_name (current_package_name,
1490 strlen (current_package_name),
1491 copy, strlen (copy));
1492
1493 xfree (current_package_name);
1494 sym = lookup_symbol (sval.ptr, block, VAR_DOMAIN,
1495 &is_a_field_of_this);
1496 if (sym.symbol)
1497 {
1498 yylval.ssym.stoken = sval;
1499 yylval.ssym.sym = sym;
1500 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1501 return NAME;
1502 }
1503 }
1504 }
1505
1506 /* Input names that aren't symbols but ARE valid hex numbers, when
1507 the input radix permits them, can be names or numbers depending
1508 on the parse. Note we support radixes > 16 here. */
1509 if ((copy[0] >= 'a' && copy[0] < 'a' + input_radix - 10)
1510 || (copy[0] >= 'A' && copy[0] < 'A' + input_radix - 10))
1511 {
1512 YYSTYPE newlval; /* Its value is ignored. */
1513 int hextype = parse_number (par_state, copy, yylval.sval.length,
1514 0, &newlval);
1515 if (hextype == INT)
1516 {
1517 yylval.ssym.sym.symbol = NULL;
1518 yylval.ssym.sym.block = NULL;
1519 yylval.ssym.is_a_field_of_this = 0;
1520 return NAME_OR_INT;
1521 }
1522 }
1523
1524 yylval.ssym.sym.symbol = NULL;
1525 yylval.ssym.sym.block = NULL;
1526 yylval.ssym.is_a_field_of_this = 0;
1527 return NAME;
1528 }
1529
1530 /* This is taken from c-exp.y mostly to get something working.
1531 The basic structure has been kept because we may yet need some of it. */
1532
1533 static int
1534 yylex (void)
1535 {
1536 token_and_value current, next;
1537
1538 if (popping && !VEC_empty (token_and_value, token_fifo))
1539 {
1540 token_and_value tv = *VEC_index (token_and_value, token_fifo, 0);
1541 VEC_ordered_remove (token_and_value, token_fifo, 0);
1542 yylval = tv.value;
1543 /* There's no need to fall through to handle package.name
1544 as that can never happen here. In theory. */
1545 return tv.token;
1546 }
1547 popping = 0;
1548
1549 current.token = lex_one_token (pstate);
1550
1551 /* TODO: Need a way to force specifying name1 as a package.
1552 .name1.name2 ? */
1553
1554 if (current.token != NAME)
1555 return current.token;
1556
1557 /* See if we have "name1 . name2". */
1558
1559 current.value = yylval;
1560 next.token = lex_one_token (pstate);
1561 next.value = yylval;
1562
1563 if (next.token == '.')
1564 {
1565 token_and_value name2;
1566
1567 name2.token = lex_one_token (pstate);
1568 name2.value = yylval;
1569
1570 if (name2.token == NAME)
1571 {
1572 /* Ok, we have "name1 . name2". */
1573 char *copy;
1574
1575 copy = copy_name (current.value.sval);
1576
1577 if (strcmp (copy, "unsafe") == 0)
1578 {
1579 popping = 1;
1580 return classify_unsafe_function (name2.value.sval);
1581 }
1582
1583 if (package_name_p (copy, expression_context_block))
1584 {
1585 popping = 1;
1586 yylval.sval = build_packaged_name (current.value.sval.ptr,
1587 current.value.sval.length,
1588 name2.value.sval.ptr,
1589 name2.value.sval.length);
1590 return classify_packaged_name (expression_context_block);
1591 }
1592 }
1593
1594 VEC_safe_push (token_and_value, token_fifo, &next);
1595 VEC_safe_push (token_and_value, token_fifo, &name2);
1596 }
1597 else
1598 {
1599 VEC_safe_push (token_and_value, token_fifo, &next);
1600 }
1601
1602 /* If we arrive here we don't have a package-qualified name. */
1603
1604 popping = 1;
1605 yylval = current.value;
1606 return classify_name (pstate, expression_context_block);
1607 }
1608
1609 int
1610 go_parse (struct parser_state *par_state)
1611 {
1612 int result;
1613 struct cleanup *back_to;
1614
1615 /* Setting up the parser state. */
1616 gdb_assert (par_state != NULL);
1617 pstate = par_state;
1618
1619 back_to = make_cleanup (null_cleanup, NULL);
1620
1621 make_cleanup_restore_integer (&yydebug);
1622 make_cleanup_clear_parser_state (&pstate);
1623 yydebug = parser_debug;
1624
1625 /* Initialize some state used by the lexer. */
1626 last_was_structop = 0;
1627 saw_name_at_eof = 0;
1628
1629 VEC_free (token_and_value, token_fifo);
1630 popping = 0;
1631 obstack_init (&name_obstack);
1632 make_cleanup_obstack_free (&name_obstack);
1633
1634 result = yyparse ();
1635 do_cleanups (back_to);
1636 return result;
1637 }
1638
1639 void
1640 yyerror (char *msg)
1641 {
1642 if (prev_lexptr)
1643 lexptr = prev_lexptr;
1644
1645 error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr);
1646 }
This page took 0.073454 seconds and 4 git commands to generate.