+2020-09-17 Tom Tromey <tom@tromey.com>
+
+ * value.c (preserve_values): Update.
+ * python/py-type.c (save_objfile_types): Update.
+ * guile/scm-type.c (save_objfile_types): Update.
+ * gdbtypes.h (create_copied_types_hash): Return htab_up.
+ * gdbtypes.c (create_copied_types_hash): Return htab_up.
+ * compile/compile-object-run.c (compile_object_run): Update.
+
2020-09-17 Tom Tromey <tom@tromey.com>
* typeprint.h (class typedef_hash_table) <~typedef_hash_table>:
try
{
struct type *func_type = SYMBOL_TYPE (func_sym);
- htab_t copied_types;
int current_arg = 0;
struct value **vargs;
/* OBJFILE may disappear while FUNC_TYPE still will be in use. */
- copied_types = create_copied_types_hash (objfile);
- func_type = copy_type_recursive (objfile, func_type, copied_types);
- htab_delete (copied_types);
+ htab_up copied_types = create_copied_types_hash (objfile);
+ func_type = copy_type_recursive (objfile, func_type, copied_types.get ());
gdb_assert (func_type->code () == TYPE_CODE_FUNC);
func_val = value_from_pointer (lookup_pointer_type (func_type),
types without duplicates. We use OBJFILE's obstack, because
OBJFILE is about to be deleted. */
-htab_t
+htab_up
create_copied_types_hash (struct objfile *objfile)
{
- return htab_create_alloc_ex (1, type_pair_hash, type_pair_eq,
- NULL, &objfile->objfile_obstack,
- hashtab_obstack_allocate,
- dummy_obstack_deallocate);
+ return htab_up (htab_create_alloc_ex (1, type_pair_hash, type_pair_eq,
+ NULL, &objfile->objfile_obstack,
+ hashtab_obstack_allocate,
+ dummy_obstack_deallocate));
}
/* Recursively copy (deep copy) a dynamic attribute list of a type. */
extern void maintenance_print_type (const char *, int);
-extern htab_t create_copied_types_hash (struct objfile *objfile);
+extern htab_up create_copied_types_hash (struct objfile *objfile);
extern struct type *copy_type_recursive (struct objfile *objfile,
struct type *type,
save_objfile_types (struct objfile *objfile, void *datum)
{
htab_t htab = (htab_t) datum;
- htab_t copied_types;
if (!gdb_scheme_initialized)
return;
- copied_types = create_copied_types_hash (objfile);
+ htab_up copied_types = create_copied_types_hash (objfile);
if (htab != NULL)
{
- htab_traverse_noresize (htab, tyscm_copy_type_recursive, copied_types);
+ htab_traverse_noresize (htab, tyscm_copy_type_recursive, copied_types.get ());
htab_delete (htab);
}
-
- htab_delete (copied_types);
}
\f
/* Administrivia for field smobs. */
save_objfile_types (struct objfile *objfile, void *datum)
{
type_object *obj = (type_object *) datum;
- htab_t copied_types;
if (!gdb_python_initialized)
return;
operating on. */
gdbpy_enter enter_py (objfile->arch (), current_language);
- copied_types = create_copied_types_hash (objfile);
+ htab_up copied_types = create_copied_types_hash (objfile);
while (obj)
{
type_object *next = obj->next;
- htab_empty (copied_types);
+ htab_empty (copied_types.get ());
- obj->type = copy_type_recursive (objfile, obj->type, copied_types);
+ obj->type = copy_type_recursive (objfile, obj->type,
+ copied_types.get ());
obj->next = NULL;
obj->prev = NULL;
obj = next;
}
-
- htab_delete (copied_types);
}
static void
void
preserve_values (struct objfile *objfile)
{
- htab_t copied_types;
struct internalvar *var;
/* Create the hash table. We allocate on the objfile's obstack, since
it is soon to be deleted. */
- copied_types = create_copied_types_hash (objfile);
+ htab_up copied_types = create_copied_types_hash (objfile);
for (const value_ref_ptr &item : value_history)
- preserve_one_value (item.get (), objfile, copied_types);
+ preserve_one_value (item.get (), objfile, copied_types.get ());
for (var = internalvars; var; var = var->next)
- preserve_one_internalvar (var, objfile, copied_types);
+ preserve_one_internalvar (var, objfile, copied_types.get ());
- preserve_ext_lang_values (objfile, copied_types);
-
- htab_delete (copied_types);
+ preserve_ext_lang_values (objfile, copied_types.get ());
}
static void