From e5685078c113754835153c897cb7e5aac475c1cf Mon Sep 17 00:00:00 2001 From: Lucas CHOLLET Date: Tue, 20 Jun 2023 17:36:57 -0400 Subject: [PATCH] Meta: Add a gdb pretty-printer for `Optional` --- Meta/serenity_gdb.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Meta/serenity_gdb.py b/Meta/serenity_gdb.py index 86610076da..c94f3ec2e7 100644 --- a/Meta/serenity_gdb.py +++ b/Meta/serenity_gdb.py @@ -42,6 +42,8 @@ def handler_class_for_type(type, re=re.compile('^([^<]+)(<.*>)?$')): return AKStringImpl elif klass == 'AK::Variant': return AKVariant + elif klass == 'AK::Optional': + return AKOptional elif klass == 'AK::Vector': return AKVector elif klass == 'VirtualAddress': @@ -229,6 +231,27 @@ class AKVariant: return f'AK::Variant<{names}>' +class AKOptional: + def __init__(self, val): + self.val = val + self.has_value = bool(self.val["m_has_value"]) + self.contained_type = self.val.type.strip_typedefs().template_argument(0) + + def to_string(self): + return AKOptional.prettyprint_type(self.val.type) + + def children(self): + if self.has_value: + data = self.val["m_storage"] + return [(self.contained_type.name, data.cast(self.contained_type.pointer()).referenced_value())] + return [("OptionalNone", "{}")] + + @classmethod + def prettyprint_type(cls, type): + template_type = type.template_argument(0) + return f'AK::Optional<{template_type}>' + + class AKVector: def __init__(self, val): self.val = val