This CL contains a copy of JSON parser/writer that can be found
in the lldb subproject with only necessary changes:
- files now follow LLVM naming and formatting guidelines
- raw_ostream used instead of the special formatted stream
- very basic parse/print roundtrip test for JSON.
As soon as this CL lands I will prepare the one that removes JSON
parser from lldb/ and uses parent's.
I scanned the entire patch and I'm not sure I understand the need for the covariant typedefs. The only type that ever seems to be used is JSONValue, so it seems to me like the other types are unnecessary.
Also, I'm not sure shared_ptr is necessary. Wouldn't unique_ptr work just fine? Then you could vend references to values instead of pointers.