diff options
Diffstat (limited to 'gdb/testsuite/gdb.python/py-xmethods.py')
-rw-r--r-- | gdb/testsuite/gdb.python/py-xmethods.py | 136 |
1 files changed, 62 insertions, 74 deletions
diff --git a/gdb/testsuite/gdb.python/py-xmethods.py b/gdb/testsuite/gdb.python/py-xmethods.py index 7bfd190..1df3bd0 100644 --- a/gdb/testsuite/gdb.python/py-xmethods.py +++ b/gdb/testsuite/gdb.python/py-xmethods.py @@ -25,52 +25,55 @@ from gdb.xmethod import SimpleXMethodMatcher def A_plus_A(obj, opr): - print('From Python <A_plus_A>:') - return obj['a'] + opr['a'] + print("From Python <A_plus_A>:") + return obj["a"] + opr["a"] def plus_plus_A(obj): - print('From Python <plus_plus_A>:') - return obj['a'] + 1 + print("From Python <plus_plus_A>:") + return obj["a"] + 1 def A_geta(obj): - print('From Python <A_geta>:') - return obj['a'] + print("From Python <A_geta>:") + return obj["a"] def A_getarrayind(obj, index): - print('From Python <A_getarrayind>:') - return obj['array'][index] + print("From Python <A_getarrayind>:") + return obj["array"][index] + def A_indexoper(obj, index): - return obj['array'][index].reference_value() + return obj["array"][index].reference_value() + def B_indexoper(obj, index): - return obj['array'][index].const_value().reference_value() + return obj["array"][index].const_value().reference_value() -type_A = gdb.parse_and_eval('(dop::A *) 0').type.target() -type_B = gdb.parse_and_eval('(dop::B *) 0').type.target() -type_int = gdb.parse_and_eval('(int *) 0').type.target() +type_A = gdb.parse_and_eval("(dop::A *) 0").type.target() +type_B = gdb.parse_and_eval("(dop::B *) 0").type.target() +type_int = gdb.parse_and_eval("(int *) 0").type.target() # The E class matcher and worker test two things: # 1. xmethod returning None. # 2. Matcher returning a list of workers. + class E_method_char_worker(XMethodWorker): def __init__(self): pass def get_arg_types(self): - return gdb.lookup_type('char') + return gdb.lookup_type("char") def get_result_type(self, obj, arg): - return gdb.lookup_type('void') + return gdb.lookup_type("void") def __call__(self, obj, arg): - print('From Python <E_method_char>') + print("From Python <E_method_char>") return None @@ -79,25 +82,25 @@ class E_method_int_worker(XMethodWorker): pass def get_arg_types(self): - return gdb.lookup_type('int') + return gdb.lookup_type("int") # Note: get_result_type method elided on purpose def __call__(self, obj, arg): - print('From Python <E_method_int>') + print("From Python <E_method_int>") return None class E_method_matcher(XMethodMatcher): def __init__(self): - XMethodMatcher.__init__(self, 'E_methods') - self.methods = [XMethod('method_int'), XMethod('method_char')] + XMethodMatcher.__init__(self, "E_methods") + self.methods = [XMethod("method_int"), XMethod("method_char")] def match(self, class_type, method_name): class_tag = class_type.unqualified().tag - if not re.match('^dop::E$', class_tag): + if not re.match("^dop::E$", class_tag): return None - if not re.match('^method$', method_name): + if not re.match("^method$", method_name): return None workers = [] if self.methods[0].enabled: @@ -111,6 +114,7 @@ class E_method_matcher(XMethodMatcher): # xmethod matchers and workers for template classes and template # methods. + class G_size_diff_worker(XMethodWorker): def __init__(self, class_template_type, method_template_type): self._class_template_type = class_template_type @@ -120,9 +124,8 @@ class G_size_diff_worker(XMethodWorker): pass def __call__(self, obj): - print('From Python G<>::size_diff()') - return (self._method_template_type.sizeof - - self._class_template_type.sizeof) + print("From Python G<>::size_diff()") + return self._method_template_type.sizeof - self._class_template_type.sizeof class G_size_mul_worker(XMethodWorker): @@ -134,7 +137,7 @@ class G_size_mul_worker(XMethodWorker): pass def __call__(self, obj): - print('From Python G<>::size_mul()') + print("From Python G<>::size_mul()") return self._class_template_type.sizeof * self._method_template_val @@ -147,16 +150,14 @@ class G_mul_worker(XMethodWorker): return self._method_template_type def __call__(self, obj, arg): - print('From Python G<>::mul()') - return obj['t'] * arg + print("From Python G<>::mul()") + return obj["t"] * arg class G_methods_matcher(XMethodMatcher): def __init__(self): - XMethodMatcher.__init__(self, 'G_methods') - self.methods = [XMethod('size_diff'), - XMethod('size_mul'), - XMethod('mul')] + XMethodMatcher.__init__(self, "G_methods") + self.methods = [XMethod("size_diff"), XMethod("size_mul"), XMethod("mul")] def _is_enabled(self, name): for method in self.methods: @@ -165,16 +166,15 @@ class G_methods_matcher(XMethodMatcher): def match(self, class_type, method_name): class_tag = class_type.unqualified().tag - if not re.match('^dop::G<[ ]*[_a-zA-Z][ _a-zA-Z0-9]*>$', - class_tag): + if not re.match("^dop::G<[ ]*[_a-zA-Z][ _a-zA-Z0-9]*>$", class_tag): return None t_name = class_tag[7:-1] try: t_type = gdb.lookup_type(t_name) except gdb.error: return None - if re.match('^size_diff<[ ]*[_a-zA-Z][ _a-zA-Z0-9]*>$', method_name): - if not self._is_enabled('size_diff'): + if re.match("^size_diff<[ ]*[_a-zA-Z][ _a-zA-Z0-9]*>$", method_name): + if not self._is_enabled("size_diff"): return None t1_name = method_name[10:-1] try: @@ -182,13 +182,13 @@ class G_methods_matcher(XMethodMatcher): return G_size_diff_worker(t_type, t1_type) except gdb.error: return None - if re.match('^size_mul<[ ]*[0-9]+[ ]*>$', method_name): - if not self._is_enabled('size_mul'): + if re.match("^size_mul<[ ]*[0-9]+[ ]*>$", method_name): + if not self._is_enabled("size_mul"): return None m_val = int(method_name[9:-1]) return G_size_mul_worker(t_type, m_val) - if re.match('^mul<[ ]*[_a-zA-Z][ _a-zA-Z0-9]*>$', method_name): - if not self._is_enabled('mul'): + if re.match("^mul<[ ]*[_a-zA-Z][ _a-zA-Z0-9]*>$", method_name): + if not self._is_enabled("mul"): return None t1_name = method_name[4:-1] try: @@ -199,41 +199,29 @@ class G_methods_matcher(XMethodMatcher): global_dm_list = [ - SimpleXMethodMatcher(r'A_plus_A', - r'^dop::A$', - r'operator\+', - A_plus_A, - # This is a replacement, hence match the arg type - # exactly! - type_A.const().reference()), - SimpleXMethodMatcher(r'plus_plus_A', - r'^dop::A$', - r'operator\+\+', - plus_plus_A), - SimpleXMethodMatcher(r'A_geta', - r'^dop::A$', - r'^geta$', - A_geta), - SimpleXMethodMatcher(r'A_getarrayind', - r'^dop::A$', - r'^getarrayind$', - A_getarrayind, - type_int), - SimpleXMethodMatcher(r'A_indexoper', - r'^dop::A$', - r'operator\[\]', - A_indexoper, - type_int), - SimpleXMethodMatcher(r'B_indexoper', - r'^dop::B$', - r'operator\[\]', - B_indexoper, - type_int) + SimpleXMethodMatcher( + r"A_plus_A", + r"^dop::A$", + r"operator\+", + A_plus_A, + # This is a replacement, hence match the arg type + # exactly! + type_A.const().reference(), + ), + SimpleXMethodMatcher(r"plus_plus_A", r"^dop::A$", r"operator\+\+", plus_plus_A), + SimpleXMethodMatcher(r"A_geta", r"^dop::A$", r"^geta$", A_geta), + SimpleXMethodMatcher( + r"A_getarrayind", r"^dop::A$", r"^getarrayind$", A_getarrayind, type_int + ), + SimpleXMethodMatcher( + r"A_indexoper", r"^dop::A$", r"operator\[\]", A_indexoper, type_int + ), + SimpleXMethodMatcher( + r"B_indexoper", r"^dop::B$", r"operator\[\]", B_indexoper, type_int + ), ] for matcher in global_dm_list: gdb.xmethod.register_xmethod_matcher(gdb, matcher) -gdb.xmethod.register_xmethod_matcher(gdb.current_progspace(), - G_methods_matcher()) -gdb.xmethod.register_xmethod_matcher(gdb.current_progspace(), - E_method_matcher()) +gdb.xmethod.register_xmethod_matcher(gdb.current_progspace(), G_methods_matcher()) +gdb.xmethod.register_xmethod_matcher(gdb.current_progspace(), E_method_matcher()) |