diff options
author | Keith Seitz <keiths@redhat.com> | 2018-08-10 10:48:03 -0700 |
---|---|---|
committer | Keith Seitz <keiths@redhat.com> | 2018-08-10 11:14:25 -0700 |
commit | 9cdfd9a26ef63ef2fee58c0e7475b5373b61e5d1 (patch) | |
tree | 65edd204b72edbe64897ffef609af0e566c4db26 /gdb/compile/compile-c-support.c | |
parent | 18cdc6d8f8e8b55e84783e0a2b5a80b41a0e917b (diff) | |
download | gdb-9cdfd9a26ef63ef2fee58c0e7475b5373b61e5d1.zip gdb-9cdfd9a26ef63ef2fee58c0e7475b5373b61e5d1.tar.gz gdb-9cdfd9a26ef63ef2fee58c0e7475b5373b61e5d1.tar.bz2 |
Change compile_instance/compile_c_instance into classes
This patch changes structs compile_instance and compile_c_instance into
classes.
Because of the nature of the change, there are a number of unavoidably
mechanical changes buried in here, such as turning variable access of the
POD struct into method calls, removing the struct keyword, and changing
access of the plugin from "c_plugin->operation()" to
"plugin ().operation ()".
There is one "non-trivial" change associated with this patch, though.
The type cache and symbol error maps have been moved into the base class,
believing these facilities would be used other language implementations.
[They are indeed re-used by C++.]
gdb/ChangeLog:
* compile/compile-c-support.c (c_get_compile_context): Use `new'
instead of `new_compile_instance'.
* compile/compile-c-symbols.c (compile_instance::insert_symbol_error):
Update description.
If the symbol error map is not initialized, create it.
(generate_c_for_for_one_symbol): Do not check/initialize
the symbol error map.
* compile/compile-c-types.c (compile_c_instance): Make a class.
Update all callers.
(compile_instance::compile_instance): Initialize the type cache.
(get_cached_type): New function.
(insert_type): Update description.
(compile_c_instance::m_default_cflags): Define.
(convert_type): Update description. Use get_cached_type.
(delete_instance): Moved to destructor.
(new_compile_instance): Moved to constructor.
* compile/compile-c.h (compile_c_instance): Make class inheriting
from compile_instance.
<base>: Remove field.
<type_map, symbol_err_map>: Move to base class.
<c_plugin>: Rename to `m_plugin' and remove pointer type.
* compile/compile-internal.h (compile_instance): Make class.
<type_map_t, symbol_err_map_t>: Define.
<fe>: Rename to `m_gcc_fe'.
<scope, block, gcc_target_options>: Add `m_' prefix.
<m_type_map, m_symbol_err_map>: New fields, moved from
compile_c_instance.
<destroy>: Remove.
(convert_type, new_compile_instance): Remove.
* compile/compile.c (cleanup_compile_instance): Remove.
(compile_to_object): Use unique_ptr to eliminate cleanups.
(compile_instance::set_print_callback, compile_instance::version)
(compile_instance::set_verbose)
(compile_instance::set_driver_filename)
(compile_instance::set_triplet_regexp)
(compile_instance::set_arguments)
(compile_instance::set_source_file)
(compile_instance::compile): Define.
Diffstat (limited to 'gdb/compile/compile-c-support.c')
-rw-r--r-- | gdb/compile/compile-c-support.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/gdb/compile/compile-c-support.c b/gdb/compile/compile-c-support.c index 41fead9..d77c7d9 100644 --- a/gdb/compile/compile-c-support.c +++ b/gdb/compile/compile-c-support.c @@ -96,7 +96,7 @@ load_libcc (void) This function calls the symbol returned from the load_libcc function. This will provide the gcc_c_context. */ -struct compile_instance * +compile_instance * c_get_compile_context (void) { static gcc_c_fe_context_function *func; @@ -114,7 +114,7 @@ c_get_compile_context (void) error (_("The loaded version of GCC does not support the required version " "of the API.")); - return new_compile_instance (context); + return new compile_c_instance (context); } @@ -334,13 +334,14 @@ generate_register_struct (struct ui_file *stream, struct gdbarch *gdbarch, indicates the value of $PC. */ std::string -c_compute_program (struct compile_instance *inst, +c_compute_program (compile_instance *inst, const char *input, struct gdbarch *gdbarch, const struct block *expr_block, CORE_ADDR expr_pc) { - struct compile_c_instance *context = (struct compile_c_instance *) inst; + compile_c_instance *context + = static_cast<compile_c_instance *> (inst); string_file buf; string_file var_stream; @@ -350,7 +351,7 @@ c_compute_program (struct compile_instance *inst, /* Do not generate local variable information for "raw" compilations. In this case we aren't emitting our own function and the user's code may only refer to globals. */ - if (inst->scope != COMPILE_I_RAW_SCOPE) + if (inst->scope () != COMPILE_I_RAW_SCOPE) { int i; @@ -384,11 +385,11 @@ c_compute_program (struct compile_instance *inst, generate_register_struct (&buf, gdbarch, registers_used.get ()); } - add_code_header (inst->scope, &buf); + add_code_header (inst->scope (), &buf); - if (inst->scope == COMPILE_I_SIMPLE_SCOPE - || inst->scope == COMPILE_I_PRINT_ADDRESS_SCOPE - || inst->scope == COMPILE_I_PRINT_VALUE_SCOPE) + if (inst->scope () == COMPILE_I_SIMPLE_SCOPE + || inst->scope () == COMPILE_I_PRINT_ADDRESS_SCOPE + || inst->scope () == COMPILE_I_PRINT_VALUE_SCOPE) { buf.write (var_stream.c_str (), var_stream.size ()); buf.puts ("#pragma GCC user_expression\n"); @@ -398,12 +399,12 @@ c_compute_program (struct compile_instance *inst, works properly. Otherwise gcc thinks that the "extern" declaration is in the same scope as the declaration provided by gdb. */ - if (inst->scope != COMPILE_I_RAW_SCOPE) + if (inst->scope () != COMPILE_I_RAW_SCOPE) buf.puts ("{\n"); buf.puts ("#line 1 \"gdb command line\"\n"); - switch (inst->scope) + switch (inst->scope ()) { case COMPILE_I_PRINT_ADDRESS_SCOPE: case COMPILE_I_PRINT_VALUE_SCOPE: @@ -413,7 +414,7 @@ c_compute_program (struct compile_instance *inst, "memcpy (" COMPILE_I_PRINT_OUT_ARG ", %s" COMPILE_I_EXPR_VAL ",\n" "sizeof (*" COMPILE_I_EXPR_PTR_TYPE "));\n" , input, input, - (inst->scope == COMPILE_I_PRINT_ADDRESS_SCOPE + (inst->scope () == COMPILE_I_PRINT_ADDRESS_SCOPE ? "&" : "")); break; default: @@ -428,9 +429,9 @@ c_compute_program (struct compile_instance *inst, if (strchr (input, '\n') == NULL) buf.puts (";\n"); - if (inst->scope != COMPILE_I_RAW_SCOPE) + if (inst->scope () != COMPILE_I_RAW_SCOPE) buf.puts ("}\n"); - add_code_footer (inst->scope, &buf); + add_code_footer (inst->scope (), &buf); return std::move (buf.string ()); } |