import lldb
class fooSynthProvider:
     def __init__(self, valobj, dict):
         self.valobj = valobj;
         self.int_type = valobj.GetType().GetBasicType(lldb.eBasicTypeInt)
     def num_children(self):
         return 3;
     def get_child_at_index(self, index):
         if index == 0:
             child = self.valobj.GetChildMemberWithName('a');
         if index == 1:
             child = self.valobj.CreateChildAtOffset ('fake_a', 1, self.int_type);
         if index == 2:
             child = self.valobj.GetChildMemberWithName('r');
         return child;
     def get_child_index(self, name):
         if name == 'a':
             return 0;
         if name == 'fake_a':
             return 1;
    	 return 2;
