History log of /external/lldb/test/python_api/value/linked_list/main.cpp
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
758db9690ae3d2f65fc5e6ef177581ae8d75221d 11-Aug-2011 Johnny Chen <johnny.chen@apple.com> Add logic to SBValue.linked_list_iter() to detect infinite loop and to bail out early.
Add code to test case to create an evil linked list with:

task_evil -> task_2 -> task_3 -> task_evil ...

and to check that the linked list iterator only iterates 3 times.


git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@137291 91177308-0d34-0410-b5e6-96231b3b80d8
/external/lldb/test/python_api/value/linked_list/main.cpp
d96c9e88f80b8856aa76b7e7dd41acdf2bec202e 11-Aug-2011 Johnny Chen <johnny.chen@apple.com> Change the SBValue.linked_list_iter() to treat the value object as a homogeneous linked list data structure
where an empty linked list is represented as a value object with a NULL value, instead of a special value
object which 'points' to NULL.

Also modifies the test case to comply.

rdar://problem/9933692


git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@137289 91177308-0d34-0410-b5e6-96231b3b80d8
/external/lldb/test/python_api/value/linked_list/main.cpp
38581d29207f732ab913f2d0c1f203fce1749b0e 27-Jul-2011 Johnny Chen <johnny.chen@apple.com> The SBValue.linked_list_iter() API failed for an empty list.
Fix the bug and add a test case.


git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@136265 91177308-0d34-0410-b5e6-96231b3b80d8
/external/lldb/test/python_api/value/linked_list/main.cpp
fbebbc9e3b140e77886db46a84f58aef2ea72bb8 25-Jul-2011 Johnny Chen <johnny.chen@apple.com> Provide an add-on API to SBValue class by post-processing to provide a way
to iterate through an SBValue instance by treating it as the head of a linked
list. API program must provide two args to the linked_list_iter() method:
the first being the child member name which points to the next item on the list
and the second being a Python function which an SBValue (for the next item) and
returns True if end of list is reached, otherwise it returns False.

For example, suppose we have the following sample program.

#include <stdio.h>

class Task {
public:
int id;
Task *next;
Task(int i, Task *n):
id(i),
next(n)
{}
};


int main (int argc, char const *argv[])
{
Task *task_head = new Task(-1, NULL);
Task *task1 = new Task(1, NULL);
Task *task2 = new Task(2, NULL);
Task *task3 = new Task(3, NULL); // Orphaned.
Task *task4 = new Task(4, NULL);
Task *task5 = new Task(5, NULL);

task_head->next = task1;
task1->next = task2;
task2->next = task4;
task4->next = task5;

int total = 0; // Break at this line
Task *t = task_head;
while (t != NULL) {
if (t->id >= 0)
++total;
t = t->next;
}
printf("We have a total number of %d tasks\n", total);
return 0;
}

The test program produces the following output while exercising the linked_list_iter() SBVAlue API:

task_head:
TypeName -> Task *
ByteSize -> 8
NumChildren -> 2
Value -> 0x0000000106400380
ValueType -> local_variable
Summary -> None
IsPointerType -> True
Location -> 0x00007fff65f06e60
(Task *) next = 0x0000000106400390
(int) id = 1
(Task *) next = 0x00000001064003a0

(Task *) next = 0x00000001064003a0
(int) id = 2
(Task *) next = 0x00000001064003c0

(Task *) next = 0x00000001064003c0
(int) id = 4
(Task *) next = 0x00000001064003d0

(Task *) next = 0x00000001064003d0
(int) id = 5
(Task *) next = 0x0000000000000000



git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@135938 91177308-0d34-0410-b5e6-96231b3b80d8
/external/lldb/test/python_api/value/linked_list/main.cpp