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