]> sourceware.org Git - libabigail.git/commitdiff
ir: Add a debug_comp_stack debugging function
authorDodji Seketeli <dodji@seketeli.org>
Fri, 16 Dec 2022 16:43:34 +0000 (17:43 +0100)
committerDodji Seketeli <dodji@seketeli.org>
Mon, 19 Dec 2022 16:05:31 +0000 (17:05 +0100)
When debugging type comparison, it can useful to see what the
comparison stack is.  This patch adds the a debug_comp_stack to dump
the comparison stack as a string.

* include/abg-fwd.h (debug_comp_stack): Declare function.
* src/abg-ir.cc (debug_comp_vec, print_comp_stack): Define static
functions.
(debug_comp_stack): Define new function.

Signed-off-by: Dodji Seketeli <dodji@seketeli.org>
include/abg-fwd.h
src/abg-ir.cc

index d5fcce7b22a54f19179a6c24d36aff15c999039c..8a4383c2aef7b76992d8d09ee1bee778551c3fc6 100644 (file)
@@ -1056,6 +1056,9 @@ debug(const decl_base* artifact);
 bool
 debug_equals(const type_or_decl_base *l, const type_or_decl_base *r);
 
+void
+debug_comp_stack(const environment& env);
+
 bool
 odr_is_relevant(const type_or_decl_base&);
 
index 85b5cbb3e51380a2e831374bf49d48fca08d9deb..2719954ee3bd19bd9aa8ba12a38a04334cb24d7f 100644 (file)
@@ -9533,6 +9533,52 @@ debug_equals(const type_or_decl_base *l, const type_or_decl_base *r)
   return (*l == *r);
 }
 
+/// Emit a trace of a comparison operand stack.
+///
+/// @param vect the operand stack to emit the trace for.
+///
+/// @param o the output stream to emit the trace to.
+static void
+debug_comp_vec(const vector<const type_base*>& vect, std::ostringstream& o)
+{
+  for (auto t : vect)
+    {
+      o << "|" << t->get_pretty_representation()
+       << "@" << std::hex << t << std::dec;
+    }
+  if (!vect.empty())
+    o << "|";
+}
+
+/// Construct a trace of the two comparison operand stacks.
+///
+/// @param the environment in which the comparison operand stacks are.
+///
+/// @return a string representing the trace.
+static string
+print_comp_stack(const environment& env)
+{
+  std::ostringstream o;
+  o << "left-operands: ";
+  debug_comp_vec(env.priv_->left_type_comp_operands_, o);
+  o << "\n" << "right-operands: ";
+  debug_comp_vec(env.priv_->right_type_comp_operands_, o);
+  o << "\n";
+  return o.str();
+}
+
+/// Emit a trace of the two comparison operands stack on the standard
+/// error stream.
+///
+/// @param env the environment the comparison operands stack belong
+/// to.
+void
+debug_comp_stack(const environment& env)
+{
+  std::cerr << print_comp_stack(env);
+  std::cerr << std::endl;
+}
+
 /// By looking at the language of the TU a given ABI artifact belongs
 /// to, test if the ONE Definition Rule should apply.
 ///
This page took 0.064023 seconds and 5 git commands to generate.