/* Multiple source language support for GDB.
- Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ Copyright (C) 1991-2018 Free Software Foundation, Inc.
Contributed by the Department of Computer Science at the State University
of New York at Buffalo.
#include "c-lang.h"
#include <algorithm>
-static void unk_lang_error (const char *);
-
static int unk_lang_parser (struct parser_state *);
static void set_range_case (void);
}
void
-default_get_string (struct value *value, gdb_byte **buffer, int *length,
- struct type **char_type, const char **charset)
+default_get_string (struct value *value,
+ gdb::unique_xmalloc_ptr<gdb_byte> *buffer,
+ int *length, struct type **char_type, const char **charset)
{
error (_("Getting a string is unsupported in this language."));
}
bool
default_symbol_name_matcher (const char *symbol_search_name,
const lookup_name_info &lookup_name,
- completion_match *match)
+ completion_match_result *comp_match_res)
{
const std::string &name = lookup_name.name ();
-
+ completion_match_for_lcd *match_for_lcd
+ = (comp_match_res != NULL ? &comp_match_res->match_for_lcd : NULL);
strncmp_iw_mode mode = (lookup_name.completion_mode ()
? strncmp_iw_mode::NORMAL
: strncmp_iw_mode::MATCH_PARAMS);
if (strncmp_iw_with_mode (symbol_search_name, name.c_str (), name.size (),
- mode) == 0)
+ mode, language_minimal, match_for_lcd) == 0)
{
- if (match != NULL)
- match->set_match (symbol_search_name);
+ if (comp_match_res != NULL)
+ comp_match_res->set_match (symbol_search_name);
return true;
}
else
/* See language.h. */
symbol_name_matcher_ftype *
-language_get_symbol_name_matcher (const language_defn *lang,
- const lookup_name_info &lookup_name)
+get_symbol_name_matcher (const language_defn *lang,
+ const lookup_name_info &lookup_name)
{
+ /* If currently in Ada mode, and the lookup name is wrapped in
+ '<...>', hijack all symbol name comparisons using the Ada
+ matcher, which handles the verbatim matching. */
+ if (current_language->la_language == language_ada
+ && lookup_name.ada ().verbatim_p ())
+ return current_language->la_get_symbol_name_matcher (lookup_name);
+
if (lang->la_get_symbol_name_matcher != nullptr)
return lang->la_get_symbol_name_matcher (lookup_name);
return default_symbol_name_matcher;
return 1;
}
-static void
-unk_lang_error (const char *msg)
-{
- error (_("Attempted to parse an expression with unknown language"));
-}
-
static void
unk_lang_emit_char (int c, struct type *type, struct ui_file *stream,
int quoter)
NULL,
&exp_descriptor_standard,
unk_lang_parser,
- unk_lang_error,
null_post_parser,
unk_lang_printchar, /* Print character constant */
unk_lang_printstr,
default_read_var_value, /* la_read_var_value */
unk_lang_trampoline, /* Language specific skip_trampoline */
"this", /* name_of_this */
+ true, /* store_sym_names_in_linkage_form_p */
basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
basic_lookup_transparent_type,/* lookup_transparent_type */
unk_lang_demangle, /* Language specific symbol demangler */
NULL,
&exp_descriptor_standard,
unk_lang_parser,
- unk_lang_error,
null_post_parser,
unk_lang_printchar, /* Print character constant */
unk_lang_printstr,
default_read_var_value, /* la_read_var_value */
unk_lang_trampoline, /* Language specific skip_trampoline */
"this", /* name_of_this */
+ false, /* store_sym_names_in_linkage_form_p */
basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
basic_lookup_transparent_type,/* lookup_transparent_type */
unk_lang_demangle, /* Language specific symbol demangler */