1 /* YACC parser for Go expressions, for GDB.
3 Copyright (C) 2012-2017 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
20 /* This file is derived from c-exp.y, p-exp.y. */
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.
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. */
39 /* Known bugs or limitations:
43 - '_' (blank identifier)
44 - automatic deref of pointers
46 - interfaces, channels, etc.
48 And lots of other things.
49 I'm sure there's some cleanup to do.
56 #include "expression.h"
58 #include "parser-defs.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 */
68 #define parse_type(ps) builtin_type (parse_gdbarch (ps))
70 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
72 #define GDB_YY_REMAP_PREFIX go_
75 /* The state of the parser, used internally when we are parsing the
78 static struct parser_state *pstate = NULL;
82 static int yylex (void);
84 void yyerror (const char *);
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. */
104 struct symtoken ssym;
106 struct typed_stoken tsval;
109 enum exp_opcode opcode;
110 struct internalvar *ivar;
111 struct stoken_vector svec;
115 /* YYSTYPE gets defined by %union. */
116 static int parse_number (struct parser_state *,
117 const char *, int, int, YYSTYPE *);
120 %type <voidval> exp exp1 type_exp start variable lcurly
124 %token <typed_val_int> INT
125 %token <typed_val_float> FLOAT
127 /* Both NAME and TYPENAME tokens represent symbols in the input,
128 and both convey their data as strings.
129 But a TYPENAME is a string that happens to be defined as a type
130 or builtin type name (such as int or char)
131 and a NAME is any other symbol.
132 Contexts where this distinction is not important can use the
133 nonterminal "name", which matches either NAME or TYPENAME. */
135 %token <tsval> RAW_STRING
136 %token <tsval> STRING
139 %token <tsym> TYPENAME /* Not TYPE_NAME cus already taken. */
140 %token <voidval> COMPLETE
141 /*%type <sval> name*/
142 %type <svec> string_exp
143 %type <ssym> name_not_typename
145 /* A NAME_OR_INT is a symbol which is not known in the symbol table,
146 but which would parse as a valid number in the current input radix.
147 E.g. "c" when input_radix==16. Depending on the parse, it will be
148 turned into a name or into a number. */
149 %token <ssym> NAME_OR_INT
151 %token <lval> TRUE_KEYWORD FALSE_KEYWORD
152 %token STRUCT_KEYWORD INTERFACE_KEYWORD TYPE_KEYWORD CHAN_KEYWORD
153 %token SIZEOF_KEYWORD
154 %token LEN_KEYWORD CAP_KEYWORD
156 %token IOTA_KEYWORD NIL_KEYWORD
162 /* Special type cases. */
163 %token BYTE_KEYWORD /* An alias of uint8. */
165 %token <sval> DOLLAR_VARIABLE
167 %token <opcode> ASSIGN_MODIFY
171 %right '=' ASSIGN_MODIFY
180 %left '<' '>' LEQ GEQ
185 %right UNARY INCREMENT DECREMENT
186 %right LEFT_ARROW '.' '[' '('
196 { write_exp_elt_opcode (pstate, OP_TYPE);
197 write_exp_elt_type (pstate, $1);
198 write_exp_elt_opcode (pstate, OP_TYPE); }
201 /* Expressions, including the comma operator. */
204 { write_exp_elt_opcode (pstate, BINOP_COMMA); }
207 /* Expressions, not including the comma operator. */
208 exp : '*' exp %prec UNARY
209 { write_exp_elt_opcode (pstate, UNOP_IND); }
212 exp : '&' exp %prec UNARY
213 { write_exp_elt_opcode (pstate, UNOP_ADDR); }
216 exp : '-' exp %prec UNARY
217 { write_exp_elt_opcode (pstate, UNOP_NEG); }
220 exp : '+' exp %prec UNARY
221 { write_exp_elt_opcode (pstate, UNOP_PLUS); }
224 exp : '!' exp %prec UNARY
225 { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
228 exp : '^' exp %prec UNARY
229 { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
232 exp : exp INCREMENT %prec UNARY
233 { write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); }
236 exp : exp DECREMENT %prec UNARY
237 { write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); }
240 /* foo->bar is not in Go. May want as a gdb extension. Later. */
242 exp : exp '.' name_not_typename
243 { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
244 write_exp_string (pstate, $3.stoken);
245 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
248 exp : exp '.' name_not_typename COMPLETE
249 { mark_struct_expression (pstate);
250 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
251 write_exp_string (pstate, $3.stoken);
252 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
255 exp : exp '.' COMPLETE
257 mark_struct_expression (pstate);
258 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
261 write_exp_string (pstate, s);
262 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
265 exp : exp '[' exp1 ']'
266 { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
270 /* This is to save the value of arglist_len
271 being accumulated by an outer function call. */
272 { start_arglist (); }
273 arglist ')' %prec LEFT_ARROW
274 { write_exp_elt_opcode (pstate, OP_FUNCALL);
275 write_exp_elt_longcst (pstate,
276 (LONGEST) end_arglist ());
277 write_exp_elt_opcode (pstate, OP_FUNCALL); }
281 { start_arglist (); }
291 arglist : arglist ',' exp %prec ABOVE_COMMA
296 { $$ = end_arglist () - 1; }
299 exp : lcurly type rcurly exp %prec UNARY
300 { write_exp_elt_opcode (pstate, UNOP_MEMVAL);
301 write_exp_elt_type (pstate, $2);
302 write_exp_elt_opcode (pstate, UNOP_MEMVAL); }
305 exp : type '(' exp ')' %prec UNARY
306 { write_exp_elt_opcode (pstate, UNOP_CAST);
307 write_exp_elt_type (pstate, $1);
308 write_exp_elt_opcode (pstate, UNOP_CAST); }
315 /* Binary operators in order of decreasing precedence. */
318 { write_exp_elt_opcode (pstate, BINOP_REPEAT); }
322 { write_exp_elt_opcode (pstate, BINOP_MUL); }
326 { write_exp_elt_opcode (pstate, BINOP_DIV); }
330 { write_exp_elt_opcode (pstate, BINOP_REM); }
334 { write_exp_elt_opcode (pstate, BINOP_ADD); }
338 { write_exp_elt_opcode (pstate, BINOP_SUB); }
342 { write_exp_elt_opcode (pstate, BINOP_LSH); }
346 { write_exp_elt_opcode (pstate, BINOP_RSH); }
350 { write_exp_elt_opcode (pstate, BINOP_EQUAL); }
353 exp : exp NOTEQUAL exp
354 { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
358 { write_exp_elt_opcode (pstate, BINOP_LEQ); }
362 { write_exp_elt_opcode (pstate, BINOP_GEQ); }
366 { write_exp_elt_opcode (pstate, BINOP_LESS); }
370 { write_exp_elt_opcode (pstate, BINOP_GTR); }
374 { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
378 { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
382 { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
386 { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
390 { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
393 exp : exp '?' exp ':' exp %prec '?'
394 { write_exp_elt_opcode (pstate, TERNOP_COND); }
398 { write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
401 exp : exp ASSIGN_MODIFY exp
402 { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY);
403 write_exp_elt_opcode (pstate, $2);
404 write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); }
408 { write_exp_elt_opcode (pstate, OP_LONG);
409 write_exp_elt_type (pstate, $1.type);
410 write_exp_elt_longcst (pstate, (LONGEST)($1.val));
411 write_exp_elt_opcode (pstate, OP_LONG); }
416 struct stoken_vector vec;
419 write_exp_string_vector (pstate, $1.type, &vec);
425 parse_number (pstate, $1.stoken.ptr,
426 $1.stoken.length, 0, &val);
427 write_exp_elt_opcode (pstate, OP_LONG);
428 write_exp_elt_type (pstate, val.typed_val_int.type);
429 write_exp_elt_longcst (pstate, (LONGEST)
430 val.typed_val_int.val);
431 write_exp_elt_opcode (pstate, OP_LONG);
437 { write_exp_elt_opcode (pstate, OP_FLOAT);
438 write_exp_elt_type (pstate, $1.type);
439 write_exp_elt_floatcst (pstate, $1.val);
440 write_exp_elt_opcode (pstate, OP_FLOAT); }
446 exp : DOLLAR_VARIABLE
448 write_dollar_variable (pstate, $1);
452 exp : SIZEOF_KEYWORD '(' type ')' %prec UNARY
454 /* TODO(dje): Go objects in structs. */
455 write_exp_elt_opcode (pstate, OP_LONG);
456 /* TODO(dje): What's the right type here? */
459 parse_type (pstate)->builtin_unsigned_int);
460 $3 = check_typedef ($3);
461 write_exp_elt_longcst (pstate,
462 (LONGEST) TYPE_LENGTH ($3));
463 write_exp_elt_opcode (pstate, OP_LONG);
467 exp : SIZEOF_KEYWORD '(' exp ')' %prec UNARY
469 /* TODO(dje): Go objects in structs. */
470 write_exp_elt_opcode (pstate, UNOP_SIZEOF);
476 /* We copy the string here, and not in the
477 lexer, to guarantee that we do not leak a
479 /* Note that we NUL-terminate here, but just
481 struct typed_stoken *vec = XNEW (struct typed_stoken);
486 vec->length = $1.length;
487 vec->ptr = (char *) malloc ($1.length + 1);
488 memcpy (vec->ptr, $1.ptr, $1.length + 1);
491 | string_exp '+' STRING
493 /* Note that we NUL-terminate here, but just
497 $$.tokens = XRESIZEVEC (struct typed_stoken,
500 p = (char *) malloc ($3.length + 1);
501 memcpy (p, $3.ptr, $3.length + 1);
503 $$.tokens[$$.len - 1].type = $3.type;
504 $$.tokens[$$.len - 1].length = $3.length;
505 $$.tokens[$$.len - 1].ptr = p;
509 exp : string_exp %prec ABOVE_COMMA
513 write_exp_string_vector (pstate, 0 /*always utf8*/,
515 for (i = 0; i < $1.len; ++i)
516 free ($1.tokens[i].ptr);
522 { write_exp_elt_opcode (pstate, OP_BOOL);
523 write_exp_elt_longcst (pstate, (LONGEST) $1);
524 write_exp_elt_opcode (pstate, OP_BOOL); }
528 { write_exp_elt_opcode (pstate, OP_BOOL);
529 write_exp_elt_longcst (pstate, (LONGEST) $1);
530 write_exp_elt_opcode (pstate, OP_BOOL); }
533 variable: name_not_typename ENTRY
534 { struct symbol *sym = $1.sym.symbol;
537 || !SYMBOL_IS_ARGUMENT (sym)
538 || !symbol_read_needs_frame (sym))
539 error (_("@entry can be used only for function "
540 "parameters, not for \"%s\""),
541 copy_name ($1.stoken));
543 write_exp_elt_opcode (pstate, OP_VAR_ENTRY_VALUE);
544 write_exp_elt_sym (pstate, sym);
545 write_exp_elt_opcode (pstate, OP_VAR_ENTRY_VALUE);
549 variable: name_not_typename
550 { struct block_symbol sym = $1.sym;
554 if (symbol_read_needs_frame (sym.symbol))
556 if (innermost_block == 0
557 || contained_in (sym.block,
559 innermost_block = sym.block;
562 write_exp_elt_opcode (pstate, OP_VAR_VALUE);
563 write_exp_elt_block (pstate, sym.block);
564 write_exp_elt_sym (pstate, sym.symbol);
565 write_exp_elt_opcode (pstate, OP_VAR_VALUE);
567 else if ($1.is_a_field_of_this)
569 /* TODO(dje): Can we get here?
570 E.g., via a mix of c++ and go? */
571 gdb_assert_not_reached ("go with `this' field");
575 struct bound_minimal_symbol msymbol;
576 char *arg = copy_name ($1.stoken);
579 lookup_bound_minimal_symbol (arg);
580 if (msymbol.minsym != NULL)
581 write_exp_msymbol (pstate, msymbol);
582 else if (!have_full_symbols ()
583 && !have_partial_symbols ())
584 error (_("No symbol table is loaded. "
585 "Use the \"file\" command."));
587 error (_("No symbol \"%s\" in current context."),
588 copy_name ($1.stoken));
594 method_exp: PACKAGENAME '.' name '.' name
600 type /* Implements (approximately): [*] type-specifier */
602 { $$ = lookup_pointer_type ($2); }
606 | STRUCT_KEYWORD name
607 { $$ = lookup_struct (copy_name ($2),
608 expression_context_block); }
611 { $$ = builtin_go_type (parse_gdbarch (pstate))
616 name : NAME { $$ = $1.stoken; }
617 | TYPENAME { $$ = $1.stoken; }
618 | NAME_OR_INT { $$ = $1.stoken; }
624 /* These would be useful if name_not_typename was useful, but it is just
625 a fake for "variable", so these cause reduce/reduce conflicts because
626 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
627 =exp) or just an exp. If name_not_typename was ever used in an lvalue
628 context where only a name could occur, this might be useful.
635 /* Take care of parsing a number (anything that starts with a digit).
636 Set yylval and return the token type; update lexptr.
637 LEN is the number of characters in it. */
639 /* FIXME: Needs some error checking for the float case. */
640 /* FIXME(dje): IWBN to use c-exp.y's parse_number if we could.
641 That will require moving the guts into a function that we both call
642 as our YYSTYPE is different than c-exp.y's */
645 parse_number (struct parser_state *par_state,
646 const char *p, int len, int parsed_float, YYSTYPE *putithere)
648 /* FIXME: Shouldn't these be unsigned? We don't deal with negative values
649 here, and we do kind of silly things like cast to unsigned. */
656 int base = input_radix;
659 /* Number of "L" suffixes encountered. */
662 /* We have found a "L" or "U" suffix. */
663 int found_suffix = 0;
666 struct type *signed_type;
667 struct type *unsigned_type;
671 const struct builtin_go_type *builtin_go_types
672 = builtin_go_type (parse_gdbarch (par_state));
674 /* Handle suffixes: 'f' for float32, 'l' for long double.
675 FIXME: This appears to be an extension -- do we want this? */
676 if (len >= 1 && tolower (p[len - 1]) == 'f')
678 putithere->typed_val_float.type
679 = builtin_go_types->builtin_float32;
682 else if (len >= 1 && tolower (p[len - 1]) == 'l')
684 putithere->typed_val_float.type
685 = parse_type (par_state)->builtin_long_double;
688 /* Default type for floating-point literals is float64. */
691 putithere->typed_val_float.type
692 = builtin_go_types->builtin_float64;
695 if (!parse_float (p, len,
696 putithere->typed_val_float.type,
697 putithere->typed_val_float.val))
702 /* Handle base-switching prefixes 0x, 0t, 0d, 0. */
746 if (c >= 'A' && c <= 'Z')
748 if (c != 'l' && c != 'u')
750 if (c >= '0' && c <= '9')
758 if (base > 10 && c >= 'a' && c <= 'f')
762 n += i = c - 'a' + 10;
775 return ERROR; /* Char not a digit */
778 return ERROR; /* Invalid digit in this base. */
780 /* Portably test for overflow (only works for nonzero values, so make
781 a second check for zero). FIXME: Can't we just make n and prevn
782 unsigned and avoid this? */
783 if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
784 unsigned_p = 1; /* Try something unsigned. */
786 /* Portably test for unsigned overflow.
787 FIXME: This check is wrong; for example it doesn't find overflow
788 on 0x123456789 when LONGEST is 32 bits. */
789 if (c != 'l' && c != 'u' && n != 0)
791 if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
792 error (_("Numeric constant too large."));
797 /* An integer constant is an int, a long, or a long long. An L
798 suffix forces it to be long; an LL suffix forces it to be long
799 long. If not forced to a larger size, it gets the first type of
800 the above that it fits in. To figure out whether it fits, we
801 shift it right and see whether anything remains. Note that we
802 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
803 operation, because many compilers will warn about such a shift
804 (which always produces a zero result). Sometimes gdbarch_int_bit
805 or gdbarch_long_bit will be that big, sometimes not. To deal with
806 the case where it is we just always shift the value more than
807 once, with fewer bits each time. */
809 un = (ULONGEST)n >> 2;
811 && (un >> (gdbarch_int_bit (parse_gdbarch (par_state)) - 2)) == 0)
814 = ((ULONGEST)1) << (gdbarch_int_bit (parse_gdbarch (par_state)) - 1);
816 /* A large decimal (not hex or octal) constant (between INT_MAX
817 and UINT_MAX) is a long or unsigned long, according to ANSI,
818 never an unsigned int, but this code treats it as unsigned
819 int. This probably should be fixed. GCC gives a warning on
822 unsigned_type = parse_type (par_state)->builtin_unsigned_int;
823 signed_type = parse_type (par_state)->builtin_int;
826 && (un >> (gdbarch_long_bit (parse_gdbarch (par_state)) - 2)) == 0)
829 = ((ULONGEST)1) << (gdbarch_long_bit (parse_gdbarch (par_state)) - 1);
830 unsigned_type = parse_type (par_state)->builtin_unsigned_long;
831 signed_type = parse_type (par_state)->builtin_long;
836 if (sizeof (ULONGEST) * HOST_CHAR_BIT
837 < gdbarch_long_long_bit (parse_gdbarch (par_state)))
838 /* A long long does not fit in a LONGEST. */
839 shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
841 shift = (gdbarch_long_long_bit (parse_gdbarch (par_state)) - 1);
842 high_bit = (ULONGEST) 1 << shift;
843 unsigned_type = parse_type (par_state)->builtin_unsigned_long_long;
844 signed_type = parse_type (par_state)->builtin_long_long;
847 putithere->typed_val_int.val = n;
849 /* If the high bit of the worked out type is set then this number
850 has to be unsigned. */
852 if (unsigned_p || (n & high_bit))
854 putithere->typed_val_int.type = unsigned_type;
858 putithere->typed_val_int.type = signed_type;
864 /* Temporary obstack used for holding strings. */
865 static struct obstack tempbuf;
866 static int tempbuf_init;
868 /* Parse a string or character literal from TOKPTR. The string or
869 character may be wide or unicode. *OUTPTR is set to just after the
870 end of the literal in the input string. The resulting token is
871 stored in VALUE. This returns a token value, either STRING or
872 CHAR, depending on what was parsed. *HOST_CHARS is set to the
873 number of host characters in the literal. */
876 parse_string_or_char (const char *tokptr, const char **outptr,
877 struct typed_stoken *value, int *host_chars)
881 /* Build the gdb internal form of the input string in tempbuf. Note
882 that the buffer is null byte terminated *only* for the
883 convenience of debugging gdb itself and printing the buffer
884 contents when the buffer contains no embedded nulls. Gdb does
885 not depend upon the buffer being null byte terminated, it uses
886 the length string instead. This allows gdb to handle C strings
887 (as well as strings in other languages) with embedded null
893 obstack_free (&tempbuf, NULL);
894 obstack_init (&tempbuf);
896 /* Skip the quote. */
908 *host_chars += c_parse_escape (&tokptr, &tempbuf);
914 obstack_1grow (&tempbuf, c);
916 /* FIXME: this does the wrong thing with multi-byte host
917 characters. We could use mbrlen here, but that would
918 make "set host-charset" a bit less useful. */
923 if (*tokptr != quote)
926 error (_("Unterminated string in expression."));
928 error (_("Unmatched single quote."));
932 value->type = C_STRING | (quote == '\'' ? C_CHAR : 0); /*FIXME*/
933 value->ptr = (char *) obstack_base (&tempbuf);
934 value->length = obstack_object_size (&tempbuf);
938 return quote == '\'' ? CHAR : STRING;
945 enum exp_opcode opcode;
948 static const struct token tokentab3[] =
950 {">>=", ASSIGN_MODIFY, BINOP_RSH},
951 {"<<=", ASSIGN_MODIFY, BINOP_LSH},
952 /*{"&^=", ASSIGN_MODIFY, BINOP_BITWISE_ANDNOT}, TODO */
953 {"...", DOTDOTDOT, OP_NULL},
956 static const struct token tokentab2[] =
958 {"+=", ASSIGN_MODIFY, BINOP_ADD},
959 {"-=", ASSIGN_MODIFY, BINOP_SUB},
960 {"*=", ASSIGN_MODIFY, BINOP_MUL},
961 {"/=", ASSIGN_MODIFY, BINOP_DIV},
962 {"%=", ASSIGN_MODIFY, BINOP_REM},
963 {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR},
964 {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND},
965 {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR},
966 {"++", INCREMENT, BINOP_END},
967 {"--", DECREMENT, BINOP_END},
968 /*{"->", RIGHT_ARROW, BINOP_END}, Doesn't exist in Go. */
969 {"<-", LEFT_ARROW, BINOP_END},
970 {"&&", ANDAND, BINOP_END},
971 {"||", OROR, BINOP_END},
972 {"<<", LSH, BINOP_END},
973 {">>", RSH, BINOP_END},
974 {"==", EQUAL, BINOP_END},
975 {"!=", NOTEQUAL, BINOP_END},
976 {"<=", LEQ, BINOP_END},
977 {">=", GEQ, BINOP_END},
978 /*{"&^", ANDNOT, BINOP_END}, TODO */
981 /* Identifier-like tokens. */
982 static const struct token ident_tokens[] =
984 {"true", TRUE_KEYWORD, OP_NULL},
985 {"false", FALSE_KEYWORD, OP_NULL},
986 {"nil", NIL_KEYWORD, OP_NULL},
987 {"const", CONST_KEYWORD, OP_NULL},
988 {"struct", STRUCT_KEYWORD, OP_NULL},
989 {"type", TYPE_KEYWORD, OP_NULL},
990 {"interface", INTERFACE_KEYWORD, OP_NULL},
991 {"chan", CHAN_KEYWORD, OP_NULL},
992 {"byte", BYTE_KEYWORD, OP_NULL}, /* An alias of uint8. */
993 {"len", LEN_KEYWORD, OP_NULL},
994 {"cap", CAP_KEYWORD, OP_NULL},
995 {"new", NEW_KEYWORD, OP_NULL},
996 {"iota", IOTA_KEYWORD, OP_NULL},
999 /* This is set if a NAME token appeared at the very end of the input
1000 string, with no whitespace separating the name from the EOF. This
1001 is used only when parsing to do field name completion. */
1002 static int saw_name_at_eof;
1004 /* This is set if the previously-returned token was a structure
1005 operator -- either '.' or ARROW. This is used only when parsing to
1006 do field name completion. */
1007 static int last_was_structop;
1009 /* Read one token, getting characters through lexptr. */
1012 lex_one_token (struct parser_state *par_state)
1017 const char *tokstart;
1018 int saw_structop = last_was_structop;
1021 last_was_structop = 0;
1025 prev_lexptr = lexptr;
1028 /* See if it is a special token of length 3. */
1029 for (i = 0; i < sizeof (tokentab3) / sizeof (tokentab3[0]); i++)
1030 if (strncmp (tokstart, tokentab3[i].oper, 3) == 0)
1033 yylval.opcode = tokentab3[i].opcode;
1034 return tokentab3[i].token;
1037 /* See if it is a special token of length 2. */
1038 for (i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++)
1039 if (strncmp (tokstart, tokentab2[i].oper, 2) == 0)
1042 yylval.opcode = tokentab2[i].opcode;
1043 /* NOTE: -> doesn't exist in Go, so we don't need to watch for
1044 setting last_was_structop here. */
1045 return tokentab2[i].token;
1048 switch (c = *tokstart)
1051 if (saw_name_at_eof)
1053 saw_name_at_eof = 0;
1056 else if (saw_structop)
1075 if (paren_depth == 0)
1082 if (comma_terminates
1083 && paren_depth == 0)
1089 /* Might be a floating point number. */
1090 if (lexptr[1] < '0' || lexptr[1] > '9')
1092 if (parse_completion)
1093 last_was_structop = 1;
1094 goto symbol; /* Nope, must be a symbol. */
1096 /* FALL THRU into number case. */
1109 /* It's a number. */
1110 int got_dot = 0, got_e = 0, toktype;
1111 const char *p = tokstart;
1112 int hex = input_radix > 10;
1114 if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
1122 /* This test includes !hex because 'e' is a valid hex digit
1123 and thus does not indicate a floating point number when
1124 the radix is hex. */
1125 if (!hex && !got_e && (*p == 'e' || *p == 'E'))
1126 got_dot = got_e = 1;
1127 /* This test does not include !hex, because a '.' always indicates
1128 a decimal floating point number regardless of the radix. */
1129 else if (!got_dot && *p == '.')
1131 else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
1132 && (*p == '-' || *p == '+'))
1133 /* This is the sign of the exponent, not the end of the
1136 /* We will take any letters or digits. parse_number will
1137 complain if past the radix, or if L or U are not final. */
1138 else if ((*p < '0' || *p > '9')
1139 && ((*p < 'a' || *p > 'z')
1140 && (*p < 'A' || *p > 'Z')))
1143 toktype = parse_number (par_state, tokstart, p - tokstart,
1144 got_dot|got_e, &yylval);
1145 if (toktype == ERROR)
1147 char *err_copy = (char *) alloca (p - tokstart + 1);
1149 memcpy (err_copy, tokstart, p - tokstart);
1150 err_copy[p - tokstart] = 0;
1151 error (_("Invalid number \"%s\"."), err_copy);
1159 const char *p = &tokstart[1];
1160 size_t len = strlen ("entry");
1162 while (isspace (*p))
1164 if (strncmp (p, "entry", len) == 0 && !isalnum (p[len])
1198 int result = parse_string_or_char (tokstart, &lexptr, &yylval.tsval,
1203 error (_("Empty character constant."));
1204 else if (host_len > 2 && c == '\'')
1207 namelen = lexptr - tokstart - 1;
1210 else if (host_len > 1)
1211 error (_("Invalid character constant."));
1217 if (!(c == '_' || c == '$'
1218 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
1219 /* We must have come across a bad character (e.g. ';'). */
1220 error (_("Invalid character '%c' in expression."), c);
1222 /* It's a name. See how long it is. */
1224 for (c = tokstart[namelen];
1225 (c == '_' || c == '$' || (c >= '0' && c <= '9')
1226 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));)
1228 c = tokstart[++namelen];
1231 /* The token "if" terminates the expression and is NOT removed from
1232 the input stream. It doesn't count if it appears in the
1233 expansion of a macro. */
1235 && tokstart[0] == 'i'
1236 && tokstart[1] == 'f')
1241 /* For the same reason (breakpoint conditions), "thread N"
1242 terminates the expression. "thread" could be an identifier, but
1243 an identifier is never followed by a number without intervening
1245 Handle abbreviations of these, similarly to
1246 breakpoint.c:find_condition_and_thread.
1247 TODO: Watch for "goroutine" here? */
1249 && strncmp (tokstart, "thread", namelen) == 0
1250 && (tokstart[namelen] == ' ' || tokstart[namelen] == '\t'))
1252 const char *p = tokstart + namelen + 1;
1254 while (*p == ' ' || *p == '\t')
1256 if (*p >= '0' && *p <= '9')
1264 yylval.sval.ptr = tokstart;
1265 yylval.sval.length = namelen;
1267 /* Catch specific keywords. */
1268 copy = copy_name (yylval.sval);
1269 for (i = 0; i < sizeof (ident_tokens) / sizeof (ident_tokens[0]); i++)
1270 if (strcmp (copy, ident_tokens[i].oper) == 0)
1272 /* It is ok to always set this, even though we don't always
1273 strictly need to. */
1274 yylval.opcode = ident_tokens[i].opcode;
1275 return ident_tokens[i].token;
1278 if (*tokstart == '$')
1279 return DOLLAR_VARIABLE;
1281 if (parse_completion && *lexptr == '\0')
1282 saw_name_at_eof = 1;
1286 /* An object of this type is pushed on a FIFO by the "outer" lexer. */
1293 DEF_VEC_O (token_and_value);
1295 /* A FIFO of tokens that have been read but not yet returned to the
1297 static VEC (token_and_value) *token_fifo;
1299 /* Non-zero if the lexer should return tokens from the FIFO. */
1302 /* Temporary storage for yylex; this holds symbol names as they are
1304 static auto_obstack name_obstack;
1306 /* Build "package.name" in name_obstack.
1307 For convenience of the caller, the name is NUL-terminated,
1308 but the NUL is not included in the recorded length. */
1310 static struct stoken
1311 build_packaged_name (const char *package, int package_len,
1312 const char *name, int name_len)
1314 struct stoken result;
1316 name_obstack.clear ();
1317 obstack_grow (&name_obstack, package, package_len);
1318 obstack_grow_str (&name_obstack, ".");
1319 obstack_grow (&name_obstack, name, name_len);
1320 obstack_grow (&name_obstack, "", 1);
1321 result.ptr = (char *) obstack_base (&name_obstack);
1322 result.length = obstack_object_size (&name_obstack) - 1;
1327 /* Return non-zero if NAME is a package name.
1328 BLOCK is the scope in which to interpret NAME; this can be NULL
1329 to mean the global scope. */
1332 package_name_p (const char *name, const struct block *block)
1335 struct field_of_this_result is_a_field_of_this;
1337 sym = lookup_symbol (name, block, STRUCT_DOMAIN, &is_a_field_of_this).symbol;
1340 && SYMBOL_CLASS (sym) == LOC_TYPEDEF
1341 && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_MODULE)
1347 /* Classify a (potential) function in the "unsafe" package.
1348 We fold these into "keywords" to keep things simple, at least until
1349 something more complex is warranted. */
1352 classify_unsafe_function (struct stoken function_name)
1354 char *copy = copy_name (function_name);
1356 if (strcmp (copy, "Sizeof") == 0)
1358 yylval.sval = function_name;
1359 return SIZEOF_KEYWORD;
1362 error (_("Unknown function in `unsafe' package: %s"), copy);
1365 /* Classify token(s) "name1.name2" where name1 is known to be a package.
1366 The contents of the token are in `yylval'.
1367 Updates yylval and returns the new token type.
1369 The result is one of NAME, NAME_OR_INT, or TYPENAME. */
1372 classify_packaged_name (const struct block *block)
1375 struct block_symbol sym;
1376 struct field_of_this_result is_a_field_of_this;
1378 copy = copy_name (yylval.sval);
1380 sym = lookup_symbol (copy, block, VAR_DOMAIN, &is_a_field_of_this);
1384 yylval.ssym.sym = sym;
1385 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1391 /* Classify a NAME token.
1392 The contents of the token are in `yylval'.
1393 Updates yylval and returns the new token type.
1394 BLOCK is the block in which lookups start; this can be NULL
1395 to mean the global scope.
1397 The result is one of NAME, NAME_OR_INT, or TYPENAME. */
1400 classify_name (struct parser_state *par_state, const struct block *block)
1403 struct block_symbol sym;
1405 struct field_of_this_result is_a_field_of_this;
1407 copy = copy_name (yylval.sval);
1409 /* Try primitive types first so they win over bad/weird debug info. */
1410 type = language_lookup_primitive_type (parse_language (par_state),
1411 parse_gdbarch (par_state),
1415 /* NOTE: We take advantage of the fact that yylval coming in was a
1416 NAME, and that struct ttype is a compatible extension of struct
1417 stoken, so yylval.tsym.stoken is already filled in. */
1418 yylval.tsym.type = type;
1422 /* TODO: What about other types? */
1424 sym = lookup_symbol (copy, block, VAR_DOMAIN, &is_a_field_of_this);
1428 yylval.ssym.sym = sym;
1429 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1433 /* If we didn't find a symbol, look again in the current package.
1434 This is to, e.g., make "p global_var" work without having to specify
1435 the package name. We intentionally only looks for objects in the
1439 char *current_package_name = go_block_package_name (block);
1441 if (current_package_name != NULL)
1443 struct stoken sval =
1444 build_packaged_name (current_package_name,
1445 strlen (current_package_name),
1446 copy, strlen (copy));
1448 xfree (current_package_name);
1449 sym = lookup_symbol (sval.ptr, block, VAR_DOMAIN,
1450 &is_a_field_of_this);
1453 yylval.ssym.stoken = sval;
1454 yylval.ssym.sym = sym;
1455 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1461 /* Input names that aren't symbols but ARE valid hex numbers, when
1462 the input radix permits them, can be names or numbers depending
1463 on the parse. Note we support radixes > 16 here. */
1464 if ((copy[0] >= 'a' && copy[0] < 'a' + input_radix - 10)
1465 || (copy[0] >= 'A' && copy[0] < 'A' + input_radix - 10))
1467 YYSTYPE newlval; /* Its value is ignored. */
1468 int hextype = parse_number (par_state, copy, yylval.sval.length,
1472 yylval.ssym.sym.symbol = NULL;
1473 yylval.ssym.sym.block = NULL;
1474 yylval.ssym.is_a_field_of_this = 0;
1479 yylval.ssym.sym.symbol = NULL;
1480 yylval.ssym.sym.block = NULL;
1481 yylval.ssym.is_a_field_of_this = 0;
1485 /* This is taken from c-exp.y mostly to get something working.
1486 The basic structure has been kept because we may yet need some of it. */
1491 token_and_value current, next;
1493 if (popping && !VEC_empty (token_and_value, token_fifo))
1495 token_and_value tv = *VEC_index (token_and_value, token_fifo, 0);
1496 VEC_ordered_remove (token_and_value, token_fifo, 0);
1498 /* There's no need to fall through to handle package.name
1499 as that can never happen here. In theory. */
1504 current.token = lex_one_token (pstate);
1506 /* TODO: Need a way to force specifying name1 as a package.
1509 if (current.token != NAME)
1510 return current.token;
1512 /* See if we have "name1 . name2". */
1514 current.value = yylval;
1515 next.token = lex_one_token (pstate);
1516 next.value = yylval;
1518 if (next.token == '.')
1520 token_and_value name2;
1522 name2.token = lex_one_token (pstate);
1523 name2.value = yylval;
1525 if (name2.token == NAME)
1527 /* Ok, we have "name1 . name2". */
1530 copy = copy_name (current.value.sval);
1532 if (strcmp (copy, "unsafe") == 0)
1535 return classify_unsafe_function (name2.value.sval);
1538 if (package_name_p (copy, expression_context_block))
1541 yylval.sval = build_packaged_name (current.value.sval.ptr,
1542 current.value.sval.length,
1543 name2.value.sval.ptr,
1544 name2.value.sval.length);
1545 return classify_packaged_name (expression_context_block);
1549 VEC_safe_push (token_and_value, token_fifo, &next);
1550 VEC_safe_push (token_and_value, token_fifo, &name2);
1554 VEC_safe_push (token_and_value, token_fifo, &next);
1557 /* If we arrive here we don't have a package-qualified name. */
1560 yylval = current.value;
1561 return classify_name (pstate, expression_context_block);
1565 go_parse (struct parser_state *par_state)
1567 /* Setting up the parser state. */
1568 scoped_restore pstate_restore = make_scoped_restore (&pstate);
1569 gdb_assert (par_state != NULL);
1572 scoped_restore restore_yydebug = make_scoped_restore (&yydebug,
1575 /* Initialize some state used by the lexer. */
1576 last_was_structop = 0;
1577 saw_name_at_eof = 0;
1579 VEC_free (token_and_value, token_fifo);
1581 name_obstack.clear ();
1587 yyerror (const char *msg)
1590 lexptr = prev_lexptr;
1592 error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr);