1 /* Parse C expressions for GDB.
2 Copyright (C) 1986, 1989, 1990, 1991 Free Software Foundation, Inc.
4 This file is part of GDB.
6 GDB is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 1, or (at your option)
11 GDB is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GDB; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
20 /* Parse a C expression from text in a string,
21 and return the result as a struct expression pointer.
22 That structure contains arithmetic operations in reverse polish,
23 with constants represented by operations that are followed by special data.
24 See expression.h for the details of the format.
25 What is important here is that it can be built up sequentially
26 during the process of parsing; the lower levels of the tree always
27 come first in the result. */
35 #include "expression.h"
39 static struct expression *expout;
40 static int expout_size;
41 static int expout_ptr;
44 static void yyerror ();
45 static void write_exp_elt ();
46 static void write_exp_elt_opcode ();
47 static void write_exp_elt_sym ();
48 static void write_exp_elt_longcst ();
49 static void write_exp_elt_dblcst ();
50 static void write_exp_elt_type ();
51 static void write_exp_elt_intern ();
52 static void write_exp_string ();
53 static void start_arglist ();
54 static int end_arglist ();
55 static void free_funcalls ();
56 static char *copy_name ();
57 static int parse_number ();
59 /* If this is nonzero, this block is used as the lexical context
62 static struct block *expression_context_block;
64 /* The innermost context required by the stack and register variables
65 we've encountered so far. */
66 struct block *innermost_block;
68 /* The block in which the most recently discovered symbol was found. */
69 struct block *block_found;
71 /* Number of arguments seen so far in innermost function call. */
72 static int arglist_len;
74 /* Data structure for saving values of arglist_len
75 for function calls whose arguments contain other function calls. */
83 struct funcall *funcall_chain;
85 /* This kind of datum is used to represent the name
102 struct stoken stoken;
104 int is_a_field_of_this;
107 /* For parsing of complicated types.
108 An array should be preceded in the list by the size of the array. */
110 {tp_end = -1, tp_pointer, tp_reference, tp_array, tp_function};
111 static enum type_pieces *type_stack;
112 static int type_stack_depth, type_stack_size;
114 static void push_type ();
115 static enum type_pieces pop_type ();
117 /* Allow debugging of parsing. */
121 /* Although the yacc "value" of an expression is not used,
122 since the result is stored in the structure being created,
123 other node types do have values. */
128 unsigned LONGEST ulval;
134 struct symtoken ssym;
137 enum exp_opcode opcode;
138 struct internalvar *ivar;
144 %type <voidval> exp exp1 start variable
145 %type <tval> type typebase
146 %type <tvec> nonempty_typelist
149 /* Fancy type parsing. */
150 %type <voidval> func_mod direct_abs_decl abs_decl
152 %type <lval> array_mod
154 %token <lval> INT CHAR
158 /* Both NAME and TYPENAME tokens represent symbols in the input,
159 and both convey their data as strings.
160 But a TYPENAME is a string that happens to be defined as a typedef
161 or builtin type name (such as int or char)
162 and a NAME is any other symbol.
164 Contexts where this distinction is not important can use the
165 nonterminal "name", which matches either NAME or TYPENAME. */
168 %token <ssym> NAME BLOCKNAME
169 %token <tsym> TYPENAME
171 %type <ssym> name_not_typename
172 %type <tsym> typename
174 /* A NAME_OR_INT is a symbol which is not known in the symbol table,
175 but which would parse as a valid number in the current input radix.
176 E.g. "c" when input_radix==16. Depending on the parse, it will be
177 turned into a name or into a number. NAME_OR_UINT ditto. */
179 %token <ssym> NAME_OR_INT NAME_OR_UINT
181 %token STRUCT UNION ENUM SIZEOF UNSIGNED COLONCOLON
184 /* Special type cases, put in to allow the parser to distinguish different
186 %token SIGNED LONG SHORT INT_KEYWORD
188 %token <lval> LAST REGNAME
190 %token <ivar> VARIABLE
192 %token <opcode> ASSIGN_MODIFY
199 %right '=' ASSIGN_MODIFY
207 %left '<' '>' LEQ GEQ
212 %right UNARY INCREMENT DECREMENT
213 %right ARROW '.' '[' '('
221 /* Expressions, including the comma operator. */
224 { write_exp_elt_opcode (BINOP_COMMA); }
227 /* Expressions, not including the comma operator. */
228 exp : '*' exp %prec UNARY
229 { write_exp_elt_opcode (UNOP_IND); }
231 exp : '&' exp %prec UNARY
232 { write_exp_elt_opcode (UNOP_ADDR); }
234 exp : '-' exp %prec UNARY
235 { write_exp_elt_opcode (UNOP_NEG); }
238 exp : '!' exp %prec UNARY
239 { write_exp_elt_opcode (UNOP_ZEROP); }
242 exp : '~' exp %prec UNARY
243 { write_exp_elt_opcode (UNOP_LOGNOT); }
246 exp : INCREMENT exp %prec UNARY
247 { write_exp_elt_opcode (UNOP_PREINCREMENT); }
250 exp : DECREMENT exp %prec UNARY
251 { write_exp_elt_opcode (UNOP_PREDECREMENT); }
254 exp : exp INCREMENT %prec UNARY
255 { write_exp_elt_opcode (UNOP_POSTINCREMENT); }
258 exp : exp DECREMENT %prec UNARY
259 { write_exp_elt_opcode (UNOP_POSTDECREMENT); }
262 exp : SIZEOF exp %prec UNARY
263 { write_exp_elt_opcode (UNOP_SIZEOF); }
267 { write_exp_elt_opcode (STRUCTOP_PTR);
268 write_exp_string ($3);
269 write_exp_elt_opcode (STRUCTOP_PTR); }
272 exp : exp ARROW '*' exp
273 { write_exp_elt_opcode (STRUCTOP_MPTR); }
277 { write_exp_elt_opcode (STRUCTOP_STRUCT);
278 write_exp_string ($3);
279 write_exp_elt_opcode (STRUCTOP_STRUCT); }
282 exp : exp '.' '*' exp
283 { write_exp_elt_opcode (STRUCTOP_MEMBER); }
286 exp : exp '[' exp1 ']'
287 { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
291 /* This is to save the value of arglist_len
292 being accumulated by an outer function call. */
293 { start_arglist (); }
294 arglist ')' %prec ARROW
295 { write_exp_elt_opcode (OP_FUNCALL);
296 write_exp_elt_longcst ((LONGEST) end_arglist ());
297 write_exp_elt_opcode (OP_FUNCALL); }
307 arglist : arglist ',' exp %prec ABOVE_COMMA
311 exp : '{' type '}' exp %prec UNARY
312 { write_exp_elt_opcode (UNOP_MEMVAL);
313 write_exp_elt_type ($2);
314 write_exp_elt_opcode (UNOP_MEMVAL); }
317 exp : '(' type ')' exp %prec UNARY
318 { write_exp_elt_opcode (UNOP_CAST);
319 write_exp_elt_type ($2);
320 write_exp_elt_opcode (UNOP_CAST); }
327 /* Binary operators in order of decreasing precedence. */
330 { write_exp_elt_opcode (BINOP_REPEAT); }
334 { write_exp_elt_opcode (BINOP_MUL); }
338 { write_exp_elt_opcode (BINOP_DIV); }
342 { write_exp_elt_opcode (BINOP_REM); }
346 { write_exp_elt_opcode (BINOP_ADD); }
350 { write_exp_elt_opcode (BINOP_SUB); }
354 { write_exp_elt_opcode (BINOP_LSH); }
358 { write_exp_elt_opcode (BINOP_RSH); }
362 { write_exp_elt_opcode (BINOP_EQUAL); }
365 exp : exp NOTEQUAL exp
366 { write_exp_elt_opcode (BINOP_NOTEQUAL); }
370 { write_exp_elt_opcode (BINOP_LEQ); }
374 { write_exp_elt_opcode (BINOP_GEQ); }
378 { write_exp_elt_opcode (BINOP_LESS); }
382 { write_exp_elt_opcode (BINOP_GTR); }
386 { write_exp_elt_opcode (BINOP_LOGAND); }
390 { write_exp_elt_opcode (BINOP_LOGXOR); }
394 { write_exp_elt_opcode (BINOP_LOGIOR); }
398 { write_exp_elt_opcode (BINOP_AND); }
402 { write_exp_elt_opcode (BINOP_OR); }
405 exp : exp '?' exp ':' exp %prec '?'
406 { write_exp_elt_opcode (TERNOP_COND); }
410 { write_exp_elt_opcode (BINOP_ASSIGN); }
413 exp : exp ASSIGN_MODIFY exp
414 { write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
415 write_exp_elt_opcode ($2);
416 write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); }
420 { write_exp_elt_opcode (OP_LONG);
421 if ($1 == (int) $1 || $1 == (unsigned int) $1)
422 write_exp_elt_type (builtin_type_int);
424 write_exp_elt_type (BUILTIN_TYPE_LONGEST);
425 write_exp_elt_longcst ((LONGEST) $1);
426 write_exp_elt_opcode (OP_LONG); }
431 parse_number ($1.stoken.ptr, $1.stoken.length, 0, &val);
432 write_exp_elt_opcode (OP_LONG);
433 if (val.lval == (int) val.lval ||
434 val.lval == (unsigned int) val.lval)
435 write_exp_elt_type (builtin_type_int);
437 write_exp_elt_type (BUILTIN_TYPE_LONGEST);
438 write_exp_elt_longcst (val.lval);
439 write_exp_elt_opcode (OP_LONG); }
444 write_exp_elt_opcode (OP_LONG);
445 if ($1 == (unsigned int) $1)
446 write_exp_elt_type (builtin_type_unsigned_int);
448 write_exp_elt_type (BUILTIN_TYPE_UNSIGNED_LONGEST);
449 write_exp_elt_longcst ((LONGEST) $1);
450 write_exp_elt_opcode (OP_LONG);
456 parse_number ($1.stoken.ptr, $1.stoken.length, 0, &val);
457 write_exp_elt_opcode (OP_LONG);
458 if (val.ulval == (unsigned int) val.ulval)
459 write_exp_elt_type (builtin_type_unsigned_int);
461 write_exp_elt_type (BUILTIN_TYPE_UNSIGNED_LONGEST);
462 write_exp_elt_longcst ((LONGEST)val.ulval);
463 write_exp_elt_opcode (OP_LONG);
468 { write_exp_elt_opcode (OP_LONG);
469 write_exp_elt_type (builtin_type_char);
470 write_exp_elt_longcst ((LONGEST) $1);
471 write_exp_elt_opcode (OP_LONG); }
475 { write_exp_elt_opcode (OP_DOUBLE);
476 write_exp_elt_type (builtin_type_double);
477 write_exp_elt_dblcst ($1);
478 write_exp_elt_opcode (OP_DOUBLE); }
485 { write_exp_elt_opcode (OP_LAST);
486 write_exp_elt_longcst ((LONGEST) $1);
487 write_exp_elt_opcode (OP_LAST); }
491 { write_exp_elt_opcode (OP_REGISTER);
492 write_exp_elt_longcst ((LONGEST) $1);
493 write_exp_elt_opcode (OP_REGISTER); }
497 { write_exp_elt_opcode (OP_INTERNALVAR);
498 write_exp_elt_intern ($1);
499 write_exp_elt_opcode (OP_INTERNALVAR); }
502 exp : SIZEOF '(' type ')' %prec UNARY
503 { write_exp_elt_opcode (OP_LONG);
504 write_exp_elt_type (builtin_type_int);
505 write_exp_elt_longcst ((LONGEST) TYPE_LENGTH ($3));
506 write_exp_elt_opcode (OP_LONG); }
510 { write_exp_elt_opcode (OP_STRING);
511 write_exp_string ($1);
512 write_exp_elt_opcode (OP_STRING); }
517 { write_exp_elt_opcode (OP_THIS);
518 write_exp_elt_opcode (OP_THIS); }
526 $$ = SYMBOL_BLOCK_VALUE ($1.sym);
530 lookup_symtab (copy_name ($1.stoken));
532 $$ = BLOCKVECTOR_BLOCK
533 (BLOCKVECTOR (tem), STATIC_BLOCK);
535 error ("No file or function \"%s\".",
536 copy_name ($1.stoken));
541 block : block COLONCOLON name
543 = lookup_symbol (copy_name ($3), $1,
544 VAR_NAMESPACE, 0, NULL);
545 if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
546 error ("No function \"%s\" in specified context.",
548 $$ = SYMBOL_BLOCK_VALUE (tem); }
551 variable: block COLONCOLON name
552 { struct symbol *sym;
553 sym = lookup_symbol (copy_name ($3), $1,
554 VAR_NAMESPACE, 0, NULL);
556 error ("No symbol \"%s\" in specified context.",
558 write_exp_elt_opcode (OP_VAR_VALUE);
559 write_exp_elt_sym (sym);
560 write_exp_elt_opcode (OP_VAR_VALUE); }
563 variable: typebase COLONCOLON name
565 struct type *type = $1;
566 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
567 && TYPE_CODE (type) != TYPE_CODE_UNION)
568 error ("`%s' is not defined as an aggregate type.",
571 write_exp_elt_opcode (OP_SCOPE);
572 write_exp_elt_type (type);
573 write_exp_string ($3);
574 write_exp_elt_opcode (OP_SCOPE);
576 | typebase COLONCOLON '~' name
578 struct type *type = $1;
579 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
580 && TYPE_CODE (type) != TYPE_CODE_UNION)
581 error ("`%s' is not defined as an aggregate type.",
584 if (strcmp (type_name_no_tag (type), $4.ptr))
585 error ("invalid destructor `%s::~%s'",
586 type_name_no_tag (type), $4.ptr);
588 write_exp_elt_opcode (OP_SCOPE);
589 write_exp_elt_type (type);
590 write_exp_string ($4);
591 write_exp_elt_opcode (OP_SCOPE);
592 write_exp_elt_opcode (UNOP_LOGNOT);
596 char *name = copy_name ($2);
601 lookup_symbol (name, 0, VAR_NAMESPACE, 0, NULL);
604 write_exp_elt_opcode (OP_VAR_VALUE);
605 write_exp_elt_sym (sym);
606 write_exp_elt_opcode (OP_VAR_VALUE);
609 for (i = 0; i < misc_function_count; i++)
610 if (!strcmp (misc_function_vector[i].name, name))
613 if (i < misc_function_count)
615 enum misc_function_type mft =
616 misc_function_vector[i].type;
618 write_exp_elt_opcode (OP_LONG);
619 write_exp_elt_type (builtin_type_int);
620 write_exp_elt_longcst ((LONGEST) misc_function_vector[i].address);
621 write_exp_elt_opcode (OP_LONG);
622 write_exp_elt_opcode (UNOP_MEMVAL);
623 if (mft == mf_data || mft == mf_bss)
624 write_exp_elt_type (builtin_type_int);
625 else if (mft == mf_text)
626 write_exp_elt_type (lookup_function_type (builtin_type_int));
628 write_exp_elt_type (builtin_type_char);
629 write_exp_elt_opcode (UNOP_MEMVAL);
633 && partial_symtab_list == 0)
634 error ("No symbol table is loaded. Use the \"file\" command.");
636 error ("No symbol \"%s\" in current context.", name);
640 variable: name_not_typename
641 { struct symbol *sym = $1.sym;
651 if (innermost_block == 0 ||
652 contained_in (block_found,
654 innermost_block = block_found;
656 write_exp_elt_opcode (OP_VAR_VALUE);
657 write_exp_elt_sym (sym);
658 write_exp_elt_opcode (OP_VAR_VALUE);
660 else if ($1.is_a_field_of_this)
662 /* C++: it hangs off of `this'. Must
663 not inadvertently convert from a method call
665 if (innermost_block == 0 ||
666 contained_in (block_found, innermost_block))
667 innermost_block = block_found;
668 write_exp_elt_opcode (OP_THIS);
669 write_exp_elt_opcode (OP_THIS);
670 write_exp_elt_opcode (STRUCTOP_PTR);
671 write_exp_string ($1.stoken);
672 write_exp_elt_opcode (STRUCTOP_PTR);
677 register char *arg = copy_name ($1.stoken);
679 /* FIXME, this search is linear! At least
680 optimize the strcmp with a 1-char cmp... */
681 for (i = 0; i < misc_function_count; i++)
682 if (!strcmp (misc_function_vector[i].name, arg))
685 if (i < misc_function_count)
687 enum misc_function_type mft =
688 misc_function_vector[i].type;
690 write_exp_elt_opcode (OP_LONG);
691 write_exp_elt_type (builtin_type_int);
692 write_exp_elt_longcst ((LONGEST) misc_function_vector[i].address);
693 write_exp_elt_opcode (OP_LONG);
694 write_exp_elt_opcode (UNOP_MEMVAL);
695 if (mft == mf_data || mft == mf_bss)
696 write_exp_elt_type (builtin_type_int);
697 else if (mft == mf_text)
698 write_exp_elt_type (lookup_function_type (builtin_type_int));
700 write_exp_elt_type (builtin_type_char);
701 write_exp_elt_opcode (UNOP_MEMVAL);
703 else if (symtab_list == 0
704 && partial_symtab_list == 0)
705 error ("No symbol table is loaded. Use the \"file\" command.");
707 error ("No symbol \"%s\" in current context.",
708 copy_name ($1.stoken));
717 /* This is where the interesting stuff happens. */
720 struct type *follow_type = $1;
729 follow_type = lookup_pointer_type (follow_type);
732 follow_type = lookup_reference_type (follow_type);
735 array_size = (int) pop_type ();
736 if (array_size != -1)
737 follow_type = create_array_type (follow_type,
740 follow_type = lookup_pointer_type (follow_type);
743 follow_type = lookup_function_type (follow_type);
751 { push_type (tp_pointer); $$ = 0; }
753 { push_type (tp_pointer); $$ = $2; }
755 { push_type (tp_reference); $$ = 0; }
757 { push_type (tp_reference); $$ = $2; }
761 direct_abs_decl: '(' abs_decl ')'
763 | direct_abs_decl array_mod
765 push_type ((enum type_pieces) $2);
766 push_type (tp_array);
770 push_type ((enum type_pieces) $1);
771 push_type (tp_array);
774 | direct_abs_decl func_mod
775 { push_type (tp_function); }
777 { push_type (tp_function); }
791 | typebase COLONCOLON '*'
792 { $$ = lookup_member_type (builtin_type_int, $1); }
793 | type '(' typebase COLONCOLON '*' ')'
794 { $$ = lookup_member_type ($1, $3); }
795 | type '(' typebase COLONCOLON '*' ')' '(' ')'
796 { $$ = lookup_member_type
797 (lookup_function_type ($1), $3); }
798 | type '(' typebase COLONCOLON '*' ')' '(' nonempty_typelist ')'
799 { $$ = lookup_member_type
800 (lookup_function_type ($1), $3);
808 { $$ = builtin_type_int; }
810 { $$ = builtin_type_long; }
812 { $$ = builtin_type_short; }
814 { $$ = builtin_type_long; }
815 | UNSIGNED LONG INT_KEYWORD
816 { $$ = builtin_type_unsigned_long; }
818 { $$ = builtin_type_long_long; }
819 | LONG LONG INT_KEYWORD
820 { $$ = builtin_type_long_long; }
822 { $$ = builtin_type_unsigned_long_long; }
823 | UNSIGNED LONG LONG INT_KEYWORD
824 { $$ = builtin_type_unsigned_long_long; }
826 { $$ = builtin_type_short; }
827 | UNSIGNED SHORT INT_KEYWORD
828 { $$ = builtin_type_unsigned_short; }
830 { $$ = lookup_struct (copy_name ($2),
831 expression_context_block); }
833 { $$ = lookup_union (copy_name ($2),
834 expression_context_block); }
836 { $$ = lookup_enum (copy_name ($2),
837 expression_context_block); }
839 { $$ = lookup_unsigned_typename (TYPE_NAME($2.type)); }
841 { $$ = builtin_type_unsigned_int; }
845 { $$ = builtin_type_int; }
851 $$.stoken.ptr = "int";
852 $$.stoken.length = 3;
853 $$.type = builtin_type_int;
857 $$.stoken.ptr = "long";
858 $$.stoken.length = 4;
859 $$.type = builtin_type_long;
863 $$.stoken.ptr = "short";
864 $$.stoken.length = 5;
865 $$.type = builtin_type_short;
871 { $$ = (struct type **)xmalloc (sizeof (struct type *) * 2);
872 $$[0] = (struct type *)0;
875 | nonempty_typelist ',' type
876 { int len = sizeof (struct type *) * ++($<ivec>1[0]);
877 $$ = (struct type **)xrealloc ($1, len);
878 $$[$<ivec>$[0]] = $3;
882 name : NAME { $$ = $1.stoken; }
883 | BLOCKNAME { $$ = $1.stoken; }
884 | TYPENAME { $$ = $1.stoken; }
885 | NAME_OR_INT { $$ = $1.stoken; }
886 | NAME_OR_UINT { $$ = $1.stoken; }
889 name_not_typename : NAME
891 /* These would be useful if name_not_typename was useful, but it is just
892 a fake for "variable", so these cause reduce/reduce conflicts because
893 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
894 =exp) or just an exp. If name_not_typename was ever used in an lvalue
895 context where only a name could occur, this might be useful.
903 /* Begin counting arguments for a function call,
904 saving the data about any containing call. */
909 register struct funcall *new = (struct funcall *) xmalloc (sizeof (struct funcall));
911 new->next = funcall_chain;
912 new->arglist_len = arglist_len;
917 /* Return the number of arguments in a function call just terminated,
918 and restore the data for the containing function call. */
923 register int val = arglist_len;
924 register struct funcall *call = funcall_chain;
925 funcall_chain = call->next;
926 arglist_len = call->arglist_len;
931 /* Free everything in the funcall chain.
932 Used when there is an error inside parsing. */
937 register struct funcall *call, *next;
939 for (call = funcall_chain; call; call = next)
946 /* This page contains the functions for adding data to the struct expression
947 being constructed. */
949 /* Add one element to the end of the expression. */
951 /* To avoid a bug in the Sun 4 compiler, we pass things that can fit into
952 a register through here */
955 write_exp_elt (expelt)
956 union exp_element expelt;
958 if (expout_ptr >= expout_size)
961 expout = (struct expression *) xrealloc (expout,
962 sizeof (struct expression)
963 + expout_size * sizeof (union exp_element));
965 expout->elts[expout_ptr++] = expelt;
969 write_exp_elt_opcode (expelt)
970 enum exp_opcode expelt;
972 union exp_element tmp;
980 write_exp_elt_sym (expelt)
981 struct symbol *expelt;
983 union exp_element tmp;
991 write_exp_elt_longcst (expelt)
994 union exp_element tmp;
996 tmp.longconst = expelt;
1002 write_exp_elt_dblcst (expelt)
1005 union exp_element tmp;
1007 tmp.doubleconst = expelt;
1009 write_exp_elt (tmp);
1013 write_exp_elt_type (expelt)
1014 struct type *expelt;
1016 union exp_element tmp;
1020 write_exp_elt (tmp);
1024 write_exp_elt_intern (expelt)
1025 struct internalvar *expelt;
1027 union exp_element tmp;
1029 tmp.internalvar = expelt;
1031 write_exp_elt (tmp);
1034 /* Add a string constant to the end of the expression.
1035 Follow it by its length in bytes, as a separate exp_element. */
1038 write_exp_string (str)
1041 register int len = str.length;
1043 = (len + sizeof (union exp_element)) / sizeof (union exp_element);
1045 expout_ptr += lenelt;
1047 if (expout_ptr >= expout_size)
1049 expout_size = max (expout_size * 2, expout_ptr + 10);
1050 expout = (struct expression *)
1051 xrealloc (expout, (sizeof (struct expression)
1052 + (expout_size * sizeof (union exp_element))));
1054 bcopy (str.ptr, (char *) &expout->elts[expout_ptr - lenelt], len);
1055 ((char *) &expout->elts[expout_ptr - lenelt])[len] = 0;
1056 write_exp_elt_longcst ((LONGEST) len);
1059 /* During parsing of a C expression, the pointer to the next character
1060 is in this variable. */
1062 static char *lexptr;
1064 /* Tokens that refer to names do so with explicit pointer and length,
1065 so they can share the storage that lexptr is parsing.
1067 When it is necessary to pass a name to a function that expects
1068 a null-terminated string, the substring is copied out
1069 into a block of storage that namecopy points to.
1071 namecopy is allocated once, guaranteed big enough, for each parsing. */
1073 static char *namecopy;
1075 /* Current depth in parentheses within the expression. */
1077 static int paren_depth;
1079 /* Nonzero means stop parsing on first comma (if not within parentheses). */
1081 static int comma_terminates;
1083 /* Take care of parsing a number (anything that starts with a digit).
1084 Set yylval and return the token type; update lexptr.
1085 LEN is the number of characters in it. */
1087 /*** Needs some error checking for the float case ***/
1090 parse_number (p, len, parsed_float, putithere)
1096 register LONGEST n = 0;
1099 register int base = input_radix;
1102 extern double atof ();
1106 /* It's a float since it contains a point or an exponent. */
1107 putithere->dval = atof (p);
1111 /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
1145 if (c >= 'A' && c <= 'Z')
1147 if (c != 'l' && c != 'u')
1149 if (c >= '0' && c <= '9')
1153 if (base > 10 && c >= 'a' && c <= 'f')
1154 n += i = c - 'a' + 10;
1155 else if (len == 0 && c == 'l')
1157 else if (len == 0 && c == 'u')
1160 return ERROR; /* Char not a digit */
1163 return ERROR; /* Invalid digit in this base */
1168 putithere->ulval = n;
1173 putithere->lval = n;
1182 enum exp_opcode opcode;
1185 const static struct token tokentab3[] =
1187 {">>=", ASSIGN_MODIFY, BINOP_RSH},
1188 {"<<=", ASSIGN_MODIFY, BINOP_LSH}
1191 const static struct token tokentab2[] =
1193 {"+=", ASSIGN_MODIFY, BINOP_ADD},
1194 {"-=", ASSIGN_MODIFY, BINOP_SUB},
1195 {"*=", ASSIGN_MODIFY, BINOP_MUL},
1196 {"/=", ASSIGN_MODIFY, BINOP_DIV},
1197 {"%=", ASSIGN_MODIFY, BINOP_REM},
1198 {"|=", ASSIGN_MODIFY, BINOP_LOGIOR},
1199 {"&=", ASSIGN_MODIFY, BINOP_LOGAND},
1200 {"^=", ASSIGN_MODIFY, BINOP_LOGXOR},
1201 {"++", INCREMENT, BINOP_END},
1202 {"--", DECREMENT, BINOP_END},
1203 {"->", ARROW, BINOP_END},
1204 {"&&", AND, BINOP_END},
1205 {"||", OR, BINOP_END},
1206 {"::", COLONCOLON, BINOP_END},
1207 {"<<", LSH, BINOP_END},
1208 {">>", RSH, BINOP_END},
1209 {"==", EQUAL, BINOP_END},
1210 {"!=", NOTEQUAL, BINOP_END},
1211 {"<=", LEQ, BINOP_END},
1212 {">=", GEQ, BINOP_END}
1215 /* assign machine-independent names to certain registers
1216 * (unless overridden by the REGISTER_NAMES table)
1223 { "pc", PC_REGNUM },
1226 { "fp", FP_REGNUM },
1229 { "sp", SP_REGNUM },
1232 { "ps", PS_REGNUM },
1236 #define NUM_STD_REGS (sizeof std_regs / sizeof std_regs[0])
1238 /* Read one token, getting characters through lexptr. */
1244 register int namelen;
1245 register unsigned i;
1246 register char *tokstart;
1251 /* See if it is a special token of length 3. */
1252 for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
1253 if (!strncmp (tokstart, tokentab3[i].operator, 3))
1256 yylval.opcode = tokentab3[i].opcode;
1257 return tokentab3[i].token;
1260 /* See if it is a special token of length 2. */
1261 for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
1262 if (!strncmp (tokstart, tokentab2[i].operator, 2))
1265 yylval.opcode = tokentab2[i].opcode;
1266 return tokentab2[i].token;
1269 switch (c = *tokstart)
1284 c = parse_escape (&lexptr);
1288 error ("Invalid character constant.");
1297 if (paren_depth == 0)
1304 if (comma_terminates && paren_depth == 0)
1310 /* Might be a floating point number. */
1311 if (lexptr[1] < '0' || lexptr[1] > '9')
1312 goto symbol; /* Nope, must be a symbol. */
1313 /* FALL THRU into number case. */
1326 /* It's a number. */
1327 int got_dot = 0, got_e = 0, toktype;
1328 register char *p = tokstart;
1329 int hex = input_radix > 10;
1331 if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
1336 else if (c == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D'))
1344 if (!hex && !got_e && (*p == 'e' || *p == 'E'))
1345 got_dot = got_e = 1;
1346 else if (!hex && !got_dot && *p == '.')
1348 else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
1349 && (*p == '-' || *p == '+'))
1350 /* This is the sign of the exponent, not the end of the
1353 /* We will take any letters or digits. parse_number will
1354 complain if past the radix, or if L or U are not final. */
1355 else if ((*p < '0' || *p > '9')
1356 && ((*p < 'a' || *p > 'z')
1357 && (*p < 'A' || *p > 'Z')))
1360 toktype = parse_number (tokstart, p - tokstart, got_dot|got_e, &yylval);
1361 if (toktype == ERROR)
1363 char *err_copy = (char *) alloca (p - tokstart + 1);
1365 bcopy (tokstart, err_copy, p - tokstart);
1366 err_copy[p - tokstart] = 0;
1367 error ("Invalid number \"%s\".", err_copy);
1398 for (namelen = 1; (c = tokstart[namelen]) != '"'; namelen++)
1401 c = tokstart[++namelen];
1402 if (c >= '0' && c <= '9')
1404 c = tokstart[++namelen];
1405 if (c >= '0' && c <= '9')
1406 c = tokstart[++namelen];
1409 yylval.sval.ptr = tokstart + 1;
1410 yylval.sval.length = namelen - 1;
1411 lexptr += namelen + 1;
1415 if (!(c == '_' || c == '$'
1416 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
1417 /* We must have come across a bad character (e.g. ';'). */
1418 error ("Invalid character '%c' in expression.", c);
1420 /* It's a name. See how long it is. */
1422 for (c = tokstart[namelen];
1423 (c == '_' || c == '$' || (c >= '0' && c <= '9')
1424 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));
1425 c = tokstart[++namelen])
1428 /* The token "if" terminates the expression and is NOT
1429 removed from the input stream. */
1430 if (namelen == 2 && tokstart[0] == 'i' && tokstart[1] == 'f')
1437 /* Handle the tokens $digits; also $ (short for $0) and $$ (short for $$1)
1438 and $$digits (equivalent to $<-digits> if you could type that).
1439 Make token type LAST, and put the number (the digits) in yylval. */
1441 if (*tokstart == '$')
1443 register int negate = 0;
1445 /* Double dollar means negate the number and add -1 as well.
1446 Thus $$ alone means -1. */
1447 if (namelen >= 2 && tokstart[1] == '$')
1454 /* Just dollars (one or two) */
1455 yylval.lval = - negate;
1458 /* Is the rest of the token digits? */
1459 for (; c < namelen; c++)
1460 if (!(tokstart[c] >= '0' && tokstart[c] <= '9'))
1464 yylval.lval = atoi (tokstart + 1 + negate);
1466 yylval.lval = - yylval.lval;
1471 /* Handle tokens that refer to machine registers:
1472 $ followed by a register name. */
1474 if (*tokstart == '$') {
1475 for (c = 0; c < NUM_REGS; c++)
1476 if (namelen - 1 == strlen (reg_names[c])
1477 && !strncmp (tokstart + 1, reg_names[c], namelen - 1))
1482 for (c = 0; c < NUM_STD_REGS; c++)
1483 if (namelen - 1 == strlen (std_regs[c].name)
1484 && !strncmp (tokstart + 1, std_regs[c].name, namelen - 1))
1486 yylval.lval = std_regs[c].regnum;
1490 /* Catch specific keywords. Should be done with a data structure. */
1494 if (!strncmp (tokstart, "unsigned", 8))
1498 if (!strncmp (tokstart, "struct", 6))
1500 if (!strncmp (tokstart, "signed", 6))
1502 if (!strncmp (tokstart, "sizeof", 6))
1506 if (!strncmp (tokstart, "union", 5))
1508 if (!strncmp (tokstart, "short", 5))
1512 if (!strncmp (tokstart, "enum", 4))
1514 if (!strncmp (tokstart, "long", 4))
1516 if (!strncmp (tokstart, "this", 4))
1518 static const char this_name[] =
1519 { CPLUS_MARKER, 't', 'h', 'i', 's', '\0' };
1521 if (lookup_symbol (this_name, expression_context_block,
1522 VAR_NAMESPACE, 0, NULL))
1527 if (!strncmp (tokstart, "int", 3))
1534 yylval.sval.ptr = tokstart;
1535 yylval.sval.length = namelen;
1537 /* Any other names starting in $ are debugger internal variables. */
1539 if (*tokstart == '$')
1541 yylval.ivar = lookup_internalvar (copy_name (yylval.sval) + 1);
1545 /* Use token-type BLOCKNAME for symbols that happen to be defined as
1546 functions or symtabs. If this is not so, then ...
1547 Use token-type TYPENAME for symbols that happen to be defined
1548 currently as names of types; NAME for other symbols.
1549 The caller is not constrained to care about the distinction. */
1551 char *tmp = copy_name (yylval.sval);
1553 int is_a_field_of_this = 0;
1556 sym = lookup_symbol (tmp, expression_context_block,
1557 VAR_NAMESPACE, &is_a_field_of_this, NULL);
1558 if ((sym && SYMBOL_CLASS (sym) == LOC_BLOCK) ||
1559 lookup_partial_symtab (tmp))
1561 yylval.ssym.sym = sym;
1562 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1565 if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
1567 yylval.tsym.type = SYMBOL_TYPE (sym);
1570 if ((yylval.tsym.type = lookup_primitive_typename (tmp)) != 0)
1573 /* Input names that aren't symbols but ARE valid hex numbers,
1574 when the input radix permits them, can be names or numbers
1575 depending on the parse. Note we support radixes > 16 here. */
1577 ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10) ||
1578 (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
1580 YYSTYPE newlval; /* Its value is ignored. */
1581 hextype = parse_number (tokstart, namelen, 0, &newlval);
1584 yylval.ssym.sym = sym;
1585 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1588 if (hextype == UINT)
1590 yylval.ssym.sym = sym;
1591 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1592 return NAME_OR_UINT;
1596 /* Any other kind of symbol */
1597 yylval.ssym.sym = sym;
1598 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1607 error ("Invalid syntax in expression.");
1610 /* Return a null-terminated temporary copy of the name
1611 of a string token. */
1615 struct stoken token;
1617 bcopy (token.ptr, namecopy, token.length);
1618 namecopy[token.length] = 0;
1622 /* Reverse an expression from suffix form (in which it is constructed)
1623 to prefix form (in which we can conveniently print or execute it). */
1625 static void prefixify_subexp ();
1628 prefixify_expression (expr)
1629 register struct expression *expr;
1631 register int len = sizeof (struct expression) +
1632 expr->nelts * sizeof (union exp_element);
1633 register struct expression *temp;
1634 register int inpos = expr->nelts, outpos = 0;
1636 temp = (struct expression *) alloca (len);
1638 /* Copy the original expression into temp. */
1639 bcopy (expr, temp, len);
1641 prefixify_subexp (temp, expr, inpos, outpos);
1644 /* Return the number of exp_elements in the subexpression of EXPR
1645 whose last exp_element is at index ENDPOS - 1 in EXPR. */
1648 length_of_subexp (expr, endpos)
1649 register struct expression *expr;
1650 register int endpos;
1652 register int oplen = 1;
1653 register int args = 0;
1657 error ("?error in length_of_subexp");
1659 i = (int) expr->elts[endpos - 1].opcode;
1665 oplen = 4 + ((expr->elts[endpos - 2].longconst
1666 + sizeof (union exp_element))
1667 / sizeof (union exp_element));
1678 case OP_INTERNALVAR:
1684 args = 1 + expr->elts[endpos - 2].longconst;
1693 case STRUCTOP_STRUCT:
1697 oplen = 3 + ((expr->elts[endpos - 2].longconst
1698 + sizeof (union exp_element))
1699 / sizeof (union exp_element));
1706 case BINOP_ASSIGN_MODIFY:
1717 args = 1 + (i < (int) BINOP_END);
1722 oplen += length_of_subexp (expr, endpos - oplen);
1729 /* Copy the subexpression ending just before index INEND in INEXPR
1730 into OUTEXPR, starting at index OUTBEG.
1731 In the process, convert it from suffix to prefix form. */
1734 prefixify_subexp (inexpr, outexpr, inend, outbeg)
1735 register struct expression *inexpr;
1736 struct expression *outexpr;
1740 register int oplen = 1;
1741 register int args = 0;
1744 enum exp_opcode opcode;
1746 /* Compute how long the last operation is (in OPLEN),
1747 and also how many preceding subexpressions serve as
1748 arguments for it (in ARGS). */
1750 opcode = inexpr->elts[inend - 1].opcode;
1755 oplen = 4 + ((inexpr->elts[inend - 2].longconst
1756 + sizeof (union exp_element))
1757 / sizeof (union exp_element));
1768 case OP_INTERNALVAR:
1774 args = 1 + inexpr->elts[inend - 2].longconst;
1783 case STRUCTOP_STRUCT:
1787 oplen = 3 + ((inexpr->elts[inend - 2].longconst
1788 + sizeof (union exp_element))
1789 / sizeof (union exp_element));
1797 case BINOP_ASSIGN_MODIFY:
1808 args = 1 + ((int) opcode < (int) BINOP_END);
1811 /* Copy the final operator itself, from the end of the input
1812 to the beginning of the output. */
1814 bcopy (&inexpr->elts[inend], &outexpr->elts[outbeg],
1815 oplen * sizeof (union exp_element));
1818 /* Find the lengths of the arg subexpressions. */
1819 arglens = (int *) alloca (args * sizeof (int));
1820 for (i = args - 1; i >= 0; i--)
1822 oplen = length_of_subexp (inexpr, inend);
1827 /* Now copy each subexpression, preserving the order of
1828 the subexpressions, but prefixifying each one.
1829 In this loop, inend starts at the beginning of
1830 the expression this level is working on
1831 and marches forward over the arguments.
1832 outbeg does similarly in the output. */
1833 for (i = 0; i < args; i++)
1837 prefixify_subexp (inexpr, outexpr, inend, outbeg);
1842 /* This page contains the two entry points to this file. */
1844 /* Read a C expression from the string *STRINGPTR points to,
1845 parse it, and return a pointer to a struct expression that we malloc.
1846 Use block BLOCK as the lexical context for variable names;
1847 if BLOCK is zero, use the block of the selected stack frame.
1848 Meanwhile, advance *STRINGPTR to point after the expression,
1849 at the first nonwhite character that is not part of the expression
1850 (possibly a null character).
1852 If COMMA is nonzero, stop if a comma is reached. */
1855 parse_c_1 (stringptr, block, comma)
1857 struct block *block;
1860 struct cleanup *old_chain;
1862 lexptr = *stringptr;
1865 type_stack_depth = 0;
1867 comma_terminates = comma;
1869 if (lexptr == 0 || *lexptr == 0)
1870 error_no_arg ("expression to compute");
1872 old_chain = make_cleanup (free_funcalls, 0);
1875 expression_context_block = block ? block : get_selected_block ();
1877 namecopy = (char *) alloca (strlen (lexptr) + 1);
1880 expout = (struct expression *)
1881 xmalloc (sizeof (struct expression)
1882 + expout_size * sizeof (union exp_element));
1883 make_cleanup (free_current_contents, &expout);
1886 discard_cleanups (old_chain);
1887 expout->nelts = expout_ptr;
1888 expout = (struct expression *)
1890 sizeof (struct expression)
1891 + expout_ptr * sizeof (union exp_element));
1892 prefixify_expression (expout);
1893 *stringptr = lexptr;
1897 /* Parse STRING as an expression, and complain if this fails
1898 to use up all of the contents of STRING. */
1901 parse_c_expression (string)
1904 register struct expression *exp;
1905 exp = parse_c_1 (&string, 0, 0);
1907 error ("Junk after end of expression.");
1913 enum type_pieces tp;
1915 if (type_stack_depth == type_stack_size)
1917 type_stack_size *= 2;
1918 type_stack = (enum type_pieces *)
1919 xrealloc (type_stack, type_stack_size * sizeof (enum type_pieces));
1921 type_stack[type_stack_depth++] = tp;
1924 static enum type_pieces
1927 if (type_stack_depth)
1928 return type_stack[--type_stack_depth];
1933 _initialize_expread ()
1935 type_stack_size = 80;
1936 type_stack_depth = 0;
1937 type_stack = (enum type_pieces *)
1938 xmalloc (type_stack_size * sizeof (enum type_pieces));