Index: gdb/testsuite/gdb.python/py-prettyprint.py |
diff --git a/gdb/testsuite/gdb.python/py-prettyprint.py b/gdb/testsuite/gdb.python/py-prettyprint.py |
index 6e960e6805d543b78112ef7f9a55e4201c2ba426..f3894c374c0daf292facadfa57243b6523447a2e 100644 |
--- a/gdb/testsuite/gdb.python/py-prettyprint.py |
+++ b/gdb/testsuite/gdb.python/py-prettyprint.py |
@@ -1,4 +1,4 @@ |
-# Copyright (C) 2008-2012 Free Software Foundation, Inc. |
+# Copyright (C) 2008-2013 Free Software Foundation, Inc. |
# This program is free software; you can redistribute it and/or modify |
# it under the terms of the GNU General Public License as published by |
@@ -19,8 +19,25 @@ |
import re |
import gdb |
+def _iterator (pointer, len): |
+ start = pointer |
+ end = pointer + len |
+ while pointer != end: |
+ yield ('[%d]' % int (pointer - start), pointer.dereference()) |
+ pointer += 1 |
+ |
+# Same as _iterator but can be told to raise an exception. |
+def _iterator_except (pointer, len): |
+ start = pointer |
+ end = pointer + len |
+ while pointer != end: |
+ if exception_flag: |
+ raise gdb.MemoryError ('hi bob') |
+ yield ('[%d]' % int (pointer - start), pointer.dereference()) |
+ pointer += 1 |
+ |
# Test returning a Value from a printer. |
-class string_print: |
+class string_print (object): |
def __init__(self, val): |
self.val = val |
@@ -28,22 +45,7 @@ class string_print: |
return self.val['whybother']['contents'] |
# Test a class-based printer. |
-class ContainerPrinter: |
- class _iterator: |
- def __init__ (self, pointer, len): |
- self.start = pointer |
- self.pointer = pointer |
- self.end = pointer + len |
- |
- def __iter__(self): |
- return self |
- |
- def next(self): |
- if self.pointer == self.end: |
- raise StopIteration |
- result = self.pointer |
- self.pointer = self.pointer + 1 |
- return ('[%d]' % int (result - self.start), result.dereference()) |
+class ContainerPrinter (object): |
def __init__(self, val): |
self.val = val |
@@ -52,31 +54,27 @@ class ContainerPrinter: |
return 'container %s with %d elements' % (self.val['name'], self.val['len']) |
def children(self): |
- return self._iterator(self.val['elements'], self.val['len']) |
+ return _iterator(self.val['elements'], self.val['len']) |
+ |
+# Treats a container as array. |
+class ArrayPrinter (object): |
+ def __init__(self, val): |
+ self.val = val |
+ |
+ def to_string(self): |
+ return 'array %s with %d elements' % (self.val['name'], self.val['len']) |
+ |
+ def children(self): |
+ return _iterator(self.val['elements'], self.val['len']) |
+ |
+ def display_hint (self): |
+ return 'array' |
# Flag to make NoStringContainerPrinter throw an exception. |
exception_flag = False |
# Test a printer where to_string is None |
-class NoStringContainerPrinter: |
- class _iterator: |
- def __init__ (self, pointer, len): |
- self.start = pointer |
- self.pointer = pointer |
- self.end = pointer + len |
- |
- def __iter__(self): |
- return self |
- |
- def next(self): |
- if self.pointer == self.end: |
- raise StopIteration |
- if exception_flag: |
- raise gdb.MemoryError, 'hi bob' |
- result = self.pointer |
- self.pointer = self.pointer + 1 |
- return ('[%d]' % int (result - self.start), result.dereference()) |
- |
+class NoStringContainerPrinter (object): |
def __init__(self, val): |
self.val = val |
@@ -84,9 +82,9 @@ class NoStringContainerPrinter: |
return None |
def children(self): |
- return self._iterator(self.val['elements'], self.val['len']) |
+ return _iterator_except (self.val['elements'], self.val['len']) |
-class pp_s: |
+class pp_s (object): |
def __init__(self, val): |
self.val = val |
@@ -97,42 +95,42 @@ class pp_s: |
raise Exception("&a(%s) != b(%s)" % (str(a.address), str(b))) |
return " a=<" + str(self.val["a"]) + "> b=<" + str(self.val["b"]) + ">" |
-class pp_ss: |
+class pp_ss (object): |
def __init__(self, val): |
self.val = val |
def to_string(self): |
return "a=<" + str(self.val["a"]) + "> b=<" + str(self.val["b"]) + ">" |
-class pp_sss: |
+class pp_sss (object): |
def __init__(self, val): |
self.val = val |
def to_string(self): |
return "a=<" + str(self.val['a']) + "> b=<" + str(self.val["b"]) + ">" |
-class pp_multiple_virtual: |
+class pp_multiple_virtual (object): |
def __init__ (self, val): |
self.val = val |
def to_string (self): |
return "pp value variable is: " + str (self.val['value']) |
-class pp_vbase1: |
+class pp_vbase1 (object): |
def __init__ (self, val): |
self.val = val |
def to_string (self): |
return "pp class name: " + self.val.type.tag |
-class pp_nullstr: |
+class pp_nullstr (object): |
def __init__(self, val): |
self.val = val |
def to_string(self): |
return self.val['s'].string(gdb.target_charset()) |
-class pp_ns: |
+class pp_ns (object): |
"Print a std::basic_string of some kind" |
def __init__(self, val): |
@@ -147,7 +145,7 @@ class pp_ns: |
pp_ls_encoding = None |
-class pp_ls: |
+class pp_ls (object): |
"Print a std::basic_string of some kind" |
def __init__(self, val): |
@@ -162,7 +160,7 @@ class pp_ls: |
def display_hint (self): |
return 'string' |
-class pp_hint_error: |
+class pp_hint_error (object): |
"Throw error from display_hint" |
def __init__(self, val): |
@@ -174,7 +172,7 @@ class pp_hint_error: |
def display_hint (self): |
raise Exception("hint failed") |
-class pp_children_as_list: |
+class pp_children_as_list (object): |
"Throw error from display_hint" |
def __init__(self, val): |
@@ -186,7 +184,7 @@ class pp_children_as_list: |
def children (self): |
return [('one', 1)] |
-class pp_outer: |
+class pp_outer (object): |
"Print struct outer" |
def __init__ (self, val): |
@@ -199,24 +197,24 @@ class pp_outer: |
yield 's', self.val['s'] |
yield 'x', self.val['x'] |
-class MemoryErrorString: |
+class MemoryErrorString (object): |
"Raise an error" |
def __init__(self, val): |
self.val = val |
def to_string(self): |
- raise gdb.MemoryError ("Cannot access memory."); |
+ raise gdb.MemoryError ("Cannot access memory.") |
def display_hint (self): |
return 'string' |
-class pp_eval_type: |
+class pp_eval_type (object): |
def __init__(self, val): |
self.val = val |
def to_string(self): |
- gdb.execute("bt", to_string=True) |
+ gdb.execute("bt", to_string=True) |
return "eval=<" + str(gdb.parse_and_eval("eval_func (123456789, 2, 3, 4, 5, 6, 7, 8)")) + ">" |
def lookup_function (val): |