bool lldb_private::formatters::Char32SummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions&) { DataExtractor data; Error error; valobj.GetData(data, error); if (error.Fail()) return false; std::string value; valobj.GetValueAsCString(lldb::eFormatUnicode32, value); if (!value.empty()) stream.Printf("%s ", value.c_str()); ReadBufferAndDumpToStreamOptions options(valobj); options.SetData(data); options.SetStream(&stream); options.SetPrefixToken('U'); options.SetQuote('\''); options.SetSourceSize(1); options.SetBinaryZeroIsTerminator(false); return ReadBufferAndDumpToStream<StringElementType::UTF32>(options); }
bool lldb_private::formatters::ObjCSELSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options) { lldb::ValueObjectSP valobj_sp; CompilerType charstar (valobj.GetCompilerType().GetBasicTypeFromAST(eBasicTypeChar).GetPointerType()); if (!charstar) return false; ExecutionContext exe_ctx(valobj.GetExecutionContextRef()); if (is_sel_ptr) { lldb::addr_t data_address = valobj.GetValueAsUnsigned(LLDB_INVALID_ADDRESS); if (data_address == LLDB_INVALID_ADDRESS) return false; valobj_sp = ValueObject::CreateValueObjectFromAddress("text", data_address, exe_ctx, charstar); } else { DataExtractor data; Error error; valobj.GetData(data, error); if (error.Fail()) return false; valobj_sp = ValueObject::CreateValueObjectFromData("text", data, exe_ctx, charstar); } if (!valobj_sp) return false; stream.Printf("%s",valobj_sp->GetSummaryAsCString()); return true; }
bool lldb_private::formatters::WCharSummaryProvider (ValueObject& valobj, Stream& stream) { DataExtractor data; valobj.GetData(data); clang::ASTContext* ast = valobj.GetClangType().GetASTContext(); if (!ast) return false; ClangASTType wchar_clang_type = ClangASTContext::GetBasicType(ast, lldb::eBasicTypeWChar); const uint32_t wchar_size = wchar_clang_type.GetBitSize(); std::string value; switch (wchar_size) { case 8: // utf 8 valobj.GetValueAsCString(lldb::eFormatChar, value); if (!value.empty()) stream.Printf("%s ", value.c_str()); return DumpUTFBufferToStream<UTF8>(nullptr, data, stream, 'L', '\'', 1); case 16: // utf 16 valobj.GetValueAsCString(lldb::eFormatUnicode16, value); if (!value.empty()) stream.Printf("%s ", value.c_str()); return DumpUTFBufferToStream<UTF16>(ConvertUTF16toUTF8, data, stream, 'L', '\'', 1); case 32: // utf 32 valobj.GetValueAsCString(lldb::eFormatUnicode32, value); if (!value.empty()) stream.Printf("%s ", value.c_str()); return DumpUTFBufferToStream<UTF32>(ConvertUTF32toUTF8, data, stream, 'L', '\'', 1); default: stream.Printf("size for wchar_t is not valid"); return true; } return true; }
bool lldb_private::formatters::Char32SummaryProvider (ValueObject& valobj, Stream& stream) { DataExtractor data; valobj.GetData(data); std::string value; valobj.GetValueAsCString(lldb::eFormatUnicode32, value); if (!value.empty()) stream.Printf("%s ", value.c_str()); return DumpUTFBufferToStream<UTF32>(ConvertUTF32toUTF8,data,stream, 'U','\'',1); }
bool lldb_private::formatters::WCharSummaryProvider( ValueObject &valobj, Stream &stream, const TypeSummaryOptions &) { DataExtractor data; Error error; valobj.GetData(data, error); if (error.Fail()) return false; // Get a wchar_t basic type from the current type system CompilerType wchar_compiler_type = valobj.GetCompilerType().GetBasicTypeFromAST(lldb::eBasicTypeWChar); if (!wchar_compiler_type) return false; const uint32_t wchar_size = wchar_compiler_type.GetBitSize( nullptr); // Safe to pass NULL for exe_scope here StringPrinter::ReadBufferAndDumpToStreamOptions options(valobj); options.SetData(data); options.SetStream(&stream); options.SetPrefixToken("L"); options.SetQuote('\''); options.SetSourceSize(1); options.SetBinaryZeroIsTerminator(false); switch (wchar_size) { case 8: return StringPrinter::ReadBufferAndDumpToStream< StringPrinter::StringElementType::UTF8>(options); case 16: return StringPrinter::ReadBufferAndDumpToStream< StringPrinter::StringElementType::UTF16>(options); case 32: return StringPrinter::ReadBufferAndDumpToStream< StringPrinter::StringElementType::UTF32>(options); default: stream.Printf("size for wchar_t is not valid"); return true; } return true; }
bool lldb_private::formatters::WCharSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions&) { DataExtractor data; Error error; valobj.GetData(data, error); if (error.Fail()) return false; ReadBufferAndDumpToStreamOptions options(valobj); options.SetData(data); options.SetStream(&stream); options.SetPrefixToken('L'); options.SetQuote('\''); options.SetSourceSize(1); options.SetBinaryZeroIsTerminator(false); return ReadBufferAndDumpToStream<StringElementType::UTF16>(options); }