Author: Med Ismail Bennani Date: 2024-08-07T11:21:27-07:00 New Revision: 585523750e2bbe374d1cb3bf4ff9d53de29b9593
URL: https://github.com/llvm/llvm-project/commit/585523750e2bbe374d1cb3bf4ff9d53de29b9593 DIFF: https://github.com/llvm/llvm-project/commit/585523750e2bbe374d1cb3bf4ff9d53de29b9593.diff LOG: [lldb/API] Fix SBStructuredData support any JSON type (#101929) This patch loosen the parsing requirement to allow parsing not only JSON dictionaries but also valid JSON type (integer, float, string, bool, array, null). Signed-off-by: Med Ismail Bennani <ism...@bennani.ma> Added: Modified: lldb/source/API/SBStructuredData.cpp lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py Removed: ################################################################################ diff --git a/lldb/source/API/SBStructuredData.cpp b/lldb/source/API/SBStructuredData.cpp index b18fc5655fc818..78afdc69fe0d23 100644 --- a/lldb/source/API/SBStructuredData.cpp +++ b/lldb/source/API/SBStructuredData.cpp @@ -86,7 +86,12 @@ lldb::SBError SBStructuredData::SetFromJSON(lldb::SBStream &stream) { StructuredData::ParseJSON(stream.GetData()); m_impl_up->SetObjectSP(json_obj); - if (!json_obj || json_obj->GetType() != eStructuredDataTypeDictionary) + static constexpr StructuredDataType unsupported_type[] = { + eStructuredDataTypeInvalid, + eStructuredDataTypeGeneric, + }; + + if (!json_obj || llvm::is_contained(unsupported_type, json_obj->GetType())) error.SetErrorString("Invalid Syntax"); return error; } diff --git a/lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py b/lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py index b3db3bc61e4dc3..21256d6c6e743b 100644 --- a/lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py +++ b/lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py @@ -110,6 +110,37 @@ class MyRandomClass: self.assertTrue(my_random_class) self.assertEqual(my_random_class.payload, MyRandomClass.payload) + example = lldb.SBStructuredData() + self.assertSuccess(example.SetFromJSON("1")) + self.assertEqual(example.GetType(), lldb.eStructuredDataTypeInteger) + self.assertEqual(example.GetIntegerValue(), 1) + + self.assertSuccess(example.SetFromJSON("4.19")) + self.assertEqual(example.GetType(), lldb.eStructuredDataTypeFloat) + self.assertEqual(example.GetFloatValue(), 4.19) + + self.assertSuccess(example.SetFromJSON('"Bonjour, 123!"')) + self.assertEqual(example.GetType(), lldb.eStructuredDataTypeString) + self.assertEqual(example.GetStringValue(42), "Bonjour, 123!") + + self.assertSuccess(example.SetFromJSON("true")) + self.assertEqual(example.GetType(), lldb.eStructuredDataTypeBoolean) + self.assertTrue(example.GetBooleanValue()) + + self.assertSuccess(example.SetFromJSON("null")) + self.assertEqual(example.GetType(), lldb.eStructuredDataTypeNull) + + example_arr = [1, 2.3, "4", {"5": False}] + arr_str = json.dumps(example_arr) + s.Clear() + s.Print(arr_str) + self.assertSuccess(example.SetFromJSON(s)) + + s.Clear() + self.assertSuccess(example.GetAsJSON(s)) + sb_data = json.loads(s.GetData()) + self.assertEqual(sb_data, example_arr) + def invalid_struct_test(self, example): invalid_struct = lldb.SBStructuredData() invalid_struct = example.GetValueForKey("invalid_key") _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits