[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
Wed Jan 29 01:01:28 PST 2020
csigg created this revision.
csigg added a reviewer: dblaikie.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Follow-up from D72589 <https://reviews.llvm.org/D72589>.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D73609
Files:
debuginfo-tests/llvm-prettyprinters/gdb/prettyprinters.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,19 @@
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 +370,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))
pp = gdb.printing.RegexpCollectionPrettyPrinter("LLVMSupport")
pp.add_printer('llvm::SmallString', '^llvm::SmallString<.*>$', SmallStringPrinter)
Index: debuginfo-tests/llvm-prettyprinters/gdb/prettyprinters.gdb
===================================================================
--- debuginfo-tests/llvm-prettyprinters/gdb/prettyprinters.gdb
+++ debuginfo-tests/llvm-prettyprinters/gdb/prettyprinters.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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D73609.241065.patch
Type: text/x-patch
Size: 3138 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200129/87ddc8e3/attachment.bin>
More information about the llvm-commits
mailing list