1import lldb
2
3
4def derives_from_base(sbtype, internal_dict):
5    for base in sbtype.get_bases_array():
6        if base.GetName() == "Base":
7            return True
8    return False
9
10
11class SynthProvider:
12    def __init__(self, valobj, dict):
13        self.valobj = valobj
14
15    def num_children(self):
16        return 1
17
18    def get_child_index(self, name):
19        return 0
20
21    def get_child_at_index(self, index):
22        if index == 0:
23            return self.valobj.CreateValueFromExpression("synthetic_child", "9999")
24        return None
25
26
27def register_formatters(debugger):
28    cat = debugger.CreateCategory("callback_formatters")
29    cat.AddTypeSummary(
30        lldb.SBTypeNameSpecifier(
31            "formatters_with_callback.derives_from_base", lldb.eFormatterMatchCallback
32        ),
33        lldb.SBTypeSummary.CreateWithScriptCode("return 'hello from callback summary'"),
34    )
35    cat.AddTypeSynthetic(
36        lldb.SBTypeNameSpecifier(
37            "formatters_with_callback.derives_from_base", lldb.eFormatterMatchCallback
38        ),
39        lldb.SBTypeSynthetic.CreateWithClassName(
40            "formatters_with_callback.SynthProvider"
41        ),
42    )
43    cat.SetEnabled(True)
44