1*99451b44SJordan Rupprechtimport lldb 2*99451b44SJordan Rupprecht 3*99451b44SJordan Rupprecht 4*99451b44SJordan Rupprechtclass jasSynthProvider: 5*99451b44SJordan Rupprecht 6*99451b44SJordan Rupprecht def __init__(self, valobj, dict): 7*99451b44SJordan Rupprecht self.valobj = valobj 8*99451b44SJordan Rupprecht 9*99451b44SJordan Rupprecht def num_children(self): 10*99451b44SJordan Rupprecht return 2 11*99451b44SJordan Rupprecht 12*99451b44SJordan Rupprecht def get_child_at_index(self, index): 13*99451b44SJordan Rupprecht child = None 14*99451b44SJordan Rupprecht if index == 0: 15*99451b44SJordan Rupprecht child = self.valobj.GetChildMemberWithName('A') 16*99451b44SJordan Rupprecht if index == 1: 17*99451b44SJordan Rupprecht child = self.valobj.CreateValueFromExpression('X', '(int)1') 18*99451b44SJordan Rupprecht return child 19*99451b44SJordan Rupprecht 20*99451b44SJordan Rupprecht def get_child_index(self, name): 21*99451b44SJordan Rupprecht if name == 'A': 22*99451b44SJordan Rupprecht return 0 23*99451b44SJordan Rupprecht if name == 'X': 24*99451b44SJordan Rupprecht return 1 25*99451b44SJordan Rupprecht return None 26*99451b44SJordan Rupprecht 27*99451b44SJordan Rupprecht 28*99451b44SJordan Rupprechtdef ccc_summary(sbvalue, internal_dict): 29*99451b44SJordan Rupprecht sbvalue = sbvalue.GetNonSyntheticValue() 30*99451b44SJordan Rupprecht # This tests that the SBValue.GetNonSyntheticValue() actually returns a 31*99451b44SJordan Rupprecht # non-synthetic value. If it does not, then sbvalue.GetChildMemberWithName("a") 32*99451b44SJordan Rupprecht # in the following statement will call the 'get_child_index' method of the 33*99451b44SJordan Rupprecht # synthetic child provider CCCSynthProvider below (which raises an 34*99451b44SJordan Rupprecht # exception). 35*99451b44SJordan Rupprecht return "CCC object with leading value " + \ 36*99451b44SJordan Rupprecht str(sbvalue.GetChildMemberWithName("a")) 37*99451b44SJordan Rupprecht 38*99451b44SJordan Rupprecht 39*99451b44SJordan Rupprechtclass CCCSynthProvider(object): 40*99451b44SJordan Rupprecht 41*99451b44SJordan Rupprecht def __init__(self, sbvalue, internal_dict): 42*99451b44SJordan Rupprecht self._sbvalue = sbvalue 43*99451b44SJordan Rupprecht 44*99451b44SJordan Rupprecht def num_children(self): 45*99451b44SJordan Rupprecht return 3 46*99451b44SJordan Rupprecht 47*99451b44SJordan Rupprecht def get_child_index(self, name): 48*99451b44SJordan Rupprecht raise RuntimeError("I don't want to be called!") 49*99451b44SJordan Rupprecht 50*99451b44SJordan Rupprecht def get_child_at_index(self, index): 51*99451b44SJordan Rupprecht if index == 0: 52*99451b44SJordan Rupprecht return self._sbvalue.GetChildMemberWithName("a") 53*99451b44SJordan Rupprecht if index == 1: 54*99451b44SJordan Rupprecht return self._sbvalue.GetChildMemberWithName("b") 55*99451b44SJordan Rupprecht if index == 2: 56*99451b44SJordan Rupprecht return self._sbvalue.GetChildMemberWithName("c") 57*99451b44SJordan Rupprecht 58*99451b44SJordan Rupprecht 59*99451b44SJordan Rupprechtdef empty1_summary(sbvalue, internal_dict): 60*99451b44SJordan Rupprecht return "I am an empty Empty1" 61*99451b44SJordan Rupprecht 62*99451b44SJordan Rupprecht 63*99451b44SJordan Rupprechtclass Empty1SynthProvider(object): 64*99451b44SJordan Rupprecht 65*99451b44SJordan Rupprecht def __init__(self, sbvalue, internal_dict): 66*99451b44SJordan Rupprecht self._sbvalue = sbvalue 67*99451b44SJordan Rupprecht 68*99451b44SJordan Rupprecht def num_children(self): 69*99451b44SJordan Rupprecht return 0 70*99451b44SJordan Rupprecht 71*99451b44SJordan Rupprecht def get_child_at_index(self, index): 72*99451b44SJordan Rupprecht return None 73*99451b44SJordan Rupprecht 74*99451b44SJordan Rupprecht 75*99451b44SJordan Rupprechtdef empty2_summary(sbvalue, internal_dict): 76*99451b44SJordan Rupprecht return "I am an empty Empty2" 77*99451b44SJordan Rupprecht 78*99451b44SJordan Rupprecht 79*99451b44SJordan Rupprechtclass Empty2SynthProvider(object): 80*99451b44SJordan Rupprecht 81*99451b44SJordan Rupprecht def __init__(self, sbvalue, internal_dict): 82*99451b44SJordan Rupprecht self._sbvalue = sbvalue 83*99451b44SJordan Rupprecht 84*99451b44SJordan Rupprecht def num_children(self): 85*99451b44SJordan Rupprecht return 0 86*99451b44SJordan Rupprecht 87*99451b44SJordan Rupprecht def get_child_at_index(self, index): 88*99451b44SJordan Rupprecht return None 89*99451b44SJordan Rupprecht 90*99451b44SJordan Rupprecht 91*99451b44SJordan Rupprechtdef __lldb_init_module(debugger, dict): 92*99451b44SJordan Rupprecht debugger.CreateCategory("JASSynth").AddTypeSynthetic( 93*99451b44SJordan Rupprecht lldb.SBTypeNameSpecifier("JustAStruct"), 94*99451b44SJordan Rupprecht lldb.SBTypeSynthetic.CreateWithClassName("synth.jasSynthProvider")) 95*99451b44SJordan Rupprecht cat = debugger.CreateCategory("CCCSynth") 96*99451b44SJordan Rupprecht cat.AddTypeSynthetic( 97*99451b44SJordan Rupprecht lldb.SBTypeNameSpecifier("CCC"), 98*99451b44SJordan Rupprecht lldb.SBTypeSynthetic.CreateWithClassName("synth.CCCSynthProvider", 99*99451b44SJordan Rupprecht lldb.eTypeOptionCascade)) 100*99451b44SJordan Rupprecht cat.AddTypeSummary( 101*99451b44SJordan Rupprecht lldb.SBTypeNameSpecifier("CCC"), 102*99451b44SJordan Rupprecht lldb.SBTypeSummary.CreateWithFunctionName("synth.ccc_summary", 103*99451b44SJordan Rupprecht lldb.eTypeOptionCascade)) 104*99451b44SJordan Rupprecht cat.AddTypeSynthetic( 105*99451b44SJordan Rupprecht lldb.SBTypeNameSpecifier("Empty1"), 106*99451b44SJordan Rupprecht lldb.SBTypeSynthetic.CreateWithClassName("synth.Empty1SynthProvider")) 107*99451b44SJordan Rupprecht cat.AddTypeSummary( 108*99451b44SJordan Rupprecht lldb.SBTypeNameSpecifier("Empty1"), 109*99451b44SJordan Rupprecht lldb.SBTypeSummary.CreateWithFunctionName("synth.empty1_summary")) 110*99451b44SJordan Rupprecht cat.AddTypeSynthetic( 111*99451b44SJordan Rupprecht lldb.SBTypeNameSpecifier("Empty2"), 112*99451b44SJordan Rupprecht lldb.SBTypeSynthetic.CreateWithClassName("synth.Empty2SynthProvider")) 113*99451b44SJordan Rupprecht cat.AddTypeSummary( 114*99451b44SJordan Rupprecht lldb.SBTypeNameSpecifier("Empty2"), 115*99451b44SJordan Rupprecht lldb.SBTypeSummary.CreateWithFunctionName( 116*99451b44SJordan Rupprecht "synth.empty2_summary", 117*99451b44SJordan Rupprecht lldb.eTypeOptionHideEmptyAggregates)) 118