[Lldb-commits] [lldb] r228636 - Add a JSON producer to LLDB - this is a set of classes that encapsulate JSON objects and allow you to write them to a Stream for subsequent processing
Enrico Granata
egranata at apple.com
Mon Feb 9 16:30:08 PST 2015
Author: enrico
Date: Mon Feb 9 18:30:07 2015
New Revision: 228636
URL: http://llvm.org/viewvc/llvm-project?rev=228636&view=rev
Log:
Add a JSON producer to LLDB - this is a set of classes that encapsulate JSON objects and allow you to write them to a Stream for subsequent processing
Using this JSON producer, write a little tool that expands its own command-line arguments and dumps them to stdout as a JSON array
Added:
lldb/trunk/include/lldb/Utility/JSON.h
lldb/trunk/source/Utility/JSON.cpp
lldb/trunk/tools/argdumper/
lldb/trunk/tools/argdumper/argdumper.cpp
Removed:
lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/initializerlist/Makefile
lldb/trunk/test/functionalities/data-formatter/typedef_array/Makefile
lldb/trunk/test/lang/c/struct_types/Makefile
Modified:
lldb/trunk/lldb.xcodeproj/project.pbxproj
Added: lldb/trunk/include/lldb/Utility/JSON.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Utility/JSON.h?rev=228636&view=auto
==============================================================================
--- lldb/trunk/include/lldb/Utility/JSON.h (added)
+++ lldb/trunk/include/lldb/Utility/JSON.h Mon Feb 9 18:30:07 2015
@@ -0,0 +1,276 @@
+//===---------------------JSON.h --------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef utility_JSON_h_
+#define utility_JSON_h_
+
+#include "lldb/Core/Stream.h"
+
+#include <inttypes.h>
+#include <map>
+#include <memory>
+#include <stdint.h>
+#include <string>
+#include <vector>
+
+#include "llvm/Support/Casting.h"
+
+namespace lldb_private {
+ class JSONValue
+ {
+ public:
+ virtual void
+ Write (Stream& s) = 0;
+
+ typedef std::shared_ptr<JSONValue> SP;
+
+ enum class Kind
+ {
+ String,
+ Number,
+ True,
+ False,
+ Null,
+ Object,
+ Array
+ };
+
+ JSONValue (Kind k) :
+ m_kind(k)
+ {}
+
+ Kind
+ GetKind() const
+ {
+ return m_kind;
+ }
+
+ virtual
+ ~JSONValue () = default;
+
+ private:
+ const Kind m_kind;
+ };
+
+ class JSONString : public JSONValue
+ {
+ public:
+ JSONString ();
+ JSONString (const char* s);
+ JSONString (const std::string& s);
+
+ JSONString (const JSONString& s) = delete;
+ JSONString&
+ operator = (const JSONString& s) = delete;
+
+ virtual void
+ Write (Stream& s);
+
+ typedef std::shared_ptr<JSONString> SP;
+
+ std::string
+ GetData () { return m_data; }
+
+ static bool classof(const JSONValue *V)
+ {
+ return V->GetKind() == JSONValue::Kind::String;
+ }
+
+ virtual
+ ~JSONString () = default;
+
+ private:
+
+ static std::string
+ json_string_quote_metachars (const std::string&);
+
+ std::string m_data;
+ };
+
+ class JSONNumber : public JSONValue
+ {
+ public:
+ JSONNumber ();
+ JSONNumber (int64_t i);
+
+ JSONNumber (const JSONNumber& s) = delete;
+ JSONNumber&
+ operator = (const JSONNumber& s) = delete;
+
+ virtual void
+ Write (Stream& s);
+
+ typedef std::shared_ptr<JSONNumber> SP;
+
+ int64_t
+ GetData () { return m_data; }
+
+ static bool classof(const JSONValue *V)
+ {
+ return V->GetKind() == JSONValue::Kind::Number;
+ }
+
+ virtual
+ ~JSONNumber () = default;
+
+ private:
+ int64_t m_data;
+ };
+
+ class JSONTrue : public JSONValue
+ {
+ public:
+ JSONTrue ();
+
+ JSONTrue (const JSONTrue& s) = delete;
+ JSONTrue&
+ operator = (const JSONTrue& s) = delete;
+
+ virtual void
+ Write (Stream& s);
+
+ typedef std::shared_ptr<JSONTrue> SP;
+
+ static bool classof(const JSONValue *V)
+ {
+ return V->GetKind() == JSONValue::Kind::True;
+ }
+
+ virtual
+ ~JSONTrue () = default;
+ };
+
+ class JSONFalse : public JSONValue
+ {
+ public:
+ JSONFalse ();
+
+ JSONFalse (const JSONFalse& s) = delete;
+ JSONFalse&
+ operator = (const JSONFalse& s) = delete;
+
+ virtual void
+ Write (Stream& s);
+
+ typedef std::shared_ptr<JSONFalse> SP;
+
+ static bool classof(const JSONValue *V)
+ {
+ return V->GetKind() == JSONValue::Kind::False;
+ }
+
+ virtual
+ ~JSONFalse () = default;
+ };
+
+ class JSONNull : public JSONValue
+ {
+ public:
+ JSONNull ();
+
+ JSONNull (const JSONNull& s) = delete;
+ JSONNull&
+ operator = (const JSONNull& s) = delete;
+
+ virtual void
+ Write (Stream& s);
+
+ typedef std::shared_ptr<JSONNull> SP;
+
+ static bool classof(const JSONValue *V)
+ {
+ return V->GetKind() == JSONValue::Kind::Null;
+ }
+
+ virtual
+ ~JSONNull () = default;
+ };
+
+ class JSONObject : public JSONValue
+ {
+ public:
+ JSONObject ();
+
+ JSONObject (const JSONObject& s) = delete;
+ JSONObject&
+ operator = (const JSONObject& s) = delete;
+
+ virtual void
+ Write (Stream& s);
+
+ typedef std::shared_ptr<JSONObject> SP;
+
+ static bool classof(const JSONValue *V)
+ {
+ return V->GetKind() == JSONValue::Kind::Object;
+ }
+
+ bool
+ SetObject (const std::string& key,
+ JSONValue::SP value);
+
+ JSONValue::SP
+ GetObject (const std::string& key);
+
+ virtual
+ ~JSONObject () = default;
+
+ private:
+ typedef std::map<std::string, JSONValue::SP> Map;
+ typedef Map::iterator Iterator;
+ Map m_elements;
+ };
+
+ class JSONArray : public JSONValue
+ {
+ public:
+ JSONArray ();
+
+ JSONArray (const JSONArray& s) = delete;
+ JSONArray&
+ operator = (const JSONArray& s) = delete;
+
+ virtual void
+ Write (Stream& s);
+
+ typedef std::shared_ptr<JSONArray> SP;
+
+ static bool classof(const JSONValue *V)
+ {
+ return V->GetKind() == JSONValue::Kind::Array;
+ }
+
+ private:
+ typedef std::vector<JSONValue::SP> Vector;
+ typedef Vector::iterator Iterator;
+ typedef Vector::size_type Index;
+ typedef Vector::size_type Size;
+
+ public:
+ bool
+ SetObject (Index i,
+ JSONValue::SP value);
+
+ bool
+ AppendObject (JSONValue::SP value);
+
+ JSONValue::SP
+ GetObject (Index i);
+
+ Size
+ GetNumElements ();
+
+ virtual
+ ~JSONArray () = default;
+
+ Vector m_elements;
+ };
+}
+
+#endif // utility_ProcessStructReader_h_
Modified: lldb/trunk/lldb.xcodeproj/project.pbxproj
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lldb.xcodeproj/project.pbxproj?rev=228636&r1=228635&r2=228636&view=diff
==============================================================================
--- lldb/trunk/lldb.xcodeproj/project.pbxproj (original)
+++ lldb/trunk/lldb.xcodeproj/project.pbxproj Mon Feb 9 18:30:07 2015
@@ -747,11 +747,19 @@
8CF02AEF19DD16B100B14BE0 /* InstrumentationRuntimeStopInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CF02AED19DD15CF00B14BE0 /* InstrumentationRuntimeStopInfo.cpp */; };
94094C6B163B6F840083A547 /* ValueObjectCast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94094C69163B6CD90083A547 /* ValueObjectCast.cpp */; };
940B02F619DC96E700AD0F52 /* SBExecutionContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 940B02F519DC96E700AD0F52 /* SBExecutionContext.cpp */; };
+ 940B04D91A8984FF0045D5F7 /* argdumper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 940B04D81A8984FF0045D5F7 /* argdumper.cpp */; };
+ 940B04DB1A8985F70045D5F7 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 940B04DA1A8985F70045D5F7 /* libz.dylib */; };
+ 940B04DD1A8985FF0045D5F7 /* libpanel.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 940B04DC1A8985FF0045D5F7 /* libpanel.dylib */; };
+ 940B04DF1A8986070045D5F7 /* libncurses.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 940B04DE1A8986070045D5F7 /* libncurses.dylib */; };
+ 940B04E11A89860E0045D5F7 /* libedit.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 940B04E01A89860E0045D5F7 /* libedit.dylib */; };
+ 940B04E41A8987680045D5F7 /* argdumper in CopyFiles */ = {isa = PBXBuildFile; fileRef = 942829C01A89835300521B30 /* argdumper */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
94145431175E63B500284436 /* lldb-versioning.h in Headers */ = {isa = PBXBuildFile; fileRef = 94145430175D7FDE00284436 /* lldb-versioning.h */; settings = {ATTRIBUTES = (Public, ); }; };
941BCC7F14E48C4000BB969C /* SBTypeFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 9461568614E355F2003A195C /* SBTypeFilter.h */; settings = {ATTRIBUTES = (Public, ); }; };
941BCC8014E48C4000BB969C /* SBTypeFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 9461568714E355F2003A195C /* SBTypeFormat.h */; settings = {ATTRIBUTES = (Public, ); }; };
941BCC8114E48C4000BB969C /* SBTypeSummary.h in Headers */ = {isa = PBXBuildFile; fileRef = 9461568814E355F2003A195C /* SBTypeSummary.h */; settings = {ATTRIBUTES = (Public, ); }; };
941BCC8214E48C4000BB969C /* SBTypeSynthetic.h in Headers */ = {isa = PBXBuildFile; fileRef = 9461568914E355F2003A195C /* SBTypeSynthetic.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 942829561A89614C00521B30 /* JSON.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 942829551A89614C00521B30 /* JSON.cpp */; };
+ 942829CC1A89839300521B30 /* liblldb-core.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2689FFCA13353D7A00698AC0 /* liblldb-core.a */; };
942AFF0519F84ABF007B43B4 /* LibCxxVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 942AFF0419F84ABF007B43B4 /* LibCxxVector.cpp */; };
942AFF0719F84C02007B43B4 /* LibCxxInitializerList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 942AFF0619F84C02007B43B4 /* LibCxxInitializerList.cpp */; };
94380B8219940B0A00BFE4A8 /* StringLexer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94380B8119940B0A00BFE4A8 /* StringLexer.cpp */; };
@@ -1047,6 +1055,20 @@
remoteGlobalIDString = 26680206115FD0ED008E1FE4;
remoteInfo = LLDB;
};
+ 942829C91A89836A00521B30 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 2689FFC913353D7A00698AC0;
+ remoteInfo = "lldb-core";
+ };
+ 942829CD1A89842900521B30 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 942829BF1A89835300521B30;
+ remoteInfo = argdumper;
+ };
94E829C8152D33B4006F96A3 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
@@ -1066,6 +1088,25 @@
);
runOnlyForDeploymentPostprocessing = 1;
};
+ 940B04E31A89875C0045D5F7 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 7;
+ files = (
+ 940B04E41A8987680045D5F7 /* argdumper in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 942829BE1A89835300521B30 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
AF90106415AB7D2900FF120D /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 8;
@@ -2329,7 +2370,15 @@
940B02F419DC96CB00AD0F52 /* SBExecutionContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SBExecutionContext.h; path = include/lldb/API/SBExecutionContext.h; sourceTree = "<group>"; };
940B02F519DC96E700AD0F52 /* SBExecutionContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SBExecutionContext.cpp; path = source/API/SBExecutionContext.cpp; sourceTree = "<group>"; };
940B02F719DC970900AD0F52 /* SBExecutionContext.i */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c.preprocessed; path = SBExecutionContext.i; sourceTree = "<group>"; };
+ 940B04D81A8984FF0045D5F7 /* argdumper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = argdumper.cpp; path = tools/argdumper/argdumper.cpp; sourceTree = "<group>"; };
+ 940B04DA1A8985F70045D5F7 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libz.dylib; sourceTree = DEVELOPER_DIR; };
+ 940B04DC1A8985FF0045D5F7 /* libpanel.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libpanel.dylib; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libpanel.dylib; sourceTree = DEVELOPER_DIR; };
+ 940B04DE1A8986070045D5F7 /* libncurses.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libncurses.dylib; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libncurses.dylib; sourceTree = DEVELOPER_DIR; };
+ 940B04E01A89860E0045D5F7 /* libedit.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libedit.dylib; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libedit.dylib; sourceTree = DEVELOPER_DIR; };
94145430175D7FDE00284436 /* lldb-versioning.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "lldb-versioning.h"; path = "include/lldb/lldb-versioning.h"; sourceTree = "<group>"; };
+ 942829541A89614000521B30 /* JSON.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JSON.h; path = include/lldb/Utility/JSON.h; sourceTree = "<group>"; };
+ 942829551A89614C00521B30 /* JSON.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JSON.cpp; path = source/Utility/JSON.cpp; sourceTree = "<group>"; };
+ 942829C01A89835300521B30 /* argdumper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = argdumper; sourceTree = BUILT_PRODUCTS_DIR; };
942AFF0419F84ABF007B43B4 /* LibCxxVector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LibCxxVector.cpp; path = source/DataFormatters/LibCxxVector.cpp; sourceTree = "<group>"; };
942AFF0619F84C02007B43B4 /* LibCxxInitializerList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LibCxxInitializerList.cpp; path = source/DataFormatters/LibCxxInitializerList.cpp; sourceTree = "<group>"; };
94380B8019940B0300BFE4A8 /* StringLexer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = StringLexer.h; path = include/lldb/Utility/StringLexer.h; sourceTree = "<group>"; };
@@ -2673,6 +2722,18 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 942829BD1A89835300521B30 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 940B04E11A89860E0045D5F7 /* libedit.dylib in Frameworks */,
+ 940B04DF1A8986070045D5F7 /* libncurses.dylib in Frameworks */,
+ 940B04DD1A8985FF0045D5F7 /* libpanel.dylib in Frameworks */,
+ 940B04DB1A8985F70045D5F7 /* libz.dylib in Frameworks */,
+ 942829CC1A89839300521B30 /* liblldb-core.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
EDC6D49614E5C19B001B75F8 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -2694,6 +2755,10 @@
08FB7794FE84155DC02AAC07 /* lldb */ = {
isa = PBXGroup;
children = (
+ 940B04E01A89860E0045D5F7 /* libedit.dylib */,
+ 940B04DE1A8986070045D5F7 /* libncurses.dylib */,
+ 940B04DC1A8985FF0045D5F7 /* libpanel.dylib */,
+ 940B04DA1A8985F70045D5F7 /* libz.dylib */,
26709E311964A34000B94724 /* LaunchServices.framework */,
26F5C32810F3DF7D009D5894 /* Libraries */,
264E8576159BE51A00E9D7A2 /* Resources */,
@@ -2744,6 +2809,7 @@
EDE274EC14EDCE1F005B0F75 /* com.apple.lldb.launcherRootXPCService.xpc */,
26D6F3E7183E7F4E00194858 /* lldb-gdbserver */,
2690CD171A6DC0D000E717C8 /* lldb-mi */,
+ 942829C01A89835300521B30 /* argdumper */,
);
name = Products;
sourceTree = "<group>";
@@ -3378,6 +3444,8 @@
26F996A8119B79C300412154 /* ARM_GCC_Registers.h */,
264723A511FA076E00DE380C /* CleanUp.h */,
4C73152119B7D71700F865A4 /* Iterable.h */,
+ 942829541A89614000521B30 /* JSON.h */,
+ 942829551A89614C00521B30 /* JSON.cpp */,
26D1804416CEE12500EDFB5B /* KQueue.h */,
26D1803C16CEBFD300EDFB5B /* KQueue.cpp */,
94031A9F13CF5B3D00DCFF3C /* PriorityPointerPair.h */,
@@ -4619,6 +4687,7 @@
26F5C22410F3D950009D5894 /* Tools */ = {
isa = PBXGroup;
children = (
+ 942829BA1A89830900521B30 /* argdumper */,
26579F55126A255E0007C5CB /* darwin-debug */,
265E9BE0115C2B8500D0DCCB /* debugserver */,
26F5C22510F3D956009D5894 /* Driver */,
@@ -4878,6 +4947,14 @@
path = AddressSanitizer;
sourceTree = "<group>";
};
+ 942829BA1A89830900521B30 /* argdumper */ = {
+ isa = PBXGroup;
+ children = (
+ 940B04D81A8984FF0045D5F7 /* argdumper.cpp */,
+ );
+ name = argdumper;
+ sourceTree = "<group>";
+ };
9457596415349416005A9070 /* POSIX */ = {
isa = PBXGroup;
children = (
@@ -5252,10 +5329,12 @@
9A19ACE2116563A700E0D453 /* Finish swig wrapper classes (lldb) */,
4959511A1A1ACE9500F6F8FC /* Install Clang compiler headers */,
ED4AFF44199C2207004FFDC6 /* CopyFiles */,
+ 940B04E31A89875C0045D5F7 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
+ 942829CE1A89842900521B30 /* PBXTargetDependency */,
94E829C9152D33B4006F96A3 /* PBXTargetDependency */,
2689011513353E9B00698AC0 /* PBXTargetDependency */,
262CFC7211A450CB00946C6C /* PBXTargetDependency */,
@@ -5355,6 +5434,25 @@
productReference = 26F5C26A10F3D9A4009D5894 /* lldb */;
productType = "com.apple.product-type.tool";
};
+ 942829BF1A89835300521B30 /* argdumper */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 942829C41A89835400521B30 /* Build configuration list for PBXNativeTarget "argdumper" */;
+ buildPhases = (
+ 942829BC1A89835300521B30 /* Sources */,
+ 942829BD1A89835300521B30 /* Frameworks */,
+ 942829BE1A89835300521B30 /* CopyFiles */,
+ 940B04E21A89871F0045D5F7 /* ShellScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 942829CA1A89836A00521B30 /* PBXTargetDependency */,
+ );
+ name = argdumper;
+ productName = argdumper;
+ productReference = 942829C01A89835300521B30 /* argdumper */;
+ productType = "com.apple.product-type.tool";
+ };
EDC6D49814E5C19B001B75F8 /* launcherXPCService */ = {
isa = PBXNativeTarget;
buildConfigurationList = EDC6D4A614E5C19B001B75F8 /* Build configuration list for PBXNativeTarget "launcherXPCService" */;
@@ -5400,6 +5498,9 @@
2690CD161A6DC0D000E717C8 = {
CreatedOnToolsVersion = 6.3;
};
+ 942829BF1A89835300521B30 = {
+ CreatedOnToolsVersion = 7.0;
+ };
};
};
buildConfigurationList = 1DEB91EF08733DB70010E9CD /* Build configuration list for PBXProject "lldb" */;
@@ -5434,6 +5535,7 @@
235AFBB5199BC6AD00897A4B /* Linux */,
235AFBBB199BC6FD00897A4B /* MacOSX and Linux */,
2690CD161A6DC0D000E717C8 /* lldb-mi */,
+ 942829BF1A89835300521B30 /* argdumper */,
);
};
/* End PBXProject section */
@@ -5562,6 +5664,19 @@
shellPath = /bin/sh;
shellScript = "if [ \"${CONFIGURATION}\" != BuildAndIntegration ]\nthen\n codesign -f -s lldb_codesign \"${TARGET_BUILD_DIR}/${TARGET_NAME}\"\nfi\n";
};
+ 940B04E21A89871F0045D5F7 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "";
+ };
9A19ACE2116563A700E0D453 /* Finish swig wrapper classes (lldb) */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -5970,6 +6085,7 @@
2689010213353E6F00698AC0 /* ThreadPlanStepOverBreakpoint.cpp in Sources */,
3FDFED2919BA6D96009756A7 /* ThreadLauncher.cpp in Sources */,
232CB617191E00CD00EF39FC /* NativeBreakpointList.cpp in Sources */,
+ 942829561A89614C00521B30 /* JSON.cpp in Sources */,
232CB615191E00CD00EF39FC /* NativeBreakpoint.cpp in Sources */,
2689010313353E6F00698AC0 /* ThreadPlanStepRange.cpp in Sources */,
2689010413353E6F00698AC0 /* ThreadPlanStepInRange.cpp in Sources */,
@@ -6266,6 +6382,14 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 942829BC1A89835300521B30 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 940B04D91A8984FF0045D5F7 /* argdumper.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
EDC6D49514E5C19B001B75F8 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -6382,6 +6506,16 @@
target = 26680206115FD0ED008E1FE4 /* LLDB */;
targetProxy = 26DF745F1A6DCDB300B85563 /* PBXContainerItemProxy */;
};
+ 942829CA1A89836A00521B30 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 2689FFC913353D7A00698AC0 /* lldb-core */;
+ targetProxy = 942829C91A89836A00521B30 /* PBXContainerItemProxy */;
+ };
+ 942829CE1A89842900521B30 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 942829BF1A89835300521B30 /* argdumper */;
+ targetProxy = 942829CD1A89842900521B30 /* PBXContainerItemProxy */;
+ };
94E829C9152D33B4006F96A3 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 26DC6A0F1337FE6900FF7998 /* lldb-platform */;
@@ -8401,6 +8535,269 @@
};
name = DebugClang;
};
+ 942829C51A89835400521B30 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\"",
+ );
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ LIBRARY_SEARCH_PATHS = (
+ "$(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)",
+ "$(inherited)",
+ );
+ MACOSX_DEPLOYMENT_TARGET = 10.8;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7",
+ "-flimit-debug-info",
+ "-Wparentheses",
+ );
+ "OTHER_CFLAGS[sdk=iphoneos*]" = (
+ "$(inherited)",
+ "-flimit-debug-info",
+ "-Wparentheses",
+ );
+ "OTHER_CPLUSPLUSFLAGS[sdk=iphoneos*]" = "$(OTHER_CFLAGS)";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-lllvmclang",
+ "-L/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config",
+ "-lpython2.7",
+ "-lxml2",
+ "-framework",
+ DebugSymbols,
+ "-framework",
+ Foundation,
+ "-framework",
+ Carbon,
+ "-framework",
+ Security,
+ );
+ "OTHER_LDFLAGS[sdk=iphoneos*][arch=*]" = (
+ "-lllvmclang",
+ "-lxml2",
+ "-framework",
+ Foundation,
+ );
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/include $(SRCROOT)/source $(LLVM_SOURCE_DIR)/include $(LLVM_SOURCE_DIR)/tools/clang/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/tools/clang/include";
+ };
+ name = Debug;
+ };
+ 942829C61A89835400521B30 /* DebugClang */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\"",
+ );
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ LIBRARY_SEARCH_PATHS = (
+ "$(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)",
+ "$(inherited)",
+ );
+ MACOSX_DEPLOYMENT_TARGET = 10.8;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7",
+ "-flimit-debug-info",
+ "-Wparentheses",
+ );
+ "OTHER_CFLAGS[sdk=iphoneos*]" = (
+ "$(inherited)",
+ "-flimit-debug-info",
+ "-Wparentheses",
+ );
+ "OTHER_CPLUSPLUSFLAGS[sdk=iphoneos*]" = "$(OTHER_CFLAGS)";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-lllvmclang",
+ "-L/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config",
+ "-lpython2.7",
+ "-lxml2",
+ "-framework",
+ DebugSymbols,
+ "-framework",
+ Foundation,
+ "-framework",
+ Carbon,
+ "-framework",
+ Security,
+ );
+ "OTHER_LDFLAGS[sdk=iphoneos*][arch=*]" = (
+ "-lllvmclang",
+ "-lxml2",
+ "-framework",
+ Foundation,
+ );
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/include $(SRCROOT)/source $(LLVM_SOURCE_DIR)/include $(LLVM_SOURCE_DIR)/tools/clang/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/tools/clang/include";
+ };
+ name = DebugClang;
+ };
+ 942829C71A89835400521B30 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\"",
+ );
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ LIBRARY_SEARCH_PATHS = (
+ "$(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)",
+ "$(inherited)",
+ );
+ MACOSX_DEPLOYMENT_TARGET = 10.8;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7",
+ "-flimit-debug-info",
+ "-Wparentheses",
+ );
+ "OTHER_CFLAGS[sdk=iphoneos*]" = (
+ "$(inherited)",
+ "-flimit-debug-info",
+ "-Wparentheses",
+ );
+ "OTHER_CPLUSPLUSFLAGS[sdk=iphoneos*]" = "$(OTHER_CFLAGS)";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-lllvmclang",
+ "-L/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config",
+ "-lpython2.7",
+ "-lxml2",
+ "-framework",
+ DebugSymbols,
+ "-framework",
+ Foundation,
+ "-framework",
+ Carbon,
+ "-framework",
+ Security,
+ );
+ "OTHER_LDFLAGS[sdk=iphoneos*][arch=*]" = (
+ "-lllvmclang",
+ "-lxml2",
+ "-framework",
+ Foundation,
+ );
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/include $(SRCROOT)/source $(LLVM_SOURCE_DIR)/include $(LLVM_SOURCE_DIR)/tools/clang/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/tools/clang/include";
+ };
+ name = Release;
+ };
+ 942829C81A89835400521B30 /* BuildAndIntegration */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\"",
+ );
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ INSTALL_PATH = "$(LLDB_FRAMEWORK_INSTALL_DIR)/LLDB.framework/Resources";
+ LIBRARY_SEARCH_PATHS = (
+ "$(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)",
+ "$(inherited)",
+ );
+ MACOSX_DEPLOYMENT_TARGET = 10.8;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7",
+ "-flimit-debug-info",
+ "-Wparentheses",
+ );
+ "OTHER_CFLAGS[sdk=iphoneos*]" = (
+ "$(inherited)",
+ "-flimit-debug-info",
+ "-Wparentheses",
+ );
+ "OTHER_CPLUSPLUSFLAGS[sdk=iphoneos*]" = "$(OTHER_CFLAGS)";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-lllvmclang",
+ "-L/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config",
+ "-lpython2.7",
+ "-lxml2",
+ "-framework",
+ DebugSymbols,
+ "-framework",
+ Foundation,
+ "-framework",
+ Carbon,
+ "-framework",
+ Security,
+ );
+ "OTHER_LDFLAGS[sdk=iphoneos*][arch=*]" = (
+ "-lllvmclang",
+ "-lxml2",
+ "-framework",
+ Foundation,
+ );
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ STRIP_INSTALLED_PRODUCT = YES;
+ USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/include $(SRCROOT)/source $(LLVM_SOURCE_DIR)/include $(LLVM_SOURCE_DIR)/tools/clang/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/tools/clang/include";
+ };
+ name = BuildAndIntegration;
+ };
EDC6D4A714E5C19B001B75F8 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -8732,6 +9129,17 @@
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = BuildAndIntegration;
+ };
+ 942829C41A89835400521B30 /* Build configuration list for PBXNativeTarget "argdumper" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 942829C51A89835400521B30 /* Debug */,
+ 942829C61A89835400521B30 /* DebugClang */,
+ 942829C71A89835400521B30 /* Release */,
+ 942829C81A89835400521B30 /* BuildAndIntegration */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = BuildAndIntegration;
};
EDC6D4A614E5C19B001B75F8 /* Build configuration list for PBXNativeTarget "launcherXPCService" */ = {
isa = XCConfigurationList;
Added: lldb/trunk/source/Utility/JSON.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/JSON.cpp?rev=228636&view=auto
==============================================================================
--- lldb/trunk/source/Utility/JSON.cpp (added)
+++ lldb/trunk/source/Utility/JSON.cpp Mon Feb 9 18:30:07 2015
@@ -0,0 +1,217 @@
+//===--------------------- JSON.cpp -----------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Utility/JSON.h"
+
+using namespace lldb_private;
+
+std::string
+JSONString::json_string_quote_metachars (const std::string &s)
+{
+ if (s.find('"') == std::string::npos)
+ return s;
+
+ std::string output;
+ const size_t s_size = s.size();
+ const char *s_chars = s.c_str();
+ for (size_t i = 0; i < s_size; i++)
+ {
+ unsigned char ch = *(s_chars + i);
+ if (ch == '"')
+ {
+ output.push_back ('\\');
+ }
+ output.push_back (ch);
+ }
+ return output;
+}
+
+JSONString::JSONString () :
+JSONValue(JSONValue::Kind::String),
+m_data()
+{
+}
+
+JSONString::JSONString (const char* s) :
+JSONValue(JSONValue::Kind::String),
+m_data(s ? s : "")
+{
+}
+
+JSONString::JSONString (const std::string& s) :
+JSONValue(JSONValue::Kind::String),
+m_data(s)
+{
+}
+
+void
+JSONString::Write (Stream& s)
+{
+ s.Printf("\"%s\"", json_string_quote_metachars(m_data).c_str());
+}
+
+JSONNumber::JSONNumber () :
+JSONValue(JSONValue::Kind::Number),
+m_data(0)
+{
+}
+
+JSONNumber::JSONNumber (int64_t i) :
+JSONValue(JSONValue::Kind::Number),
+m_data(i)
+{
+}
+
+void
+JSONNumber::Write (Stream& s)
+{
+ s.Printf("%" PRId64, m_data);
+}
+
+JSONTrue::JSONTrue () :
+JSONValue(JSONValue::Kind::True)
+{
+}
+
+void
+JSONTrue::Write(Stream& s)
+{
+ s.Printf("true");
+}
+
+JSONFalse::JSONFalse () :
+JSONValue(JSONValue::Kind::False)
+{
+}
+
+void
+JSONFalse::Write(Stream& s)
+{
+ s.Printf("false");
+}
+
+JSONNull::JSONNull () :
+JSONValue(JSONValue::Kind::Null)
+{
+}
+
+void
+JSONNull::Write(Stream& s)
+{
+ s.Printf("null");
+}
+
+JSONObject::JSONObject () :
+JSONValue(JSONValue::Kind::Object)
+{
+}
+
+void
+JSONObject::Write (Stream& s)
+{
+ bool first = true;
+ s.PutChar('{');
+ auto iter = m_elements.begin(), end = m_elements.end();
+ for (;iter != end; iter++)
+ {
+ if (first)
+ first = false;
+ else
+ s.PutChar(',');
+ JSONString key(iter->first);
+ JSONValue::SP value(iter->second);
+ key.Write(s);
+ s.PutChar(':');
+ value->Write(s);
+ }
+ s.PutChar('}');
+}
+
+bool
+JSONObject::SetObject (const std::string& key,
+ JSONValue::SP value)
+{
+ if (key.empty() || nullptr == value.get())
+ return false;
+ m_elements[key] = value;
+ return true;
+}
+
+JSONValue::SP
+JSONObject::GetObject (const std::string& key)
+{
+ auto iter = m_elements.find(key), end = m_elements.end();
+ if (iter == end)
+ return JSONValue::SP();
+ return iter->second;
+}
+
+JSONArray::JSONArray () :
+JSONValue(JSONValue::Kind::Array)
+{
+}
+
+void
+JSONArray::Write (Stream& s)
+{
+ bool first = true;
+ s.PutChar('[');
+ auto iter = m_elements.begin(), end = m_elements.end();
+ for (;iter != end; iter++)
+ {
+ if (first)
+ first = false;
+ else
+ s.PutChar(',');
+ (*iter)->Write(s);
+ }
+ s.PutChar(']');
+}
+
+bool
+JSONArray::SetObject (Index i,
+ JSONValue::SP value)
+{
+ if (value.get() == nullptr)
+ return false;
+ if (i < m_elements.size())
+ {
+ m_elements[i] = value;
+ return true;
+ }
+ if (i == m_elements.size())
+ {
+ m_elements.push_back(value);
+ return true;
+ }
+ return false;
+}
+
+bool
+JSONArray::AppendObject (JSONValue::SP value)
+{
+ if (value.get() == nullptr)
+ return false;
+ m_elements.push_back(value);
+ return true;
+}
+
+JSONValue::SP
+JSONArray::GetObject (Index i)
+{
+ if (i < m_elements.size())
+ return m_elements[i];
+ return JSONValue::SP();
+}
+
+JSONArray::Size
+JSONArray::GetNumElements ()
+{
+ return m_elements.size();
+}
Removed: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/initializerlist/Makefile
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/initializerlist/Makefile?rev=228635&view=auto
==============================================================================
--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/initializerlist/Makefile (original)
+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/initializerlist/Makefile (removed)
@@ -1,4 +0,0 @@
-LEVEL = ../../../../../make
-CXX_SOURCES := main.cpp
-CXXFLAGS += -std=c++11
-include $(LEVEL)/Makefile.rules
Removed: lldb/trunk/test/functionalities/data-formatter/typedef_array/Makefile
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/typedef_array/Makefile?rev=228635&view=auto
==============================================================================
--- lldb/trunk/test/functionalities/data-formatter/typedef_array/Makefile (original)
+++ lldb/trunk/test/functionalities/data-formatter/typedef_array/Makefile (removed)
@@ -1,4 +0,0 @@
-LEVEL = ../../../make
-CXX_SOURCES := main.cpp
-CXXFLAGS += -std=c++11
-include $(LEVEL)/Makefile.rules
Removed: lldb/trunk/test/lang/c/struct_types/Makefile
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lang/c/struct_types/Makefile?rev=228635&view=auto
==============================================================================
--- lldb/trunk/test/lang/c/struct_types/Makefile (original)
+++ lldb/trunk/test/lang/c/struct_types/Makefile (removed)
@@ -1,3 +0,0 @@
-LEVEL = ../../../make
-C_SOURCES := main.c
-include $(LEVEL)/Makefile.rules
Added: lldb/trunk/tools/argdumper/argdumper.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/argdumper/argdumper.cpp?rev=228636&view=auto
==============================================================================
--- lldb/trunk/tools/argdumper/argdumper.cpp (added)
+++ lldb/trunk/tools/argdumper/argdumper.cpp Mon Feb 9 18:30:07 2015
@@ -0,0 +1,38 @@
+//===-- argdumper.cpp --------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Core/StreamString.h"
+#include "lldb/Utility/JSON.h"
+
+#include <iostream>
+
+using namespace lldb_private;
+
+int
+main (int argc, char *argv[])
+{
+ JSONArray::SP arguments(new JSONArray());
+ for (int i = 1;
+ i < argc;
+ i++)
+ {
+ arguments->AppendObject(JSONString::SP(new JSONString(argv[i])));
+ }
+
+ JSONObject::SP object(new JSONObject());
+ object->SetObject("arguments", arguments);
+
+ StreamString ss;
+
+ object->Write(ss);
+
+ std::cout << ss.GetData() << std::endl;
+
+ return 0;
+}
More information about the lldb-commits
mailing list