[PATCH] D73609: Change to individual pretty printer classes, remove generic `make_printer`.

Christian Sigg via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 7 05:18:31 PST 2020


csigg updated this revision to Diff 243143.
csigg added a comment.

Rebase from master.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D73609/new/

https://reviews.llvm.org/D73609

Files:
  debuginfo-tests/llvm-prettyprinters/gdb/llvm-support.gdb
  llvm/utils/gdb-scripts/prettyprinters.py


Index: llvm/utils/gdb-scripts/prettyprinters.py
===================================================================
--- llvm/utils/gdb-scripts/prettyprinters.py
+++ llvm/utils/gdb-scripts/prettyprinters.py
@@ -316,18 +316,6 @@
   def to_string(self):
     return self.string_from_twine_object(self._val)
 
-def make_printer(string = None, children = None, hint = None):
-  """Create a printer from the parameters."""
-  class Printer : pass
-  printer = Printer()
-  if string:
-    setattr(printer, 'to_string', lambda: string)
-  if children:
-    setattr(printer, 'children', lambda: children)
-  if hint:
-    setattr(printer, 'display_hint', lambda: hint)
-  return printer
-
 def get_pointer_int_pair(val):
   """Get tuple from llvm::PointerIntPair."""
   info_name = val.type.template_argument(4).strip_typedefs().name
@@ -344,6 +332,17 @@
   value = ((pair_union >> int_shift) & int_mask)
   return (pointer, value)
 
+class PointerIntPairPrinter:
+  """Print a PointerIntPair."""
+
+  def __init__(self, pointer, value):
+    self.pointer = pointer
+    self.value = value
+
+  def children(self):
+    yield ('pointer', self.pointer)
+    yield ('value', self.value)
+
 def make_pointer_int_pair_printer(val):
   """Factory for an llvm::PointerIntPair printer."""
   pointer, value = get_pointer_int_pair(val)
@@ -351,10 +350,20 @@
     return None
   pointer_type = val.type.template_argument(0)
   value_type = val.type.template_argument(2)
-  string = 'llvm::PointerIntPair<%s>' % pointer_type
-  children = [('pointer', pointer.cast(pointer_type)),
-              ('value', value.cast(value_type))]
-  return make_printer(string, children)
+  return PointerIntPairPrinter(pointer.cast(pointer_type),
+                               value.cast(value_type))
+
+class PointerUnionPrinter:
+  """Print a PointerUnion."""
+
+  def __init__(self, pointer):
+    self.pointer = pointer
+
+  def children(self):
+    yield ('pointer', self.pointer)
+
+  def to_string(self):
+    return "Containing %s" % self.pointer.type
 
 def make_pointer_union_printer(val):
   """Factory for an llvm::PointerUnion printer."""
@@ -362,8 +371,7 @@
   if not pointer or not value:
     return None
   pointer_type = val.type.template_argument(int(value))
-  string = 'llvm::PointerUnion containing %s' % pointer_type
-  return make_printer(string, [('pointer', pointer.cast(pointer_type))])
+  return PointerUnionPrinter(pointer.cast(pointer_type))
 
 class IlistNodePrinter:
   """Print an llvm::ilist_node object."""
Index: debuginfo-tests/llvm-prettyprinters/gdb/llvm-support.gdb
===================================================================
--- debuginfo-tests/llvm-prettyprinters/gdb/llvm-support.gdb
+++ debuginfo-tests/llvm-prettyprinters/gdb/llvm-support.gdb
@@ -39,10 +39,10 @@
 # CHECK: "\"foo\"\"bar\""
 p Twine
 
-# CHECK: llvm::PointerIntPair<int *> = {pointer = 0xabc, value = 1}
+# CHECK: {pointer = 0xabc, value = 1}
 p PointerIntPair
 
-# CHECK: llvm::PointerUnion containing int * = {pointer = 0xabc}
+# CHECK: Containing int * = {pointer = 0xabc}
 p PointerUnion
 
 # Switch to print pretty adds newlines to the following statements.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D73609.243143.patch
Type: text/x-patch
Size: 3151 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200207/0a72eaac/attachment.bin>


More information about the llvm-commits mailing list