Public API changes:
 - Completely new implementation of SBType
 - Various enhancements in several other classes
Python synthetic children providers for std::vector<T>, std::list<T> and std::map<K,V>:
 - these return the actual elements into the container as the children of the container
 - basic template name parsing that works (hopefully) on both Clang and GCC
 - find them in examples/synthetic and in the test suite in functionalities/data-formatter/data-formatter-python-synth
New summary string token ${svar :
 - the syntax is just the same as in ${var but this new token lets you read the values
   coming from the synthetic children provider instead of the actual children
 - Python providers above provide a synthetic child len that returns the number of elements
   into the container
Full bug fix for the issue in which getting byte size for a non-complete type would crash LLDB
Several other fixes, including:
 - inverted the order of arguments in the ClangASTType constructor
 - EvaluationPoint now only returns SharedPointer's to Target and Process
 - the help text for several type subcommands now correctly indicates argument-less options as such


git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@136504 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/examples/synthetic/StdVectorSynthProvider.py b/examples/synthetic/StdVectorSynthProvider.py
new file mode 100644
index 0000000..91e634a
--- /dev/null
+++ b/examples/synthetic/StdVectorSynthProvider.py
@@ -0,0 +1,25 @@
+class StdVectorSynthProvider:
+    def __init__(self, valobj, dict):
+        self.valobj = valobj;
+        self.update()
+    def num_children(self):
+        start_val = int(self.Mstart.GetValue(),0)
+        finish_val = int(self.Mfinish.GetValue(),0)
+        return (finish_val-start_val)/self.data_size
+    def get_child_index(self,name):
+        if name == "len":
+            return self.num_children();
+        else:
+            return int(name.lstrip('[').rstrip(']'))
+    def get_child_at_index(self,index):
+        if index == self.num_children():
+            return self.valobj.CreateValueFromExpression("len",str(self.num_children()))
+        else:
+            offset = index * self.data_size
+            return self.Mstart.CreateChildAtOffset('['+str(index)+']',offset,self.data_type)
+    def update(self):
+        self.Mimpl = self.valobj.GetChildMemberWithName('_M_impl')
+        self.Mstart = self.Mimpl.GetChildMemberWithName('_M_start')
+        self.Mfinish = self.Mimpl.GetChildMemberWithName('_M_finish')
+        self.data_type = self.Mstart.GetType().GetPointeeType()
+        self.data_size = self.data_type.GetByteSize()