struct type **dont_print_vb, int dont_print_statmem)
{
int i, len, n_baseclasses;
- char *last_dont_print = obstack_next_free (&dont_print_statmem_obstack);
int fields_seen = 0;
CHECK_TYPEDEF (type);
+
+ if (recurse == 0
+ && obstack_object_size (&dont_print_statmem_obstack) > 0)
+ obstack_free (&dont_print_statmem_obstack, NULL);
fprintf_filtered (stream, "{");
len = TYPE_NFIELDS (type);
fprintf_filtered (stream, "<No data fields>");
else
{
- struct obstack tmp_obstack = dont_print_statmem_obstack;
-
+ void *statmem_obstack_top = NULL;
+
if (dont_print_statmem == 0)
{
- /* If we're at top level, carve out a completely fresh
- chunk of the obstack and use that until this particular
- invocation returns. */
- obstack_finish (&dont_print_statmem_obstack);
+ /* Set the current printed-statics stack top. */
+ statmem_obstack_top
+ = obstack_next_free (&dont_print_statmem_obstack);
}
for (i = n_baseclasses; i < len; i++)
if (dont_print_statmem == 0)
{
- /* Free the space used to deal with the printing
- of the members from top level. */
- obstack_free (&dont_print_statmem_obstack, last_dont_print);
- dont_print_statmem_obstack = tmp_obstack;
+ /* In effect, a pop of the printed-statics stack. */
+ if (obstack_object_size (&dont_print_statmem_obstack) > 0)
+ obstack_free (&dont_print_statmem_obstack, statmem_obstack_top);
}
if (options->pretty)
first_dont_print
= (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
- i = (CORE_ADDR *) obstack_next_free (&dont_print_statmem_obstack)
- - first_dont_print;
+ i = obstack_object_size (&dont_print_statmem_obstack)
+ / sizeof (CORE_ADDR);
while (--i >= 0)
{
show_objectprint,
&setprintlist, &showprintlist);
+ obstack_begin (&dont_print_statmem_obstack, 32 * sizeof (CORE_ADDR));
obstack_begin (&dont_print_vb_obstack, 32 * sizeof (struct type *));
- obstack_specify_allocation (&dont_print_statmem_obstack,
- 32 * sizeof (CORE_ADDR), sizeof (CORE_ADDR),
- xmalloc, xfree);
}