1 /* Parser for GNU CHILL (CCITT High-Level Language) -*- C -*-
2 Copyright (C) 1992, 1993, 1995 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
20 /* Parse a Chill 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.
29 Note that malloc's and realloc's in this file are transformed to
30 xmalloc and xrealloc respectively by the same sed command in the
31 makefile that remaps any other malloc/realloc inserted by the parser
32 generator. Doing this with #defines and trying to control the interaction
33 with include files (<malloc.h> and <stdlib.h> for example) just became
34 too messy, particularly when such includes can be inserted at random
35 times by the parser generator.
37 Also note that the language accepted by this parser is more liberal
38 than the one accepted by an actual Chill compiler. For example, the
39 language rule that a simple name string can not be one of the reserved
40 simple name strings is not enforced (e.g "case" is not treated as a
41 reserved name). Another example is that Chill is a strongly typed
42 language, and certain expressions that violate the type constraints
43 may still be evaluated if gdb can do so in a meaningful manner, while
44 such expressions would be rejected by the compiler. The reason for
45 this more liberal behavior is the philosophy that the debugger
46 is intended to be a tool that is used by the programmer when things
47 go wrong, and as such, it should provide as few artificial barriers
48 to it's use as possible. If it can do something meaningful, even
49 something that violates language contraints that are enforced by the
50 compiler, it should do so without complaint.
57 #include "expression.h"
60 #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 */
70 unsigned LONGEST ulval;
85 /* '\001' ... '\xff' come first. */
91 GENERAL_PROCEDURE_NAME,
94 CHARACTER_STRING_LITERAL,
140 /* Forward declarations. */
141 static void parse_expr ();
142 static void parse_primval ();
143 static void parse_untyped_expr ();
144 static int parse_opt_untyped_expr ();
145 static void parse_if_expression_body PARAMS((void));
146 static void write_lower_upper_value PARAMS ((enum exp_opcode, struct type *));
147 static enum ch_terminal ch_lex ();
149 #define MAX_LOOK_AHEAD 2
150 static enum ch_terminal terminal_buffer[MAX_LOOK_AHEAD+1] = {
151 TOKEN_NOT_READ, TOKEN_NOT_READ, TOKEN_NOT_READ};
152 static YYSTYPE yylval;
153 static YYSTYPE val_buffer[MAX_LOOK_AHEAD+1];
155 /*int current_token, lookahead_token;*/
160 static enum ch_terminal
163 if (terminal_buffer[0] == TOKEN_NOT_READ)
165 terminal_buffer[0] = ch_lex ();
166 val_buffer[0] = yylval;
168 return terminal_buffer[0];
170 #define PEEK_LVAL() val_buffer[0]
171 #define PEEK_TOKEN1() peek_token_(1)
172 #define PEEK_TOKEN2() peek_token_(2)
173 static enum ch_terminal
177 if (i > MAX_LOOK_AHEAD)
178 fatal ("internal error - too much lookahead");
179 if (terminal_buffer[i] == TOKEN_NOT_READ)
181 terminal_buffer[i] = ch_lex ();
182 val_buffer[i] = yylval;
184 return terminal_buffer[i];
188 pushback_token (code, node)
189 enum ch_terminal code;
193 if (terminal_buffer[MAX_LOOK_AHEAD] != TOKEN_NOT_READ)
194 fatal ("internal error - cannot pushback token");
195 for (i = MAX_LOOK_AHEAD; i > 0; i--)
197 terminal_buffer[i] = terminal_buffer[i - 1];
198 val_buffer[i] = val_buffer[i - 1];
200 terminal_buffer[0] = code;
201 val_buffer[0] = node;
208 for (i = 0; i < MAX_LOOK_AHEAD; i++)
210 terminal_buffer[i] = terminal_buffer[i+1];
211 val_buffer[i] = val_buffer[i+1];
213 terminal_buffer[MAX_LOOK_AHEAD] = TOKEN_NOT_READ;
215 #define FORWARD_TOKEN() forward_token_()
217 /* Skip the next token.
218 if it isn't TOKEN, the parser is broken. */
222 enum ch_terminal token;
224 if (PEEK_TOKEN() != token)
227 sprintf (buf, "internal parser error - expected token %d", (int)token);
235 enum ch_terminal token;
237 if (PEEK_TOKEN() != token)
243 /* return 0 if expected token was not found,
247 expect(token, message)
248 enum ch_terminal token;
251 if (PEEK_TOKEN() != token)
255 else if (token < 256)
256 error ("syntax error - expected a '%c' here \"%s\"", token, lexptr);
258 error ("syntax error");
268 parse_opt_name_string (allow_all)
269 int allow_all; /* 1 if ALL is allowed as a postfix */
271 int token = PEEK_TOKEN();
275 if (token == ALL && allow_all)
286 token = PEEK_TOKEN();
290 token = PEEK_TOKEN();
291 if (token == ALL && allow_all)
292 return get_identifier3(IDENTIFIER_POINTER (name), "!", "*");
296 error ("'%s!' is not followed by an identifier",
297 IDENTIFIER_POINTER (name));
300 name = get_identifier3(IDENTIFIER_POINTER(name),
301 "!", IDENTIFIER_POINTER(PEEK_LVAL()));
306 parse_simple_name_string ()
308 int token = PEEK_TOKEN();
312 error ("expected a name here");
313 return error_mark_node;
323 tree name = parse_opt_name_string (0);
327 error ("expected a name string here");
328 return error_mark_node;
331 /* Matches: <name_string>
332 Returns if pass 1: the identifier.
333 Returns if pass 2: a decl or value for identifier. */
338 tree name = parse_name_string ();
339 if (pass == 1 || ignoring)
343 tree decl = lookup_name (name);
344 if (decl == NULL_TREE)
346 error ("`%s' undeclared", IDENTIFIER_POINTER (name));
347 return error_mark_node;
349 else if (TREE_CODE (TREE_TYPE (decl)) == ERROR_MARK)
350 return error_mark_node;
351 else if (TREE_CODE (decl) == CONST_DECL)
352 return DECL_INITIAL (decl);
353 else if (TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE)
354 return convert_from_reference (decl);
363 pushback_paren_expr (expr)
366 if (pass == 1 && !ignoring)
367 expr = build1 (PAREN_EXPR, NULL_TREE, expr);
368 pushback_token (EXPR, expr);
372 /* Matches: <case label> */
377 if (check_token (ELSE))
378 error ("ELSE in tuples labels not implemented");
379 /* Does not handle the case of a mode name. FIXME */
381 if (check_token (':'))
384 write_exp_elt_opcode (BINOP_RANGE);
389 parse_opt_untyped_expr ()
391 switch (PEEK_TOKEN ())
398 parse_untyped_expr ();
412 /* Parse NAME '(' MODENAME ')'. */
420 if (PEEK_TOKEN () != TYPENAME)
421 error ("expect MODENAME here `%s'", lexptr);
422 type = PEEK_LVAL().tsym.type;
429 parse_mode_or_normal_call ()
434 if (PEEK_TOKEN () == TYPENAME)
436 type = PEEK_LVAL().tsym.type;
448 /* Parse something that looks like a function call.
449 Assume we have parsed the function, and are at the '('. */
456 /* This is to save the value of arglist_len
457 being accumulated for each dimension. */
459 if (parse_opt_untyped_expr ())
461 int tok = PEEK_TOKEN ();
463 if (tok == UP || tok == ':')
467 expect (')', "expected ')' to terminate slice");
469 write_exp_elt_opcode (tok == UP ? TERNOP_SLICE_COUNT
473 while (check_token (','))
475 parse_untyped_expr ();
482 arg_count = end_arglist ();
483 write_exp_elt_opcode (MULTI_SUBSCRIPT);
484 write_exp_elt_longcst (arg_count);
485 write_exp_elt_opcode (MULTI_SUBSCRIPT);
489 parse_named_record_element ()
491 struct stoken label = PEEK_LVAL ().sval;
492 expect (FIELD_NAME, "expected a field name here `%s'", lexptr);
493 if (check_token (','))
494 parse_named_record_element ();
495 else if (check_token (':'))
498 error ("syntax error near `%s' in named record tuple element", lexptr);
499 write_exp_elt_opcode (OP_LABELED);
500 write_exp_string (label);
501 write_exp_elt_opcode (OP_LABELED);
504 /* Returns one or nore TREE_LIST nodes, in reverse order. */
507 parse_tuple_element ()
509 if (PEEK_TOKEN () == FIELD_NAME)
511 /* Parse a labelled structure tuple. */
512 parse_named_record_element ();
516 if (check_token ('('))
518 if (check_token ('*'))
520 expect (')', "missing ')' after '*' case label list");
521 error ("(*) not implemented in case label list");
526 while (check_token (','))
529 write_exp_elt_opcode (BINOP_COMMA);
535 parse_untyped_expr ();
536 if (check_token (':'))
538 /* A powerset range or a labeled Array. */
539 parse_untyped_expr ();
540 write_exp_elt_opcode (BINOP_RANGE);
544 /* Matches: a COMMA-separated list of tuple elements.
545 Returns a list (of TREE_LIST nodes). */
547 parse_opt_element_list ()
550 if (PEEK_TOKEN () == ']')
554 parse_tuple_element ();
556 if (PEEK_TOKEN () == ']')
558 if (!check_token (','))
559 error ("bad syntax in tuple");
563 /* Parses: '[' elements ']'
564 If modename is non-NULL it prefixed the tuple. */
572 parse_opt_element_list ();
573 expect (']', "missing ']' after tuple");
574 write_exp_elt_opcode (OP_ARRAY);
575 write_exp_elt_longcst ((LONGEST) 0);
576 write_exp_elt_longcst ((LONGEST) end_arglist () - 1);
577 write_exp_elt_opcode (OP_ARRAY);
580 write_exp_elt_opcode (UNOP_CAST);
581 write_exp_elt_type (mode);
582 write_exp_elt_opcode (UNOP_CAST);
592 switch (PEEK_TOKEN ())
594 case INTEGER_LITERAL:
595 case CHARACTER_LITERAL:
596 write_exp_elt_opcode (OP_LONG);
597 write_exp_elt_type (PEEK_LVAL ().typed_val.type);
598 write_exp_elt_longcst ((LONGEST) (PEEK_LVAL ().typed_val.val));
599 write_exp_elt_opcode (OP_LONG);
602 case BOOLEAN_LITERAL:
603 write_exp_elt_opcode (OP_BOOL);
604 write_exp_elt_longcst ((LONGEST) PEEK_LVAL ().ulval);
605 write_exp_elt_opcode (OP_BOOL);
609 write_exp_elt_opcode (OP_DOUBLE);
610 write_exp_elt_type (builtin_type_double);
611 write_exp_elt_dblcst (PEEK_LVAL ().dval);
612 write_exp_elt_opcode (OP_DOUBLE);
615 case EMPTINESS_LITERAL:
616 write_exp_elt_opcode (OP_LONG);
617 write_exp_elt_type (lookup_pointer_type (builtin_type_void));
618 write_exp_elt_longcst (0);
619 write_exp_elt_opcode (OP_LONG);
622 case CHARACTER_STRING_LITERAL:
623 write_exp_elt_opcode (OP_STRING);
624 write_exp_string (PEEK_LVAL ().sval);
625 write_exp_elt_opcode (OP_STRING);
628 case BIT_STRING_LITERAL:
629 write_exp_elt_opcode (OP_BITSTRING);
630 write_exp_bitstring (PEEK_LVAL ().sval);
631 write_exp_elt_opcode (OP_BITSTRING);
636 /* This is pseudo-Chill, similar to C's '(TYPE[])EXPR'
637 which casts to an artificial array. */
640 if (PEEK_TOKEN () != TYPENAME)
641 error ("missing MODENAME after ARRAY()");
642 type = PEEK_LVAL().tsym.type;
645 expect (')', "missing right parenthesis");
646 type = create_array_type ((struct type *) NULL, type,
647 create_range_type ((struct type *) NULL,
648 builtin_type_int, 0, 0));
649 TYPE_ARRAY_UPPER_BOUND_TYPE(type) = BOUND_CANNOT_BE_DETERMINED;
650 write_exp_elt_opcode (UNOP_CAST);
651 write_exp_elt_type (type);
652 write_exp_elt_opcode (UNOP_CAST);
664 expect (')', "missing right parenthesis");
669 case GENERAL_PROCEDURE_NAME:
671 write_exp_elt_opcode (OP_VAR_VALUE);
672 write_exp_elt_block (NULL);
673 write_exp_elt_sym (PEEK_LVAL ().ssym.sym);
674 write_exp_elt_opcode (OP_VAR_VALUE);
677 case GDB_VARIABLE: /* gdb specific */
682 write_exp_elt_opcode (UNOP_CAST);
683 write_exp_elt_type (builtin_type_int);
684 write_exp_elt_opcode (UNOP_CAST);
686 case PRED: op_name = "PRED"; goto unimplemented_unary_builtin;
687 case SUCC: op_name = "SUCC"; goto unimplemented_unary_builtin;
688 case ABS: op_name = "ABS"; goto unimplemented_unary_builtin;
689 case CARD: op_name = "CARD"; goto unimplemented_unary_builtin;
690 case MAX_TOKEN: op_name = "MAX"; goto unimplemented_unary_builtin;
691 case MIN_TOKEN: op_name = "MIN"; goto unimplemented_unary_builtin;
692 unimplemented_unary_builtin:
694 error ("not implemented: %s builtin function", op_name);
698 write_exp_elt_opcode (UNOP_ADDR);
701 type = parse_mode_or_normal_call ();
703 { write_exp_elt_opcode (OP_LONG);
704 write_exp_elt_type (builtin_type_int);
705 CHECK_TYPEDEF (type);
706 write_exp_elt_longcst ((LONGEST) TYPE_LENGTH (type));
707 write_exp_elt_opcode (OP_LONG);
710 write_exp_elt_opcode (UNOP_SIZEOF);
719 type = parse_mode_or_normal_call ();
720 write_lower_upper_value (op, type);
724 write_exp_elt_opcode (UNOP_LENGTH);
727 type = PEEK_LVAL ().tsym.type;
729 switch (PEEK_TOKEN())
737 expect (')', "missing right parenthesis");
738 write_exp_elt_opcode (UNOP_CAST);
739 write_exp_elt_type (type);
740 write_exp_elt_opcode (UNOP_CAST);
743 error ("typename in invalid context");
748 error ("invalid expression syntax at `%s'", lexptr);
752 switch (PEEK_TOKEN ())
755 write_exp_elt_opcode (STRUCTOP_STRUCT);
756 write_exp_string (PEEK_LVAL ().sval);
757 write_exp_elt_opcode (STRUCTOP_STRUCT);
762 if (PEEK_TOKEN () == TYPENAME)
764 type = PEEK_LVAL ().tsym.type;
765 write_exp_elt_opcode (UNOP_CAST);
766 write_exp_elt_type (lookup_pointer_type (type));
767 write_exp_elt_opcode (UNOP_CAST);
770 write_exp_elt_opcode (UNOP_IND);
775 case CHARACTER_STRING_LITERAL:
776 case CHARACTER_LITERAL:
777 case BIT_STRING_LITERAL:
778 /* Handle string repetition. (See comment in parse_operand5.) */
780 write_exp_elt_opcode (MULTI_SUBSCRIPT);
781 write_exp_elt_longcst (1);
782 write_exp_elt_opcode (MULTI_SUBSCRIPT);
793 if (check_token (RECEIVE))
796 error ("not implemented: RECEIVE expression");
798 else if (check_token (POINTER))
801 write_exp_elt_opcode (UNOP_ADDR);
811 /* We are supposed to be looking for a <string repetition operator>,
812 but in general we can't distinguish that from a parenthesized
813 expression. This is especially difficult if we allow the
814 string operand to be a constant expression (as requested by
815 some users), and not just a string literal.
816 Consider: LPRN expr RPRN LPRN expr RPRN
817 Is that a function call or string repetition?
818 Instead, we handle string repetition in parse_primval,
819 and build_generalized_call. */
820 switch (PEEK_TOKEN())
822 case NOT: op = UNOP_LOGICAL_NOT; break;
823 case '-': op = UNOP_NEG; break;
831 write_exp_elt_opcode (op);
841 switch (PEEK_TOKEN())
843 case '*': op = BINOP_MUL; break;
844 case '/': op = BINOP_DIV; break;
845 case MOD: op = BINOP_MOD; break;
846 case REM: op = BINOP_REM; break;
852 write_exp_elt_opcode (op);
863 switch (PEEK_TOKEN())
865 case '+': op = BINOP_ADD; break;
866 case '-': op = BINOP_SUB; break;
867 case SLASH_SLASH: op = BINOP_CONCAT; break;
873 write_exp_elt_opcode (op);
884 if (check_token (IN))
887 write_exp_elt_opcode (BINOP_IN);
891 switch (PEEK_TOKEN())
893 case '>': op = BINOP_GTR; break;
894 case GEQ: op = BINOP_GEQ; break;
895 case '<': op = BINOP_LESS; break;
896 case LEQ: op = BINOP_LEQ; break;
897 case '=': op = BINOP_EQUAL; break;
898 case NOTEQUAL: op = BINOP_NOTEQUAL; break;
904 write_exp_elt_opcode (op);
916 switch (PEEK_TOKEN())
918 case LOGAND: op = BINOP_BITWISE_AND; break;
919 case ANDIF: op = BINOP_LOGICAL_AND; break;
925 write_exp_elt_opcode (op);
936 switch (PEEK_TOKEN())
938 case LOGIOR: op = BINOP_BITWISE_IOR; break;
939 case LOGXOR: op = BINOP_BITWISE_XOR; break;
940 case ORIF: op = BINOP_LOGICAL_OR; break;
946 write_exp_elt_opcode (op);
954 if (check_token (GDB_ASSIGNMENT))
957 write_exp_elt_opcode (BINOP_ASSIGN);
962 parse_then_alternative ()
964 expect (THEN, "missing 'THEN' in 'IF' expression");
969 parse_else_alternative ()
971 if (check_token (ELSIF))
972 parse_if_expression_body ();
973 else if (check_token (ELSE))
976 error ("missing ELSE/ELSIF in IF expression");
979 /* Matches: <boolean expression> <then alternative> <else alternative> */
982 parse_if_expression_body ()
985 parse_then_alternative ();
986 parse_else_alternative ();
987 write_exp_elt_opcode (TERNOP_COND);
991 parse_if_expression ()
994 parse_if_expression_body ();
995 expect (FI, "missing 'FI' at end of conditional expression");
998 /* An <untyped_expr> is a superset of <expr>. It also includes
999 <conditional expressions> and untyped <tuples>, whose types
1000 are not given by their constituents. Hence, these are only
1001 allowed in certain contexts that expect a certain type.
1002 You should call convert() to fix up the <untyped_expr>. */
1005 parse_untyped_expr ()
1007 switch (PEEK_TOKEN())
1010 parse_if_expression ();
1013 error ("not implemented: CASE expression");
1015 switch (PEEK_TOKEN1())
1023 parse_untyped_expr ();
1024 expect (')', "missing ')'");
1037 terminal_buffer[0] = TOKEN_NOT_READ;
1038 if (PEEK_TOKEN () == TYPENAME && PEEK_TOKEN1 () == END_TOKEN)
1040 write_exp_elt_opcode(OP_TYPE);
1041 write_exp_elt_type(PEEK_LVAL ().tsym.type);
1042 write_exp_elt_opcode(OP_TYPE);
1047 if (terminal_buffer[0] != END_TOKEN)
1049 if (comma_terminates && terminal_buffer[0] == ',')
1050 lexptr--; /* Put the comma back. */
1052 error ("Junk after end of expression.");
1058 /* Implementation of a dynamically expandable buffer for processing input
1059 characters acquired through lexptr and building a value to return in
1062 static char *tempbuf; /* Current buffer contents */
1063 static int tempbufsize; /* Size of allocated buffer */
1064 static int tempbufindex; /* Current index into buffer */
1066 #define GROWBY_MIN_SIZE 64 /* Minimum amount to grow buffer by */
1068 #define CHECKBUF(size) \
1070 if (tempbufindex + (size) >= tempbufsize) \
1072 growbuf_by_size (size); \
1076 /* Grow the static temp buffer if necessary, including allocating the first one
1080 growbuf_by_size (count)
1085 growby = max (count, GROWBY_MIN_SIZE);
1086 tempbufsize += growby;
1087 if (tempbuf == NULL)
1089 tempbuf = (char *) malloc (tempbufsize);
1093 tempbuf = (char *) realloc (tempbuf, tempbufsize);
1097 /* Try to consume a simple name string token. If successful, returns
1098 a pointer to a nullbyte terminated copy of the name that can be used
1099 in symbol table lookups. If not successful, returns NULL. */
1102 match_simple_name_string ()
1104 char *tokptr = lexptr;
1106 if (isalpha (*tokptr) || *tokptr == '_')
1111 } while (isalnum (*tokptr) || (*tokptr == '_'));
1112 yylval.sval.ptr = lexptr;
1113 yylval.sval.length = tokptr - lexptr;
1115 result = copy_name (yylval.sval);
1121 /* Start looking for a value composed of valid digits as set by the base
1122 in use. Note that '_' characters are valid anywhere, in any quantity,
1123 and are simply ignored. Since we must find at least one valid digit,
1124 or reject this token as an integer literal, we keep track of how many
1125 digits we have encountered. */
1128 decode_integer_value (base, tokptrptr, ivalptr)
1133 char *tokptr = *tokptrptr;
1137 while (*tokptr != '\0')
1141 temp = tolower (temp);
1147 case '0': case '1': case '2': case '3': case '4':
1148 case '5': case '6': case '7': case '8': case '9':
1151 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
1167 /* Found something not in domain for current base. */
1168 tokptr--; /* Unconsume what gave us indigestion. */
1173 /* If we didn't find any digits, then we don't have a valid integer
1174 value, so reject the entire token. Otherwise, update the lexical
1175 scan pointer, and return non-zero for success. */
1183 *tokptrptr = tokptr;
1189 decode_integer_literal (valptr, tokptrptr)
1193 char *tokptr = *tokptrptr;
1196 int explicit_base = 0;
1198 /* Look for an explicit base specifier, which is optional. */
1231 /* If we found an explicit base ensure that the character after the
1232 explicit base is a single quote. */
1234 if (explicit_base && (*tokptr++ != '\''))
1239 /* Attempt to decode whatever follows as an integer value in the
1240 indicated base, updating the token pointer in the process and
1241 computing the value into ival. Also, if we have an explicit
1242 base, then the next character must not be a single quote, or we
1243 have a bitstring literal, so reject the entire token in this case.
1244 Otherwise, update the lexical scan pointer, and return non-zero
1247 if (!decode_integer_value (base, &tokptr, &ival))
1251 else if (explicit_base && (*tokptr == '\''))
1258 *tokptrptr = tokptr;
1263 /* If it wasn't for the fact that floating point values can contain '_'
1264 characters, we could just let strtod do all the hard work by letting it
1265 try to consume as much of the current token buffer as possible and
1266 find a legal conversion. Unfortunately we need to filter out the '_'
1267 characters before calling strtod, which we do by copying the other
1268 legal chars to a local buffer to be converted. However since we also
1269 need to keep track of where the last unconsumed character in the input
1270 buffer is, we have transfer only as many characters as may compose a
1271 legal floating point value. */
1273 static enum ch_terminal
1274 match_float_literal ()
1276 char *tokptr = lexptr;
1280 extern double strtod ();
1282 /* Make local buffer in which to build the string to convert. This is
1283 required because underscores are valid in chill floating point numbers
1284 but not in the string passed to strtod to convert. The string will be
1285 no longer than our input string. */
1287 copy = buf = (char *) alloca (strlen (tokptr) + 1);
1289 /* Transfer all leading digits to the conversion buffer, discarding any
1292 while (isdigit (*tokptr) || *tokptr == '_')
1301 /* Now accept either a '.', or one of [eEdD]. Dot is legal regardless
1302 of whether we found any leading digits, and we simply accept it and
1303 continue on to look for the fractional part and/or exponent. One of
1304 [eEdD] is legal only if we have seen digits, and means that there
1305 is no fractional part. If we find neither of these, then this is
1306 not a floating point number, so return failure. */
1311 /* Accept and then look for fractional part and/or exponent. */
1324 goto collect_exponent;
1332 /* We found a '.', copy any fractional digits to the conversion buffer, up
1333 to the first nondigit, non-underscore character. */
1335 while (isdigit (*tokptr) || *tokptr == '_')
1344 /* Look for an exponent, which must start with one of [eEdD]. If none
1345 is found, jump directly to trying to convert what we have collected
1362 /* Accept an optional '-' or '+' following one of [eEdD]. */
1365 if (*tokptr == '+' || *tokptr == '-')
1367 *copy++ = *tokptr++;
1370 /* Now copy an exponent into the conversion buffer. Note that at the
1371 moment underscores are *not* allowed in exponents. */
1373 while (isdigit (*tokptr))
1375 *copy++ = *tokptr++;
1378 /* If we transfered any chars to the conversion buffer, try to interpret its
1379 contents as a floating point value. If any characters remain, then we
1380 must not have a valid floating point string. */
1386 dval = strtod (buf, ©);
1391 return (FLOAT_LITERAL);
1397 /* Recognize a string literal. A string literal is a sequence
1398 of characters enclosed in matching single or double quotes, except that
1399 a single character inside single quotes is a character literal, which
1400 we reject as a string literal. To embed the terminator character inside
1401 a string, it is simply doubled (I.E. "this""is""one""string") */
1403 static enum ch_terminal
1404 match_string_literal ()
1406 char *tokptr = lexptr;
1408 for (tempbufindex = 0, tokptr++; *tokptr != '\0'; tokptr++)
1411 if (*tokptr == *lexptr)
1413 if (*(tokptr + 1) == *lexptr)
1422 tempbuf[tempbufindex++] = *tokptr;
1424 if (*tokptr == '\0' /* no terminator */
1425 || (tempbufindex == 1 && *tokptr == '\'')) /* char literal */
1431 tempbuf[tempbufindex] = '\0';
1432 yylval.sval.ptr = tempbuf;
1433 yylval.sval.length = tempbufindex;
1435 return (CHARACTER_STRING_LITERAL);
1439 /* Recognize a character literal. A character literal is single character
1440 or a control sequence, enclosed in single quotes. A control sequence
1441 is a comma separated list of one or more integer literals, enclosed
1442 in parenthesis and introduced with a circumflex character.
1444 EX: 'a' '^(7)' '^(7,8)'
1446 As a GNU chill extension, the syntax C'xx' is also recognized as a
1447 character literal, where xx is a hex value for the character.
1449 Note that more than a single character, enclosed in single quotes, is
1452 Also note that the control sequence form is not in GNU Chill since it
1453 is ambiguous with the string literal form using single quotes. I.E.
1454 is '^(7)' a character literal or a string literal. In theory it it
1455 possible to tell by context, but GNU Chill doesn't accept the control
1456 sequence form, so neither do we (for now the code is disabled).
1458 Returns CHARACTER_LITERAL if a match is found.
1461 static enum ch_terminal
1462 match_character_literal ()
1464 char *tokptr = lexptr;
1467 if ((*tokptr == 'c' || *tokptr == 'C') && (*(tokptr + 1) == '\''))
1469 /* We have a GNU chill extension form, so skip the leading "C'",
1470 decode the hex value, and then ensure that we have a trailing
1471 single quote character. */
1473 if (!decode_integer_value (16, &tokptr, &ival) || (*tokptr != '\''))
1479 else if (*tokptr == '\'')
1483 /* Determine which form we have, either a control sequence or the
1484 single character form. */
1486 if ((*tokptr == '^') && (*(tokptr + 1) == '('))
1488 #if 0 /* Disable, see note above. -fnf */
1489 /* Match and decode a control sequence. Return zero if we don't
1490 find a valid integer literal, or if the next unconsumed character
1491 after the integer literal is not the trailing ')'.
1492 FIXME: We currently don't handle the multiple integer literal
1495 if (!decode_integer_literal (&ival, &tokptr) || (*tokptr++ != ')'))
1508 /* The trailing quote has not yet been consumed. If we don't find
1509 it, then we have no match. */
1511 if (*tokptr++ != '\'')
1518 /* Not a character literal. */
1521 yylval.typed_val.val = ival;
1522 yylval.typed_val.type = builtin_type_chill_char;
1524 return (CHARACTER_LITERAL);
1527 /* Recognize an integer literal, as specified in Z.200 sec 5.2.4.2.
1528 Note that according to 5.2.4.2, a single "_" is also a valid integer
1529 literal, however GNU-chill requires there to be at least one "digit"
1530 in any integer literal. */
1532 static enum ch_terminal
1533 match_integer_literal ()
1535 char *tokptr = lexptr;
1538 if (!decode_integer_literal (&ival, &tokptr))
1544 yylval.typed_val.val = ival;
1545 #ifdef CC_HAS_LONG_LONG
1546 if (ival > 2147483647 || ival < -2147483648)
1547 yylval.typed_val.type = builtin_type_long_long;
1550 yylval.typed_val.type = builtin_type_int;
1552 return (INTEGER_LITERAL);
1556 /* Recognize a bit-string literal, as specified in Z.200 sec 5.2.4.8
1557 Note that according to 5.2.4.8, a single "_" is also a valid bit-string
1558 literal, however GNU-chill requires there to be at least one "digit"
1559 in any bit-string literal. */
1561 static enum ch_terminal
1562 match_bitstring_literal ()
1564 register char *tokptr = lexptr;
1574 /* Look for the required explicit base specifier. */
1595 /* Ensure that the character after the explicit base is a single quote. */
1597 if (*tokptr++ != '\'')
1602 while (*tokptr != '\0' && *tokptr != '\'')
1605 if (isupper (digit))
1606 digit = tolower (digit);
1612 case '0': case '1': case '2': case '3': case '4':
1613 case '5': case '6': case '7': case '8': case '9':
1616 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
1621 error ("Invalid character in bitstring or integer.");
1623 if (digit >= 1 << bits_per_char)
1625 /* Found something not in domain for current base. */
1626 error ("Too-large digit in bitstring or integer.");
1630 /* Extract bits from digit, packing them into the bitstring byte. */
1631 int k = TARGET_BYTE_ORDER == BIG_ENDIAN ? bits_per_char - 1 : 0;
1632 for (; TARGET_BYTE_ORDER == BIG_ENDIAN ? k >= 0 : k < bits_per_char;
1633 TARGET_BYTE_ORDER == BIG_ENDIAN ? k-- : k++)
1636 if (digit & (1 << k))
1638 tempbuf[tempbufindex] |=
1639 (TARGET_BYTE_ORDER == BIG_ENDIAN)
1640 ? (1 << (HOST_CHAR_BIT - 1 - bitoffset))
1644 if (bitoffset == HOST_CHAR_BIT)
1649 tempbuf[tempbufindex] = 0;
1655 /* Verify that we consumed everything up to the trailing single quote,
1656 and that we found some bits (IE not just underbars). */
1658 if (*tokptr++ != '\'')
1664 yylval.sval.ptr = tempbuf;
1665 yylval.sval.length = bitcount;
1667 return (BIT_STRING_LITERAL);
1677 static const struct token idtokentab[] =
1680 { "length", LENGTH },
1691 { "max", MAX_TOKEN },
1692 { "min", MIN_TOKEN },
1701 { "addr", ADDR_TOKEN },
1702 { "null", EMPTINESS_LITERAL }
1705 static const struct token tokentab2[] =
1707 { ":=", GDB_ASSIGNMENT },
1708 { "//", SLASH_SLASH },
1715 /* Read one token, getting characters through lexptr. */
1716 /* This is where we will check to make sure that the language and the
1717 operators used are compatible. */
1719 static enum ch_terminal
1723 enum ch_terminal token;
1727 /* Skip over any leading whitespace. */
1728 while (isspace (*lexptr))
1732 /* Look for special single character cases which can't be the first
1733 character of some other multicharacter token. */
1750 /* Look for characters which start a particular kind of multicharacter
1751 token, such as a character literal, register name, convenience
1752 variable name, string literal, etc. */
1757 /* First try to match a string literal, which is any
1758 sequence of characters enclosed in matching single or double
1759 quotes, except that a single character inside single quotes
1760 is a character literal, so we have to catch that case also. */
1761 token = match_string_literal ();
1766 if (*lexptr == '\'')
1768 token = match_character_literal ();
1777 token = match_character_literal ();
1784 yylval.sval.ptr = lexptr;
1787 } while (isalnum (*lexptr) || *lexptr == '_' || *lexptr == '$');
1788 yylval.sval.length = lexptr - yylval.sval.ptr;
1789 write_dollar_variable (yylval.sval);
1790 return GDB_VARIABLE;
1793 /* See if it is a special token of length 2. */
1794 for (i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++)
1796 if (STREQN (lexptr, tokentab2[i].operator, 2))
1799 return (tokentab2[i].token);
1802 /* Look for single character cases which which could be the first
1803 character of some other multicharacter token, but aren't, or we
1804 would already have found it. */
1814 /* Look for a float literal before looking for an integer literal, so
1815 we match as much of the input stream as possible. */
1816 token = match_float_literal ();
1821 token = match_bitstring_literal ();
1826 token = match_integer_literal ();
1832 /* Try to match a simple name string, and if a match is found, then
1833 further classify what sort of name it is and return an appropriate
1834 token. Note that attempting to match a simple name string consumes
1835 the token from lexptr, so we can't back out if we later find that
1836 we can't classify what sort of name it is. */
1838 inputname = match_simple_name_string ();
1840 if (inputname != NULL)
1842 char *simplename = (char*) alloca (strlen (inputname) + 1);
1844 char *dptr = simplename, *sptr = inputname;
1845 for (; *sptr; sptr++)
1846 *dptr++ = isupper (*sptr) ? tolower(*sptr) : *sptr;
1849 /* See if it is a reserved identifier. */
1850 for (i = 0; i < sizeof (idtokentab) / sizeof (idtokentab[0]); i++)
1852 if (STREQ (simplename, idtokentab[i].operator))
1854 return (idtokentab[i].token);
1858 /* Look for other special tokens. */
1859 if (STREQ (simplename, "true"))
1862 return (BOOLEAN_LITERAL);
1864 if (STREQ (simplename, "false"))
1867 return (BOOLEAN_LITERAL);
1870 sym = lookup_symbol (inputname, expression_context_block,
1871 VAR_NAMESPACE, (int *) NULL,
1872 (struct symtab **) NULL);
1873 if (sym == NULL && strcmp (inputname, simplename) != 0)
1875 sym = lookup_symbol (simplename, expression_context_block,
1876 VAR_NAMESPACE, (int *) NULL,
1877 (struct symtab **) NULL);
1881 yylval.ssym.stoken.ptr = NULL;
1882 yylval.ssym.stoken.length = 0;
1883 yylval.ssym.sym = sym;
1884 yylval.ssym.is_a_field_of_this = 0; /* FIXME, C++'ism */
1885 switch (SYMBOL_CLASS (sym))
1888 /* Found a procedure name. */
1889 return (GENERAL_PROCEDURE_NAME);
1891 /* Found a global or local static variable. */
1892 return (LOCATION_NAME);
1897 case LOC_REGPARM_ADDR:
1901 case LOC_BASEREG_ARG:
1902 if (innermost_block == NULL
1903 || contained_in (block_found, innermost_block))
1905 innermost_block = block_found;
1907 return (LOCATION_NAME);
1911 return (LOCATION_NAME);
1914 yylval.tsym.type = SYMBOL_TYPE (sym);
1917 case LOC_CONST_BYTES:
1918 case LOC_OPTIMIZED_OUT:
1919 error ("Symbol \"%s\" names no location.", inputname);
1923 else if (!have_full_symbols () && !have_partial_symbols ())
1925 error ("No symbol table is loaded. Use the \"file\" command.");
1929 error ("No symbol \"%s\" in current context.", inputname);
1933 /* Catch single character tokens which are not part of some
1938 case '.': /* Not float for example. */
1940 while (isspace (*lexptr)) lexptr++;
1941 inputname = match_simple_name_string ();
1947 return (ILLEGAL_TOKEN);
1951 write_lower_upper_value (opcode, type)
1952 enum exp_opcode opcode; /* Either UNOP_LOWER or UNOP_UPPER */
1956 write_exp_elt_opcode (opcode);
1959 extern LONGEST type_lower_upper ();
1960 struct type *result_type;
1961 LONGEST val = type_lower_upper (opcode, type, &result_type);
1962 write_exp_elt_opcode (OP_LONG);
1963 write_exp_elt_type (result_type);
1964 write_exp_elt_longcst (val);
1965 write_exp_elt_opcode (OP_LONG);