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
|