X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fcompile%2Fcompile-cplus-types.c;h=523ab34b403e70923ceda8464039077b9a94ae3c;hb=7d93a1e0b6af703c75daa93456608f8bb5f34f13;hp=3de0d8eee8c2753ad49ccc4caabad7d987c6eb20;hpb=42a4f53d2bf8938c2aeda9f52be7a20534b214a9;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/compile/compile-cplus-types.c b/gdb/compile/compile-cplus-types.c index 3de0d8eee8..523ab34b40 100644 --- a/gdb/compile/compile-cplus-types.c +++ b/gdb/compile/compile-cplus-types.c @@ -1,6 +1,6 @@ /* Convert types from GDB to GCC - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -19,22 +19,20 @@ #include "defs.h" -#include "common/preprocessor.h" +#include "gdbsupport/preprocessor.h" #include "gdbtypes.h" #include "compile-internal.h" #include "compile-cplus.h" -#include "gdb_assert.h" +#include "gdbsupport/gdb_assert.h" #include "symtab.h" #include "source.h" #include "cp-support.h" #include "cp-abi.h" -#include "symtab.h" #include "objfiles.h" #include "block.h" #include "gdbcmd.h" #include "c-lang.h" -#include "compile-c.h" /* Included for c_get_range_decl_name - et al. */ +#include "compile-c.h" #include /* Default compile flags for C++. */ @@ -43,11 +41,11 @@ const char *compile_cplus_instance::m_default_cflags = "-std=gnu++11"; /* Flag to enable internal debugging. */ -static int debug_compile_cplus_types = 0; +static bool debug_compile_cplus_types = false; /* Flag to enable internal scope switching debugging. */ -static int debug_compile_cplus_scopes = 0; +static bool debug_compile_cplus_scopes = false; /* Forward declarations. */ @@ -63,11 +61,11 @@ compile_cplus_instance::decl_name (const char *natural) if (natural == nullptr) return nullptr; - char *name = cp_func_name (natural); + gdb::unique_xmalloc_ptr name = cp_func_name (natural); if (name != nullptr) - return gdb::unique_xmalloc_ptr (name); + return name; - return gdb::unique_xmalloc_ptr (xstrdup (natural)); + return make_unique_xstrdup (natural); } /* Get the access flag for the NUM'th field of TYPE. */ @@ -90,7 +88,7 @@ get_field_access_flag (const struct type *type, int num) enum gcc_cp_symbol_kind get_method_access_flag (const struct type *type, int fni, int num) { - gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT); + gdb_assert (type->code () == TYPE_CODE_STRUCT); /* If this type was not declared a class, everything is public. */ if (!TYPE_DECLARED_CLASS (type)) @@ -114,7 +112,7 @@ debug_print_scope (const compile_scope &scope) for (const auto &comp: scope) { const char *symbol = (comp.bsymbol.symbol != nullptr - ? SYMBOL_NATURAL_NAME (comp.bsymbol.symbol) + ? comp.bsymbol.symbol->natural_name () : ""); printf_unfiltered ("\tname = %s, symbol = %s\n", comp.name.c_str (), @@ -163,7 +161,7 @@ type_name_to_scope (const char *type_name, const struct block *block) scope.push_back (comp); - if (TYPE_CODE (SYMBOL_TYPE (bsymbol.symbol)) != TYPE_CODE_NAMESPACE) + if (SYMBOL_TYPE (bsymbol.symbol)->code () != TYPE_CODE_NAMESPACE) { /* We're done. */ break; @@ -273,7 +271,7 @@ compile_cplus_instance::enter_scope (compile_scope &&new_scope) (m_scopes.back ().begin (), m_scopes.back ().end () - 1, [this] (const scope_component &comp) { - gdb_assert (TYPE_CODE (SYMBOL_TYPE (comp.bsymbol.symbol)) + gdb_assert (SYMBOL_TYPE (comp.bsymbol.symbol)->code () == TYPE_CODE_NAMESPACE); const char *ns = (comp.name == CP_ANONYMOUS_NAMESPACE_STR ? nullptr @@ -315,7 +313,7 @@ compile_cplus_instance::leave_scope () std::for_each (current.begin (),current.end () - 1, [this] (const scope_component &comp) { - gdb_assert (TYPE_CODE (SYMBOL_TYPE (comp.bsymbol.symbol)) + gdb_assert (SYMBOL_TYPE (comp.bsymbol.symbol)->code () == TYPE_CODE_NAMESPACE); this->plugin ().pop_binding_level (comp.name.c_str ()); }); @@ -366,7 +364,7 @@ compile_cplus_instance::new_scope (const char *type_name, struct type *type) } else { - if (TYPE_NAME (type) == nullptr) + if (type->name () == nullptr) { /* Anonymous type */ @@ -385,8 +383,8 @@ compile_cplus_instance::new_scope (const char *type_name, struct type *type) { scope_component comp = { - decl_name (TYPE_NAME (type)).get (), - lookup_symbol (TYPE_NAME (type), block (), VAR_DOMAIN, nullptr) + decl_name (type->name ()).get (), + lookup_symbol (type->name (), block (), VAR_DOMAIN, nullptr) }; scope.push_back (comp); } @@ -415,7 +413,7 @@ compile_cplus_convert_reference (compile_cplus_instance *instance, gcc_type target = instance->convert_type (TYPE_TARGET_TYPE (type)); enum gcc_cp_ref_qualifiers quals = GCC_CP_REF_QUAL_NONE; - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_REF: quals = GCC_CP_REF_QUAL_LVALUE; @@ -517,13 +515,13 @@ compile_cplus_convert_typedef (compile_cplus_instance *instance, struct type *type, enum gcc_cp_symbol_kind nested_access) { - compile_scope scope = instance->new_scope (TYPE_NAME (type), type); + compile_scope scope = instance->new_scope (type->name (), type); if (scope.nested_type () != GCC_TYPE_NONE) return scope.nested_type (); gdb::unique_xmalloc_ptr name - = compile_cplus_instance::decl_name (TYPE_NAME (type)); + = compile_cplus_instance::decl_name (type->name ()); /* Make sure the scope for this type has been pushed. */ instance->enter_scope (std::move (scope)); @@ -809,10 +807,10 @@ compile_cplus_convert_struct_or_union (compile_cplus_instance *instance, /* Get the decl name of this type. */ gdb::unique_xmalloc_ptr name - = compile_cplus_instance::decl_name (TYPE_NAME (type)); + = compile_cplus_instance::decl_name (type->name ()); /* Create a new scope for TYPE. */ - compile_scope scope = instance->new_scope (TYPE_NAME (type), type); + compile_scope scope = instance->new_scope (type->name (), type); if (scope.nested_type () != GCC_TYPE_NONE) { @@ -828,7 +826,7 @@ compile_cplus_convert_struct_or_union (compile_cplus_instance *instance, table. This lets recursive types work. */ gcc_decl resuld; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) { const char *what = TYPE_DECLARED_CLASS (type) ? "struct" : "class"; @@ -841,14 +839,14 @@ compile_cplus_convert_struct_or_union (compile_cplus_instance *instance, } else { - gdb_assert (TYPE_CODE (type) == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_UNION); resuld = instance->plugin ().build_decl ("union", name.get (), GCC_CP_SYMBOL_UNION | nested_access, 0, nullptr, 0, filename, line); } gcc_type result; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) { struct gcc_vbase_array bases; int num_baseclasses = TYPE_N_BASECLASSES (type); @@ -880,7 +878,7 @@ compile_cplus_convert_struct_or_union (compile_cplus_instance *instance, } else { - gdb_assert (TYPE_CODE (type) == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_UNION); result = instance->plugin ().start_class_type (name.get (), resuld, nullptr, filename, line); } @@ -912,10 +910,10 @@ static gcc_type compile_cplus_convert_enum (compile_cplus_instance *instance, struct type *type, enum gcc_cp_symbol_kind nested_access) { - int scoped_enum_p = FALSE; + bool scoped_enum_p = false; /* Create a new scope for this type. */ - compile_scope scope = instance->new_scope (TYPE_NAME (type), type); + compile_scope scope = instance->new_scope (type->name (), type); if (scope.nested_type () != GCC_TYPE_NONE) { @@ -925,7 +923,7 @@ compile_cplus_convert_enum (compile_cplus_instance *instance, struct type *type, } gdb::unique_xmalloc_ptr name - = compile_cplus_instance::decl_name (TYPE_NAME (type)); + = compile_cplus_instance::decl_name (type->name ()); /* Push all scopes. */ instance->enter_scope (std::move (scope)); @@ -1024,7 +1022,7 @@ compile_cplus_convert_int (compile_cplus_instance *instance, struct type *type) } return instance->plugin ().get_int_type - (TYPE_UNSIGNED (type), TYPE_LENGTH (type), TYPE_NAME (type)); + (TYPE_UNSIGNED (type), TYPE_LENGTH (type), type->name ()); } /* Convert a floating-point type to its gcc representation. */ @@ -1034,7 +1032,7 @@ compile_cplus_convert_float (compile_cplus_instance *instance, struct type *type) { return instance->plugin ().get_float_type - (TYPE_LENGTH (type), TYPE_NAME (type)); + (TYPE_LENGTH (type), type->name ()); } /* Convert the 'void' type to its gcc representation. */ @@ -1104,9 +1102,9 @@ static gcc_type compile_cplus_convert_namespace (compile_cplus_instance *instance, struct type *type) { - compile_scope scope = instance->new_scope (TYPE_NAME (type), type); + compile_scope scope = instance->new_scope (type->name (), type); gdb::unique_xmalloc_ptr name - = compile_cplus_instance::decl_name (TYPE_NAME (type)); + = compile_cplus_instance::decl_name (type->name ()); /* Push scope. */ instance->enter_scope (std::move (scope)); @@ -1142,7 +1140,7 @@ convert_type_cplus_basic (compile_cplus_instance *instance, | TYPE_INSTANCE_FLAG_RESTRICT)) != 0) return compile_cplus_convert_qualified (instance, type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_REF: case TYPE_CODE_RVALUE_REF: @@ -1200,7 +1198,7 @@ convert_type_cplus_basic (compile_cplus_instance *instance, } std::string s = string_printf (_("unhandled TYPE_CODE %d"), - TYPE_CODE (type)); + type->code ()); return instance->plugin ().error (s.c_str ()); } @@ -1406,6 +1404,7 @@ gcc_cp_plugin::pop_binding_level (const char *debug_name) return pop_binding_level (); } +void _initialize_compile_cplus_types (); void _initialize_compile_cplus_types () {