diff options
-rw-r--r-- | gcc/gimple-range-trace.cc | 20 | ||||
-rw-r--r-- | gcc/gimple-range-trace.h | 14 |
2 files changed, 34 insertions, 0 deletions
diff --git a/gcc/gimple-range-trace.cc b/gcc/gimple-range-trace.cc index 449ed83..5175d14 100644 --- a/gcc/gimple-range-trace.cc +++ b/gcc/gimple-range-trace.cc @@ -155,11 +155,31 @@ debug_seed_ranger (gimple_ranger &ranger) } } +// Change the current dump_file and dump_flags to F and FLAGS while +// saving them for later restoring. + +push_dump_file::push_dump_file (FILE *f, dump_flags_t flags) +{ + old_dump_file = dump_file; + old_dump_flags = dump_flags; + dump_file = f; + dump_flags = flags; +} + +// Restore saved dump_file and dump_flags. + +push_dump_file::~push_dump_file () +{ + dump_file = old_dump_file; + dump_flags = old_dump_flags; +} + // Dump all that ranger knows for the current function. DEBUG_FUNCTION void dump_ranger (FILE *out) { + push_dump_file save (out, dump_flags); gimple_ranger ranger; fprintf (out, ";; Function "); diff --git a/gcc/gimple-range-trace.h b/gcc/gimple-range-trace.h index d2d1a8b..b9546a2 100644 --- a/gcc/gimple-range-trace.h +++ b/gcc/gimple-range-trace.h @@ -58,4 +58,18 @@ range_tracer::header (const char *str) return do_header (str); return 0; } + +// RAII class to change current dump_file and dump_flags, and restore +// when the object goes out of scope. + +class push_dump_file +{ +public: + push_dump_file (FILE *, dump_flags_t); + ~push_dump_file (); +private: + FILE *old_dump_file; + dump_flags_t old_dump_flags; +}; + #endif // GCC_GIMPLE_RANGE_TRACE_H |