- you can use a Python script to write a summary string for data-types, in one of
three ways:
-P option and typing the script a line at a time
-s option and passing a one-line Python script
-F option and passing the name of a Python function
these options all work for the "type summary add" command
your Python code (if provided through -P or -s) is wrapped in a function
that accepts two parameters: valobj (a ValueObject) and dict (an LLDB
internal dictionary object). if you use -F and give a function name,
you're expected to define the function on your own and with the right
prototype. your function, however defined, must return a Python string
- test case for the Python summary feature
- a few quirks:
Python summaries cannot have names, and cannot use regex as type names
both issues will be fixed ASAP
major redesign of type summary code:
- type summary working with strings and type summary working with Python code
are two classes, with a common base class SummaryFormat
- SummaryFormat classes now are able to actively format objects rather than
just aggregating data
- cleaner code to print descriptions for summaries
the public API now exports a method to easily navigate a ValueObject hierarchy
New InputReaderEZ and PriorityPointerPair classes
Several minor fixes and improvements
llvm-svn: 135238
57 lines
1.5 KiB
C++
57 lines
1.5 KiB
C++
//===-- RefCounter.h --------------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef liblldb_RefCounter_h_
|
|
#define liblldb_RefCounter_h_
|
|
|
|
#include "lldb/lldb-public.h"
|
|
|
|
namespace lldb_utility {
|
|
|
|
//----------------------------------------------------------------------
|
|
// A simple reference counter object. You need an uint32_t* to use it
|
|
// Once that is in place, everyone who needs to ref-count, can say
|
|
// RefCounter ref(ptr);
|
|
// (of course, the pointer is a shared resource, and must be accessible to
|
|
// everyone who needs it). Synchronization is handled by RefCounter itself
|
|
// The counter is decreased each time a RefCounter to it goes out of scope
|
|
//----------------------------------------------------------------------
|
|
class RefCounter
|
|
{
|
|
public:
|
|
typedef uint32_t value_type;
|
|
|
|
RefCounter(value_type* ctr);
|
|
|
|
~RefCounter();
|
|
|
|
private:
|
|
value_type* m_counter;
|
|
DISALLOW_COPY_AND_ASSIGN (RefCounter);
|
|
|
|
template <class T>
|
|
inline T
|
|
increment(T* t)
|
|
{
|
|
return __sync_fetch_and_add(t, 1);
|
|
}
|
|
|
|
template <class T>
|
|
inline T
|
|
decrement(T* t)
|
|
{
|
|
return __sync_fetch_and_add(t, -1);
|
|
}
|
|
|
|
};
|
|
|
|
} // namespace lldb_utility
|
|
|
|
#endif // #ifndef liblldb_RefCounter_h_
|