CXXFormatterFunctions.h revision cc5d27417b9f958d596a438290a9adb17674b487
1//===-- CXXFormatterFunctions.h------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef liblldb_CXXFormatterFunctions_h_ 11#define liblldb_CXXFormatterFunctions_h_ 12 13#include <stdint.h> 14#include <time.h> 15 16#include "lldb/lldb-forward.h" 17 18#include "lldb/Core/ConstString.h" 19#include "lldb/DataFormatters/FormatClasses.h" 20#include "lldb/Target/Target.h" 21 22#include "clang/AST/ASTContext.h" 23 24namespace lldb_private { 25 namespace formatters 26 { 27 bool 28 ExtractValueFromObjCExpression (ValueObject &valobj, 29 const char* target_type, 30 const char* selector, 31 uint64_t &value); 32 33 bool 34 ExtractSummaryFromObjCExpression (ValueObject &valobj, 35 const char* target_type, 36 const char* selector, 37 Stream &stream); 38 39 lldb::ValueObjectSP 40 CallSelectorOnObject (ValueObject &valobj, 41 const char* return_type, 42 const char* selector, 43 uint64_t index); 44 45 lldb::ValueObjectSP 46 CallSelectorOnObject (ValueObject &valobj, 47 const char* return_type, 48 const char* selector, 49 const char* key); 50 51 size_t 52 ExtractIndexFromString (const char* item_name); 53 54 time_t 55 GetOSXEpoch (); 56 57 bool 58 Char16StringSummaryProvider (ValueObject& valobj, Stream& stream); // char16_t* and unichar* 59 60 bool 61 Char32StringSummaryProvider (ValueObject& valobj, Stream& stream); // char32_t* 62 63 bool 64 WCharStringSummaryProvider (ValueObject& valobj, Stream& stream); // wchar_t* 65 66 bool 67 Char16SummaryProvider (ValueObject& valobj, Stream& stream); // char16_t and unichar 68 69 bool 70 Char32SummaryProvider (ValueObject& valobj, Stream& stream); // char32_t 71 72 bool 73 WCharSummaryProvider (ValueObject& valobj, Stream& stream); // wchar_t 74 75 bool 76 LibcxxStringSummaryProvider (ValueObject& valobj, Stream& stream); // libc++ std::string 77 78 bool 79 LibcxxWStringSummaryProvider (ValueObject& valobj, Stream& stream); // libc++ std::wstring 80 81 bool 82 ObjCClassSummaryProvider (ValueObject& valobj, Stream& stream); 83 84 template<bool name_entries> 85 bool 86 NSDictionarySummaryProvider (ValueObject& valobj, Stream& stream); 87 88 bool 89 NSIndexSetSummaryProvider (ValueObject& valobj, Stream& stream); 90 91 bool 92 NSArraySummaryProvider (ValueObject& valobj, Stream& stream); 93 94 template<bool cf_style> 95 bool 96 NSSetSummaryProvider (ValueObject& valobj, Stream& stream); 97 98 template<bool needs_at> 99 bool 100 NSDataSummaryProvider (ValueObject& valobj, Stream& stream); 101 102 bool 103 NSNumberSummaryProvider (ValueObject& valobj, Stream& stream); 104 105 bool 106 NSNotificationSummaryProvider (ValueObject& valobj, Stream& stream); 107 108 bool 109 NSTimeZoneSummaryProvider (ValueObject& valobj, Stream& stream); 110 111 bool 112 NSMachPortSummaryProvider (ValueObject& valobj, Stream& stream); 113 114 bool 115 CFBagSummaryProvider (ValueObject& valobj, Stream& stream); 116 117 bool 118 CFBinaryHeapSummaryProvider (ValueObject& valobj, Stream& stream); 119 120 bool 121 CFBitVectorSummaryProvider (ValueObject& valobj, Stream& stream); 122 123 bool 124 NSDateSummaryProvider (ValueObject& valobj, Stream& stream); 125 126 bool 127 CFAbsoluteTimeSummaryProvider (ValueObject& valobj, Stream& stream); 128 129 bool 130 NSBundleSummaryProvider (ValueObject& valobj, Stream& stream); 131 132 bool 133 NSStringSummaryProvider (ValueObject& valobj, Stream& stream); 134 135 bool 136 NSAttributedStringSummaryProvider (ValueObject& valobj, Stream& stream); 137 138 bool 139 NSMutableAttributedStringSummaryProvider (ValueObject& valobj, Stream& stream); 140 141 bool 142 NSURLSummaryProvider (ValueObject& valobj, Stream& stream); 143 144 bool 145 ObjCBOOLSummaryProvider (ValueObject& valobj, Stream& stream); 146 147 template <bool is_sel_ptr> 148 bool 149 ObjCSELSummaryProvider (ValueObject& valobj, Stream& stream); 150 151 bool 152 RuntimeSpecificDescriptionSummaryProvider (ValueObject& valobj, Stream& stream); 153 154 extern template bool 155 NSDictionarySummaryProvider<true> (ValueObject&, Stream&) ; 156 157 extern template bool 158 NSDictionarySummaryProvider<false> (ValueObject&, Stream&) ; 159 160 extern template bool 161 NSDataSummaryProvider<true> (ValueObject&, Stream&) ; 162 163 extern template bool 164 NSDataSummaryProvider<false> (ValueObject&, Stream&) ; 165 166 extern template bool 167 ObjCSELSummaryProvider<true> (ValueObject&, Stream&); 168 169 extern template bool 170 ObjCSELSummaryProvider<false> (ValueObject&, Stream&); 171 172 class NSArrayMSyntheticFrontEnd : public SyntheticChildrenFrontEnd 173 { 174 private: 175 struct DataDescriptor_32 176 { 177 uint32_t _used; 178 uint32_t _priv1 : 2 ; 179 uint32_t _size : 30; 180 uint32_t _priv2 : 2; 181 uint32_t offset : 30; 182 uint32_t _priv3; 183 uint32_t _data; 184 }; 185 struct DataDescriptor_64 186 { 187 uint64_t _used; 188 uint64_t _priv1 : 2 ; 189 uint64_t _size : 62; 190 uint64_t _priv2 : 2; 191 uint64_t offset : 62; 192 uint32_t _priv3; 193 uint64_t _data; 194 }; 195 public: 196 NSArrayMSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 197 198 virtual size_t 199 CalculateNumChildren (); 200 201 virtual lldb::ValueObjectSP 202 GetChildAtIndex (size_t idx); 203 204 virtual bool 205 Update(); 206 207 virtual bool 208 MightHaveChildren (); 209 210 virtual size_t 211 GetIndexOfChildWithName (const ConstString &name); 212 213 virtual 214 ~NSArrayMSyntheticFrontEnd (); 215 private: 216 ExecutionContextRef m_exe_ctx_ref; 217 uint8_t m_ptr_size; 218 DataDescriptor_32 *m_data_32; 219 DataDescriptor_64 *m_data_64; 220 ClangASTType m_id_type; 221 std::vector<lldb::ValueObjectSP> m_children; 222 }; 223 224 class NSArrayISyntheticFrontEnd : public SyntheticChildrenFrontEnd 225 { 226 public: 227 NSArrayISyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 228 229 virtual size_t 230 CalculateNumChildren (); 231 232 virtual lldb::ValueObjectSP 233 GetChildAtIndex (size_t idx); 234 235 virtual bool 236 Update(); 237 238 virtual bool 239 MightHaveChildren (); 240 241 virtual size_t 242 GetIndexOfChildWithName (const ConstString &name); 243 244 virtual 245 ~NSArrayISyntheticFrontEnd (); 246 private: 247 ExecutionContextRef m_exe_ctx_ref; 248 uint8_t m_ptr_size; 249 uint64_t m_items; 250 lldb::addr_t m_data_ptr; 251 ClangASTType m_id_type; 252 std::vector<lldb::ValueObjectSP> m_children; 253 }; 254 255 class NSArrayCodeRunningSyntheticFrontEnd : public SyntheticChildrenFrontEnd 256 { 257 public: 258 NSArrayCodeRunningSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 259 260 virtual size_t 261 CalculateNumChildren (); 262 263 virtual lldb::ValueObjectSP 264 GetChildAtIndex (size_t idx); 265 266 virtual bool 267 Update(); 268 269 virtual bool 270 MightHaveChildren (); 271 272 virtual size_t 273 GetIndexOfChildWithName (const ConstString &name); 274 275 virtual 276 ~NSArrayCodeRunningSyntheticFrontEnd (); 277 }; 278 279 SyntheticChildrenFrontEnd* NSArraySyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP); 280 281 class NSDictionaryISyntheticFrontEnd : public SyntheticChildrenFrontEnd 282 { 283 private: 284 struct DataDescriptor_32 285 { 286 uint32_t _used : 26; 287 uint32_t _szidx : 6; 288 }; 289 struct DataDescriptor_64 290 { 291 uint64_t _used : 58; 292 uint32_t _szidx : 6; 293 }; 294 295 struct DictionaryItemDescriptor 296 { 297 lldb::addr_t key_ptr; 298 lldb::addr_t val_ptr; 299 lldb::ValueObjectSP valobj_sp; 300 }; 301 302 public: 303 NSDictionaryISyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 304 305 virtual size_t 306 CalculateNumChildren (); 307 308 virtual lldb::ValueObjectSP 309 GetChildAtIndex (size_t idx); 310 311 virtual bool 312 Update(); 313 314 virtual bool 315 MightHaveChildren (); 316 317 virtual size_t 318 GetIndexOfChildWithName (const ConstString &name); 319 320 virtual 321 ~NSDictionaryISyntheticFrontEnd (); 322 private: 323 ExecutionContextRef m_exe_ctx_ref; 324 uint8_t m_ptr_size; 325 DataDescriptor_32 *m_data_32; 326 DataDescriptor_64 *m_data_64; 327 lldb::addr_t m_data_ptr; 328 std::vector<DictionaryItemDescriptor> m_children; 329 }; 330 331 class NSDictionaryMSyntheticFrontEnd : public SyntheticChildrenFrontEnd 332 { 333 private: 334 struct DataDescriptor_32 335 { 336 uint32_t _used : 26; 337 uint32_t _kvo : 1; 338 uint32_t _size; 339 uint32_t _mutations; 340 uint32_t _objs_addr; 341 uint32_t _keys_addr; 342 }; 343 struct DataDescriptor_64 344 { 345 uint64_t _used : 58; 346 uint32_t _kvo : 1; 347 uint64_t _size; 348 uint64_t _mutations; 349 uint64_t _objs_addr; 350 uint64_t _keys_addr; 351 }; 352 struct DictionaryItemDescriptor 353 { 354 lldb::addr_t key_ptr; 355 lldb::addr_t val_ptr; 356 lldb::ValueObjectSP valobj_sp; 357 }; 358 public: 359 NSDictionaryMSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 360 361 virtual size_t 362 CalculateNumChildren (); 363 364 virtual lldb::ValueObjectSP 365 GetChildAtIndex (size_t idx); 366 367 virtual bool 368 Update(); 369 370 virtual bool 371 MightHaveChildren (); 372 373 virtual size_t 374 GetIndexOfChildWithName (const ConstString &name); 375 376 virtual 377 ~NSDictionaryMSyntheticFrontEnd (); 378 private: 379 ExecutionContextRef m_exe_ctx_ref; 380 uint8_t m_ptr_size; 381 DataDescriptor_32 *m_data_32; 382 DataDescriptor_64 *m_data_64; 383 std::vector<DictionaryItemDescriptor> m_children; 384 }; 385 386 class NSDictionaryCodeRunningSyntheticFrontEnd : public SyntheticChildrenFrontEnd 387 { 388 public: 389 NSDictionaryCodeRunningSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 390 391 virtual size_t 392 CalculateNumChildren (); 393 394 virtual lldb::ValueObjectSP 395 GetChildAtIndex (size_t idx); 396 397 virtual bool 398 Update(); 399 400 virtual bool 401 MightHaveChildren (); 402 403 virtual size_t 404 GetIndexOfChildWithName (const ConstString &name); 405 406 virtual 407 ~NSDictionaryCodeRunningSyntheticFrontEnd (); 408 }; 409 410 SyntheticChildrenFrontEnd* NSDictionarySyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP); 411 412 class NSSetISyntheticFrontEnd : public SyntheticChildrenFrontEnd 413 { 414 private: 415 struct DataDescriptor_32 416 { 417 uint32_t _used : 26; 418 uint32_t _szidx : 6; 419 }; 420 struct DataDescriptor_64 421 { 422 uint64_t _used : 58; 423 uint32_t _szidx : 6; 424 }; 425 426 struct SetItemDescriptor 427 { 428 lldb::addr_t item_ptr; 429 lldb::ValueObjectSP valobj_sp; 430 }; 431 432 public: 433 NSSetISyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 434 435 virtual size_t 436 CalculateNumChildren (); 437 438 virtual lldb::ValueObjectSP 439 GetChildAtIndex (size_t idx); 440 441 virtual bool 442 Update(); 443 444 virtual bool 445 MightHaveChildren (); 446 447 virtual size_t 448 GetIndexOfChildWithName (const ConstString &name); 449 450 virtual 451 ~NSSetISyntheticFrontEnd (); 452 private: 453 ExecutionContextRef m_exe_ctx_ref; 454 uint8_t m_ptr_size; 455 DataDescriptor_32 *m_data_32; 456 DataDescriptor_64 *m_data_64; 457 lldb::addr_t m_data_ptr; 458 std::vector<SetItemDescriptor> m_children; 459 }; 460 461 class NSSetMSyntheticFrontEnd : public SyntheticChildrenFrontEnd 462 { 463 private: 464 struct DataDescriptor_32 465 { 466 uint32_t _used : 26; 467 uint32_t _size; 468 uint32_t _mutations; 469 uint32_t _objs_addr; 470 }; 471 struct DataDescriptor_64 472 { 473 uint64_t _used : 58; 474 uint64_t _size; 475 uint64_t _mutations; 476 uint64_t _objs_addr; 477 }; 478 struct SetItemDescriptor 479 { 480 lldb::addr_t item_ptr; 481 lldb::ValueObjectSP valobj_sp; 482 }; 483 public: 484 NSSetMSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 485 486 virtual size_t 487 CalculateNumChildren (); 488 489 virtual lldb::ValueObjectSP 490 GetChildAtIndex (size_t idx); 491 492 virtual bool 493 Update(); 494 495 virtual bool 496 MightHaveChildren (); 497 498 virtual size_t 499 GetIndexOfChildWithName (const ConstString &name); 500 501 virtual 502 ~NSSetMSyntheticFrontEnd (); 503 private: 504 ExecutionContextRef m_exe_ctx_ref; 505 uint8_t m_ptr_size; 506 DataDescriptor_32 *m_data_32; 507 DataDescriptor_64 *m_data_64; 508 std::vector<SetItemDescriptor> m_children; 509 }; 510 511 class NSSetCodeRunningSyntheticFrontEnd : public SyntheticChildrenFrontEnd 512 { 513 public: 514 NSSetCodeRunningSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 515 516 virtual size_t 517 CalculateNumChildren (); 518 519 virtual lldb::ValueObjectSP 520 GetChildAtIndex (size_t idx); 521 522 virtual bool 523 Update(); 524 525 virtual bool 526 MightHaveChildren (); 527 528 virtual size_t 529 GetIndexOfChildWithName (const ConstString &name); 530 531 virtual 532 ~NSSetCodeRunningSyntheticFrontEnd (); 533 }; 534 535 SyntheticChildrenFrontEnd* NSSetSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP); 536 537 class LibcxxVectorBoolSyntheticFrontEnd : public SyntheticChildrenFrontEnd 538 { 539 public: 540 LibcxxVectorBoolSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 541 542 virtual size_t 543 CalculateNumChildren (); 544 545 virtual lldb::ValueObjectSP 546 GetChildAtIndex (size_t idx); 547 548 virtual bool 549 Update(); 550 551 virtual bool 552 MightHaveChildren (); 553 554 virtual size_t 555 GetIndexOfChildWithName (const ConstString &name); 556 557 virtual 558 ~LibcxxVectorBoolSyntheticFrontEnd (); 559 private: 560 ExecutionContextRef m_exe_ctx_ref; 561 uint64_t m_count; 562 lldb::addr_t m_base_data_address; 563 EvaluateExpressionOptions m_options; 564 }; 565 566 SyntheticChildrenFrontEnd* LibcxxVectorBoolSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP); 567 568 class LibstdcppVectorBoolSyntheticFrontEnd : public SyntheticChildrenFrontEnd 569 { 570 public: 571 LibstdcppVectorBoolSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 572 573 virtual size_t 574 CalculateNumChildren (); 575 576 virtual lldb::ValueObjectSP 577 GetChildAtIndex (size_t idx); 578 579 virtual bool 580 Update(); 581 582 virtual bool 583 MightHaveChildren (); 584 585 virtual size_t 586 GetIndexOfChildWithName (const ConstString &name); 587 588 virtual 589 ~LibstdcppVectorBoolSyntheticFrontEnd (); 590 private: 591 ExecutionContextRef m_exe_ctx_ref; 592 uint64_t m_count; 593 lldb::addr_t m_base_data_address; 594 EvaluateExpressionOptions m_options; 595 }; 596 597 SyntheticChildrenFrontEnd* LibstdcppVectorBoolSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP); 598 599 class LibstdcppMapIteratorSyntheticFrontEnd : public SyntheticChildrenFrontEnd 600 { 601 public: 602 LibstdcppMapIteratorSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 603 604 virtual size_t 605 CalculateNumChildren (); 606 607 virtual lldb::ValueObjectSP 608 GetChildAtIndex (size_t idx); 609 610 virtual bool 611 Update(); 612 613 virtual bool 614 MightHaveChildren (); 615 616 virtual size_t 617 GetIndexOfChildWithName (const ConstString &name); 618 619 virtual 620 ~LibstdcppMapIteratorSyntheticFrontEnd (); 621 private: 622 ExecutionContextRef m_exe_ctx_ref; 623 lldb::addr_t m_pair_address; 624 ClangASTType m_pair_type; 625 EvaluateExpressionOptions m_options; 626 lldb::ValueObjectSP m_pair_sp; 627 }; 628 629 SyntheticChildrenFrontEnd* LibstdcppMapIteratorSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP); 630 631 class LibCxxMapIteratorSyntheticFrontEnd : public SyntheticChildrenFrontEnd 632 { 633 public: 634 LibCxxMapIteratorSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 635 636 virtual size_t 637 CalculateNumChildren (); 638 639 virtual lldb::ValueObjectSP 640 GetChildAtIndex (size_t idx); 641 642 virtual bool 643 Update(); 644 645 virtual bool 646 MightHaveChildren (); 647 648 virtual size_t 649 GetIndexOfChildWithName (const ConstString &name); 650 651 virtual 652 ~LibCxxMapIteratorSyntheticFrontEnd (); 653 private: 654 ValueObject *m_pair_ptr; 655 }; 656 657 SyntheticChildrenFrontEnd* LibCxxMapIteratorSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP); 658 659 class VectorIteratorSyntheticFrontEnd : public SyntheticChildrenFrontEnd 660 { 661 public: 662 VectorIteratorSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp, 663 ConstString item_name); 664 665 virtual size_t 666 CalculateNumChildren (); 667 668 virtual lldb::ValueObjectSP 669 GetChildAtIndex (size_t idx); 670 671 virtual bool 672 Update(); 673 674 virtual bool 675 MightHaveChildren (); 676 677 virtual size_t 678 GetIndexOfChildWithName (const ConstString &name); 679 680 virtual 681 ~VectorIteratorSyntheticFrontEnd (); 682 private: 683 ExecutionContextRef m_exe_ctx_ref; 684 ConstString m_item_name; 685 lldb::ValueObjectSP m_item_sp; 686 }; 687 688 SyntheticChildrenFrontEnd* LibCxxVectorIteratorSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP); 689 690 SyntheticChildrenFrontEnd* LibStdcppVectorIteratorSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP); 691 692 class LibcxxSharedPtrSyntheticFrontEnd : public SyntheticChildrenFrontEnd 693 { 694 public: 695 LibcxxSharedPtrSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 696 697 virtual size_t 698 CalculateNumChildren (); 699 700 virtual lldb::ValueObjectSP 701 GetChildAtIndex (size_t idx); 702 703 virtual bool 704 Update(); 705 706 virtual bool 707 MightHaveChildren (); 708 709 virtual size_t 710 GetIndexOfChildWithName (const ConstString &name); 711 712 virtual 713 ~LibcxxSharedPtrSyntheticFrontEnd (); 714 private: 715 ValueObject* m_cntrl; 716 lldb::ValueObjectSP m_count_sp; 717 lldb::ValueObjectSP m_weak_count_sp; 718 uint8_t m_ptr_size; 719 lldb::ByteOrder m_byte_order; 720 }; 721 722 SyntheticChildrenFrontEnd* LibcxxSharedPtrSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP); 723 724 class LibcxxStdVectorSyntheticFrontEnd : public SyntheticChildrenFrontEnd 725 { 726 public: 727 LibcxxStdVectorSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 728 729 virtual size_t 730 CalculateNumChildren (); 731 732 virtual lldb::ValueObjectSP 733 GetChildAtIndex (size_t idx); 734 735 virtual bool 736 Update(); 737 738 virtual bool 739 MightHaveChildren (); 740 741 virtual size_t 742 GetIndexOfChildWithName (const ConstString &name); 743 744 virtual 745 ~LibcxxStdVectorSyntheticFrontEnd (); 746 private: 747 ValueObject* m_start; 748 ValueObject* m_finish; 749 ClangASTType m_element_type; 750 uint32_t m_element_size; 751 std::map<size_t,lldb::ValueObjectSP> m_children; 752 }; 753 754 SyntheticChildrenFrontEnd* LibcxxStdVectorSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP); 755 756 class LibcxxStdListSyntheticFrontEnd : public SyntheticChildrenFrontEnd 757 { 758 public: 759 LibcxxStdListSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 760 761 virtual size_t 762 CalculateNumChildren (); 763 764 virtual lldb::ValueObjectSP 765 GetChildAtIndex (size_t idx); 766 767 virtual bool 768 Update(); 769 770 virtual bool 771 MightHaveChildren (); 772 773 virtual size_t 774 GetIndexOfChildWithName (const ConstString &name); 775 776 virtual 777 ~LibcxxStdListSyntheticFrontEnd (); 778 private: 779 bool 780 HasLoop(); 781 782 static const size_t g_list_capping_size = 255; 783 static const bool g_use_loop_detect = true; 784 lldb::addr_t m_node_address; 785 ValueObject* m_head; 786 ValueObject* m_tail; 787 ClangASTType m_element_type; 788 uint32_t m_element_size; 789 size_t m_count; 790 std::map<size_t,lldb::ValueObjectSP> m_children; 791 }; 792 793 SyntheticChildrenFrontEnd* LibcxxStdListSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP); 794 795 class LibcxxStdMapSyntheticFrontEnd : public SyntheticChildrenFrontEnd 796 { 797 public: 798 LibcxxStdMapSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 799 800 virtual size_t 801 CalculateNumChildren (); 802 803 virtual lldb::ValueObjectSP 804 GetChildAtIndex (size_t idx); 805 806 virtual bool 807 Update(); 808 809 virtual bool 810 MightHaveChildren (); 811 812 virtual size_t 813 GetIndexOfChildWithName (const ConstString &name); 814 815 virtual 816 ~LibcxxStdMapSyntheticFrontEnd (); 817 private: 818 bool 819 GetDataType(); 820 821 void 822 GetValueOffset (const lldb::ValueObjectSP& node); 823 824 static const size_t g_map_capping_size = 255; 825 ValueObject* m_tree; 826 ValueObject* m_root_node; 827 ClangASTType m_element_type; 828 uint32_t m_element_size; 829 uint32_t m_skip_size; 830 size_t m_count; 831 std::map<size_t,lldb::ValueObjectSP> m_children; 832 }; 833 834 SyntheticChildrenFrontEnd* LibcxxStdMapSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP); 835 836 } // namespace formatters 837} // namespace lldb_private 838 839#endif // liblldb_CXXFormatterFunctions_h_ 840