| Index: gdb/ada-exp.y
|
| diff --git a/gdb/ada-exp.y b/gdb/ada-exp.y
|
| index 1a80b0b1fe49d6934c60d4b0ded832e3427cfabb..0a0c1e795ddba29b94a3941368a3e95898d131c5 100644
|
| --- a/gdb/ada-exp.y
|
| +++ b/gdb/ada-exp.y
|
| @@ -1,6 +1,5 @@
|
| /* YACC parser for Ada expressions, for GDB.
|
| - Copyright (C) 1986, 1989-1991, 1993-1994, 1997, 2000, 2003-2004,
|
| - 2007-2012 Free Software Foundation, Inc.
|
| + Copyright (C) 1986-2013 Free Software Foundation, Inc.
|
|
|
| This file is part of GDB.
|
|
|
| @@ -37,7 +36,7 @@
|
| %{
|
|
|
| #include "defs.h"
|
| -#include "gdb_string.h"
|
| +#include <string.h>
|
| #include <ctype.h>
|
| #include "expression.h"
|
| #include "value.h"
|
| @@ -126,24 +125,22 @@ static int yylex (void);
|
|
|
| void yyerror (char *);
|
|
|
| -static struct stoken string_to_operator (struct stoken);
|
| -
|
| static void write_int (LONGEST, struct type *);
|
|
|
| -static void write_object_renaming (struct block *, const char *, int,
|
| +static void write_object_renaming (const struct block *, const char *, int,
|
| const char *, int);
|
|
|
| -static struct type* write_var_or_type (struct block *, struct stoken);
|
| +static struct type* write_var_or_type (const struct block *, struct stoken);
|
|
|
| static void write_name_assoc (struct stoken);
|
|
|
| static void write_exp_op_with_string (enum exp_opcode, struct stoken);
|
|
|
| -static struct block *block_lookup (struct block *, char *);
|
| +static struct block *block_lookup (struct block *, const char *);
|
|
|
| static LONGEST convert_char_literal (struct type *, LONGEST);
|
|
|
| -static void write_ambiguous_var (struct block *, char *, int);
|
| +static void write_ambiguous_var (const struct block *, char *, int);
|
|
|
| static struct type *type_int (void);
|
|
|
| @@ -787,39 +784,11 @@ yyerror (char *msg)
|
| error (_("Error in expression, near `%s'."), lexptr);
|
| }
|
|
|
| -/* The operator name corresponding to operator symbol STRING (adds
|
| - quotes and maps to lower-case). Destroys the previous contents of
|
| - the array pointed to by STRING.ptr. Error if STRING does not match
|
| - a valid Ada operator. Assumes that STRING.ptr points to a
|
| - null-terminated string and that, if STRING is a valid operator
|
| - symbol, the array pointed to by STRING.ptr contains at least
|
| - STRING.length+3 characters. */
|
| -
|
| -static struct stoken
|
| -string_to_operator (struct stoken string)
|
| -{
|
| - int i;
|
| -
|
| - for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
|
| - {
|
| - if (string.length == strlen (ada_opname_table[i].decoded)-2
|
| - && strncasecmp (string.ptr, ada_opname_table[i].decoded+1,
|
| - string.length) == 0)
|
| - {
|
| - strncpy (string.ptr, ada_opname_table[i].decoded,
|
| - string.length+2);
|
| - string.length += 2;
|
| - return string;
|
| - }
|
| - }
|
| - error (_("Invalid operator symbol `%s'"), string.ptr);
|
| -}
|
| -
|
| /* Emit expression to access an instance of SYM, in block BLOCK (if
|
| * non-NULL), and with :: qualification ORIG_LEFT_CONTEXT. */
|
| static void
|
| -write_var_from_sym (struct block *orig_left_context,
|
| - struct block *block,
|
| +write_var_from_sym (const struct block *orig_left_context,
|
| + const struct block *block,
|
| struct symbol *sym)
|
| {
|
| if (orig_left_context == NULL && symbol_read_needs_frame (sym))
|
| @@ -867,7 +836,7 @@ write_exp_op_with_string (enum exp_opcode opcode, struct stoken token)
|
| * new encoding entirely (FIXME pnh 7/20/2007). */
|
|
|
| static void
|
| -write_object_renaming (struct block *orig_left_context,
|
| +write_object_renaming (const struct block *orig_left_context,
|
| const char *renamed_entity, int renamed_entity_len,
|
| const char *renaming_expr, int max_depth)
|
| {
|
| @@ -881,7 +850,7 @@ write_object_renaming (struct block *orig_left_context,
|
| if (orig_left_context == NULL)
|
| orig_left_context = get_selected_block (NULL);
|
|
|
| - name = obsavestring (renamed_entity, renamed_entity_len, &temp_parse_space);
|
| + name = obstack_copy0 (&temp_parse_space, renamed_entity, renamed_entity_len);
|
| ada_lookup_encoded_symbol (name, orig_left_context, VAR_DOMAIN, &sym_info);
|
| if (sym_info.sym == NULL)
|
| error (_("Could not find renamed variable: %s"), ada_decode (name));
|
| @@ -950,8 +919,8 @@ write_object_renaming (struct block *orig_left_context,
|
| end = renaming_expr + strlen (renaming_expr);
|
|
|
| index_name =
|
| - obsavestring (renaming_expr, end - renaming_expr,
|
| - &temp_parse_space);
|
| + obstack_copy0 (&temp_parse_space, renaming_expr,
|
| + end - renaming_expr);
|
| renaming_expr = end;
|
|
|
| ada_lookup_encoded_symbol (index_name, NULL, VAR_DOMAIN,
|
| @@ -983,6 +952,8 @@ write_object_renaming (struct block *orig_left_context,
|
| {
|
| struct stoken field_name;
|
| const char *end;
|
| + char *buf;
|
| +
|
| renaming_expr += 1;
|
|
|
| if (slice_state != SIMPLE_INDEX)
|
| @@ -991,9 +962,10 @@ write_object_renaming (struct block *orig_left_context,
|
| if (end == NULL)
|
| end = renaming_expr + strlen (renaming_expr);
|
| field_name.length = end - renaming_expr;
|
| - field_name.ptr = malloc (end - renaming_expr + 1);
|
| - strncpy (field_name.ptr, renaming_expr, end - renaming_expr);
|
| - field_name.ptr[end - renaming_expr] = '\000';
|
| + buf = malloc (end - renaming_expr + 1);
|
| + field_name.ptr = buf;
|
| + strncpy (buf, renaming_expr, end - renaming_expr);
|
| + buf[end - renaming_expr] = '\000';
|
| renaming_expr = end;
|
| write_exp_op_with_string (STRUCTOP_STRUCT, field_name);
|
| break;
|
| @@ -1011,9 +983,9 @@ write_object_renaming (struct block *orig_left_context,
|
| }
|
|
|
| static struct block*
|
| -block_lookup (struct block *context, char *raw_name)
|
| +block_lookup (struct block *context, const char *raw_name)
|
| {
|
| - char *name;
|
| + const char *name;
|
| struct ada_symbol_info *syms;
|
| int nsyms;
|
| struct symtab *symtab;
|
| @@ -1026,7 +998,7 @@ block_lookup (struct block *context, char *raw_name)
|
| else
|
| name = ada_encode (raw_name);
|
|
|
| - nsyms = ada_lookup_symbol_list (name, context, VAR_DOMAIN, &syms, 1);
|
| + nsyms = ada_lookup_symbol_list (name, context, VAR_DOMAIN, &syms);
|
| if (context == NULL
|
| && (nsyms == 0 || SYMBOL_CLASS (syms[0].sym) != LOC_BLOCK))
|
| symtab = lookup_symtab (name);
|
| @@ -1161,13 +1133,13 @@ write_selectors (char *sels)
|
| a temporary symbol that is valid until the next call to ada_parse.
|
| */
|
| static void
|
| -write_ambiguous_var (struct block *block, char *name, int len)
|
| +write_ambiguous_var (const struct block *block, char *name, int len)
|
| {
|
| struct symbol *sym =
|
| obstack_alloc (&temp_parse_space, sizeof (struct symbol));
|
| memset (sym, 0, sizeof (struct symbol));
|
| SYMBOL_DOMAIN (sym) = UNDEF_DOMAIN;
|
| - SYMBOL_LINKAGE_NAME (sym) = obsavestring (name, len, &temp_parse_space);
|
| + SYMBOL_LINKAGE_NAME (sym) = obstack_copy0 (&temp_parse_space, name, len);
|
| SYMBOL_LANGUAGE (sym) = language_ada;
|
|
|
| write_exp_elt_opcode (OP_VAR_VALUE);
|
| @@ -1253,7 +1225,7 @@ get_symbol_field_type (struct symbol *sym, char *encoded_field_name)
|
| identifier). */
|
|
|
| static struct type*
|
| -write_var_or_type (struct block *block, struct stoken name0)
|
| +write_var_or_type (const struct block *block, struct stoken name0)
|
| {
|
| int depth;
|
| char *encoded_name;
|
| @@ -1264,7 +1236,7 @@ write_var_or_type (struct block *block, struct stoken name0)
|
|
|
| encoded_name = ada_encode (name0.ptr);
|
| name_len = strlen (encoded_name);
|
| - encoded_name = obsavestring (encoded_name, name_len, &temp_parse_space);
|
| + encoded_name = obstack_copy0 (&temp_parse_space, encoded_name, name_len);
|
| for (depth = 0; depth < MAX_RENAMING_CHAIN_LENGTH; depth += 1)
|
| {
|
| int tail_index;
|
| @@ -1283,7 +1255,7 @@ write_var_or_type (struct block *block, struct stoken name0)
|
|
|
| encoded_name[tail_index] = '\0';
|
| nsyms = ada_lookup_symbol_list (encoded_name, block,
|
| - VAR_DOMAIN, &syms, 1);
|
| + VAR_DOMAIN, &syms);
|
| encoded_name[tail_index] = terminator;
|
|
|
| /* A single symbol may rename a package or object. */
|
| @@ -1370,9 +1342,9 @@ write_var_or_type (struct block *block, struct stoken name0)
|
| }
|
| else if (nsyms == 0)
|
| {
|
| - struct minimal_symbol *msym
|
| + struct bound_minimal_symbol msym
|
| = ada_lookup_simple_minsym (encoded_name);
|
| - if (msym != NULL)
|
| + if (msym.minsym != NULL)
|
| {
|
| write_exp_msymbol (msym);
|
| /* Maybe cause error here rather than later? FIXME? */
|
| @@ -1431,7 +1403,7 @@ write_name_assoc (struct stoken name)
|
| {
|
| struct ada_symbol_info *syms;
|
| int nsyms = ada_lookup_symbol_list (name.ptr, expression_context_block,
|
| - VAR_DOMAIN, &syms, 1);
|
| + VAR_DOMAIN, &syms);
|
| if (nsyms != 1 || SYMBOL_CLASS (syms[0].sym) == LOC_TYPEDEF)
|
| write_exp_op_with_string (OP_NAME, name);
|
| else
|
| @@ -1534,12 +1506,3 @@ _initialize_ada_exp (void)
|
| {
|
| obstack_init (&temp_parse_space);
|
| }
|
| -
|
| -/* FIXME: hilfingr/2004-10-05: Hack to remove warning. The function
|
| - string_to_operator is supposed to be used for cases where one
|
| - calls an operator function with prefix notation, as in
|
| - "+" (a, b), but at some point, this code seems to have gone
|
| - missing. */
|
| -
|
| -struct stoken (*dummy_string_to_ada_operator) (struct stoken)
|
| - = string_to_operator;
|
|
|