Enrico Granata
7e4df56aae
Enable Python summaries to use custom SBTypeSummaryOptions if the user is so inclined. Updates to the webdoc will follow
...
llvm-svn: 222593
2014-11-22 00:02:47 +00:00
Enrico Granata
a126e462c2
Do some cleanup of DumpValueObjectOptions. The whole concept of raw printing was split between feature-specific flags, and an m_be_raw flag, which then drove some other changes in printing behavior. Clean that up, so that each functionality has its own flag .. oh, and make the bools all go in a bitfield since I may want to add more of those over time
...
llvm-svn: 222548
2014-11-21 18:47:26 +00:00
Enrico Granata
34042212b2
Add the ability for the NSString and libc++ std::string formatters to retrieve uncapped data
...
llvm-svn: 222277
2014-11-18 22:54:45 +00:00
Enrico Granata
099263b487
Fix a problem where the StringPrinter could be mistaking an empty string for a read error, and reporting spurious 'unable to read data' messages. rdar://19007243
...
llvm-svn: 222190
2014-11-17 23:14:11 +00:00
Enrico Granata
944547deab
Move a bunch of summary formatters to oneliner mode. This makes more cases eligible for oneline printing, and fixes rdar://18120906
...
llvm-svn: 221701
2014-11-11 19:52:12 +00:00
Shawn Best
8da0bf3b7c
LLGS Android target support - for Andy Chien : http://reviews.llvm.org/D6166
...
llvm-svn: 221570
2014-11-08 01:41:49 +00:00
Enrico Granata
52ab271878
This was meant to be count, not m_count
...
llvm-svn: 221541
2014-11-07 20:37:17 +00:00
Enrico Granata
f35bc63220
This is a large, but clearical, commit that enables the C++ formatters to take on the additional TypeSummaryOptions argument. It is still not used for anything, but it is now there. Adding support for this extra argument to Python formatters will follow suit
...
llvm-svn: 221486
2014-11-06 21:55:30 +00:00
Enrico Granata
c1247f5596
Introduce the notion of "type summary options" as flags that can be passed down to individual summary formatters to alter their behavior in a formatter-dependent way
...
Two flags are introduced:
- preferred display language (as in, ObjC vs. C++)
- summary capping (as in, should a limit be put to the amount of data retrieved)
The meaning - if any - of these options is for individual formatters to establish
The topic of a subsequent commit will be to actually wire these through to individual data formatters
llvm-svn: 221482
2014-11-06 21:23:20 +00:00
Enrico Granata
ebdc1ac014
Add a setting escape-non-printables that drives whether the StringPrinter should or should not escape sequences such as \t, \n, .. and generally any non-printing character
...
The recent StringPrinter changes made this behavior the default, and the setting defaults to yes
If you want to change this behavior and see non-printables unescaped (e.g. "a\tb" as "a b"), set it to false
Fixes rdar://12969594
llvm-svn: 221399
2014-11-05 21:20:48 +00:00
Shawn Best
fd13743f57
for Siva Chandra: Fix compilation of StringPrinter.cpp with GCC. Differential Revision: http://reviews.llvm.org/D6122
...
llvm-svn: 221310
2014-11-04 22:43:34 +00:00
Zachary Turner
c19cf1d424
Remove #include <codecvt>. It isn't supported on all compilers.
...
Also it wasn't being used anyway, so it appears to be a dead include.
llvm-svn: 220921
2014-10-30 19:42:08 +00:00
Enrico Granata
2206b48d6d
Also port the C string reading code in ValueObject over to using StringPrinter API
...
llvm-svn: 220917
2014-10-30 18:27:31 +00:00
Ed Maste
236a5bc619
Fix CMake build, adding StringPrinter.cpp from r220894
...
llvm-svn: 220909
2014-10-30 14:50:42 +00:00
Enrico Granata
ca6c8ee23b
Start adopting the StringPrinter API. The StringPrinter API is the new blessed way of printing strings that supports escaping non-printables, and has better handling of different UTF encodings
...
llvm-svn: 220894
2014-10-30 01:45:39 +00:00
Enrico Granata
76b08d584b
Fix the NSPathStore2 data formatter to actually handle the explicit length stored inside the object. The meat of this commit, however, is a nice little API for easily adding new __lldb_autogen_ helper types to an AST context
...
llvm-svn: 220881
2014-10-29 23:08:02 +00:00
Enrico Granata
b6d7cba141
Shuffle a couple of formatters around. This should fix the bug that never dies, aka rdar://15154623
...
llvm-svn: 220836
2014-10-29 01:03:09 +00:00
Enrico Granata
6714a0fd09
More cleanup of the CXXFormatterFunctions header
...
llvm-svn: 220433
2014-10-22 21:47:27 +00:00
Zachary Turner
b5c4971a4c
Fix CMake build broken after r220421.
...
llvm-svn: 220430
2014-10-22 21:18:29 +00:00
Enrico Granata
e85fe3a4d1
Reorganize some of the data formatters code to simplify CXXFormattersFunction.h. Also, add a synthetic child provider for libc++'s version of std::initializer_list<T>
...
llvm-svn: 220421
2014-10-22 20:34:38 +00:00
Enrico Granata
622be238eb
Expose the type-info flags at the public API layer. These flags provide much more informational content to consumers of the LLDB API than the existing TypeClass. Part of the fix for rdar://18517593
...
llvm-svn: 220322
2014-10-21 20:52:14 +00:00
Eric Christopher
098f898fd2
Move anonymous types declared in an anonymous union to
...
outside the anonymous union as it's a language extension
we don't normally support.
llvm-svn: 220320
2014-10-21 20:39:34 +00:00
Enrico Granata
0e478f5aa3
Make a general helper function on the AST context to retrieve a type by identifier in the fashion needed by data formatters
...
llvm-svn: 220059
2014-10-17 17:56:59 +00:00
Enrico Granata
8d9c2da2d1
Rework this code so that it does not trigger a compiler warning. NFC
...
llvm-svn: 219964
2014-10-16 21:18:58 +00:00
Jason Molenda
665f12a870
Remove unreachable code.
...
llvm-svn: 219911
2014-10-16 08:05:22 +00:00
Enrico Granata
de4de39c9d
This should keep the non-Xcode-based builds happy
...
llvm-svn: 219853
2014-10-15 21:39:17 +00:00
Enrico Granata
5510a5762c
Add synthetic children support for NSIndexPath
...
llvm-svn: 219852
2014-10-15 21:38:32 +00:00
Enrico Granata
db2ecad3cd
The NSDate formatter should use GMT instead of the local timezone. Fixes rdar://13416848
...
llvm-svn: 219841
2014-10-15 20:18:58 +00:00
Enrico Granata
6030e04591
Enhance the libc++ list data formatter so that it does not start looking for loops until asked to actually fetch children. Also, if you're going to read child X, only look for a loop in the first X nodes. Loops further down the road won't really matter. This should speed things up for large lists and fix rdar://18583790
...
llvm-svn: 219447
2014-10-09 21:56:30 +00:00
Enrico Granata
ddac7611ee
If a ValueObject has a child that vends synthetic children, but only does so to generate a value for itself, that's not a disqualifier from one-line printing. Also, fetch synthetic values if available and requested for children as well while printing them
...
llvm-svn: 219427
2014-10-09 18:47:36 +00:00
Enrico Granata
d07cfd3ae4
Extend synthetic children to produce synthetic values (as in, those that GetValueAsUnsigned(), GetValueAsCString() would return)
...
The way to do this is to write a synthetic child provider for your type, and have it vend the (optional) get_value function.
If get_value is defined, and it returns a valid SBValue, that SBValue's value (as in lldb_private::Value) will be used as the synthetic ValueObject's Value
The rationale for doing things this way is twofold:
- there are many possible ways to define a "value" (SBData, a Python number, ...) but SBValue seems general enough as a thing that stores a "value", so we just trade values that way and that keeps our currency trivial
- we could introduce a new level of layering (ValueObjectSyntheticValue), a new kind of formatter (synthetic value producer), but that would complicate the model (can I have a dynamic with no synthetic children but synthetic value? synthetic value with synthetic children but no dynamic?), and I really couldn't see much benefit to be reaped from this added complexity in the matrix
On the other hand, just defining a synthetic child provider with a get_value but returning no actual children is easy enough that it's not a significant road-block to adoption of this feature
Comes with a test case
llvm-svn: 219330
2014-10-08 18:27:36 +00:00
Enrico Granata
29551955a9
The type category enable * was implemented assuming a previous disable * had happened. While that will most likely be true in practice, the consequences of this not being the case will be a crash. I fix the crash by doing two things: 1) don't let already-enabled categories be enabled anyway; 2) if a category were disabled but with a bogus last-enabled position - highly highly unlikely - just put it in the first empty slot. I am not so sure 2) is bulletproof perfect, but I also don't think 2) will practically ever happen
...
llvm-svn: 219245
2014-10-07 22:15:27 +00:00
Enrico Granata
29ba63d336
Stop enabling the std::vector<bool> data formatter for libstdc++, and for that matter, also skip running the test on Darwin. libstdc++ is more relevant on non-Apple platforms
...
llvm-svn: 218952
2014-10-03 01:54:10 +00:00
Enrico Granata
e7687adc60
Issuing a "type category disable *" command followed by a "type category enable *" command does not honor the order in which categories were previously enabled
...
While we didn't really promise it would, it seems like it should
This checkin enables just that, and fixes rdar://18527468
llvm-svn: 218949
2014-10-03 01:48:32 +00:00
Enrico Granata
ba4b788ae7
Unused functions break the -Werror build. Revert for now.
...
llvm-svn: 217900
2014-09-16 20:28:26 +00:00
Enrico Granata
438aba6fdd
Add a convenience function to FormatManager to setup an empty filter (one that suppresses all children, that is)
...
llvm-svn: 217891
2014-09-16 17:41:54 +00:00
Jason Molenda
e6481c7e0f
Fix the ctor ivar initialization formatting for Debugger,
...
TypeValidatorImpl, FileAction, and ProcessLaunchInfo to match the
lldb coding convention.
llvm-svn: 217653
2014-09-12 01:50:46 +00:00
Enrico Granata
340fa53411
Recent builds of libcxx actually wrap an std::map's children values in a union containing either a member named __cc, or either of __cc and __nc (const vs. non-const). This level of wrapping is quite useless for LLDB to show to people, so try to detect it, and filter it out
...
llvm-svn: 217651
2014-09-12 00:55:37 +00:00
Enrico Granata
42fa4af8fe
When deciding if one-liner printing applies, and you find a summary, the summary is a good candidate to ask. While in theory one could want one-liner printing with a non-one-liner summary, I don't see LLDB as the best place to solve such inner conflicts
...
llvm-svn: 217641
2014-09-11 23:00:27 +00:00
Saleem Abdulrasool
82944983b4
DataFormatters: add missing destructor implementation
...
The last of the missing symbols to correct the make based build to restore the
FreeBSD buildbot!
llvm-svn: 217394
2014-09-08 18:26:57 +00:00
Saleem Abdulrasool
96a60f8e7d
DataFormatters: add missing function implementations
...
This adds a definition for the TypeValidatorImpl_CXX destructor. Because the
destructor is first virtual method, and declared out-of-line, it also serves as
the key function. Since no definition was present, no virtual table for
TypeValidatorImpl_CXX was emitted, which results in link failures due to
references to undefined symbols.
Also add a definition for a TypeValidatorImpl contructor which was declared
out-of-line and referenced in a constructor for TypeValidatorImpl_CXX.
llvm-svn: 217375
2014-09-08 14:59:33 +00:00
Saleem Abdulrasool
1f652ed4a8
DataFormatters: use include instead of import in C++
...
'#import' is an Objective-C construct; avoid using it in C++. NFC.
Addresses PR20867.
Patch by Kevin Avila!
llvm-svn: 217340
2014-09-07 18:33:44 +00:00
Enrico Granata
0f883ffbdb
Add a -V <bool> flag to frame variable/expression that enables execution of type validators. The jury is still out on what the user experience of type validators should be, so for now gate it on a specific flag. The mode I am using is prefix variables that fail to validate with a bang, and then emitting the actual validation error on a separate line. Of course, given the total absence of validators, this should never actually happen to you
...
llvm-svn: 217303
2014-09-06 02:20:19 +00:00
Enrico Granata
744794aa96
Start plumbing the type validator logic through to the ValueObjects; allow a ValueObject to have a validator, to update it from the FormatManager, and to retrieve (and cache) the result of the validation
...
llvm-svn: 217282
2014-09-05 21:46:22 +00:00
Todd Fiala
4bce548a6b
Add TypeValidator.cpp to cmake build.
...
llvm-svn: 217280
2014-09-05 21:23:09 +00:00
Enrico Granata
c582713ce6
Introduce the notion of a "type validator" formatter
...
Type Validators have the purpose of looking at a ValueObject, and making sure that there is nothing semantically wrong about the object's contents
For instance, if you have a class that represents a speed, the validator might trigger if the speed value is greater than the speed of light
This first patch hooks up the moving parts in the formatters subsystem, but does not link ValueObjects to TypeValidators, nor lets the SB API be exposed to validators
It also lacks the notion of Python validators
llvm-svn: 217277
2014-09-05 20:45:07 +00:00
Enrico Granata
4419d539cf
Add __NSCFDictionary to the list of NSDictionary-like types for which we know to generate synthetic children
...
llvm-svn: 216513
2014-08-27 01:10:27 +00:00
Enrico Granata
ecd02bc136
Refactor the hardcoded formatters facility to use sequences of lambdas - still no feature change as none are present now, but this feels cleaner. Also, hardcoded formatters do not need to be per-type, so disable caching thereof
...
llvm-svn: 216004
2014-08-19 18:47:58 +00:00
Enrico Granata
781a7b04f2
Enable the data formatter for std::vector<bool> on libc++ again. In recent clang builds, we are vended a different typename, which the formatter needs to match against.
...
llvm-svn: 215801
2014-08-16 01:02:36 +00:00
Enrico Granata
ba8eb12046
Improve the way the ObjC data formatters fetch a valid frame to use for running expressions against
...
This is not bullet-proof, as you might end up running in a thread where you shouldn't, but the previous policy had the same drawback
Also, in cases where code-running formatters were being recursively applied, the previous policy caused deeper levels to fail, whereas this will at least get such scenarios to function
We might eventually want to consider disqualifying certain threads/frames for "viability", but I'd rather keep it simple until complexity is proven to be necessary
llvm-svn: 214337
2014-07-30 21:07:50 +00:00