From c0928bdcb3cd5b0eb673733e5a8bc14a189a9ff8 Mon Sep 17 00:00:00 2001 From: Jim Blandy Date: Wed, 12 Dec 2012 18:09:50 -0800 Subject: [PATCH] Bug 819525: JS GDB pretty-printers: Don't trip over tagless structs. DONTBUILD r=sfink --- js/src/gdb/mozilla/Root.py | 4 +++- js/src/gdb/mozilla/prettyprinters.py | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/js/src/gdb/mozilla/Root.py b/js/src/gdb/mozilla/Root.py index 65ef76bea7a..149bc18bd54 100644 --- a/js/src/gdb/mozilla/Root.py +++ b/js/src/gdb/mozilla/Root.py @@ -53,7 +53,9 @@ class EncapsulatedValue(Common): # Return the referent of a HeapPtr, Rooted, or Handle. def deref(root): tag = root.type.strip_typedefs().tag - if tag.startswith('js::HeapPtr<'): + if not tag: + raise TypeError, "Can't dereference type with no structure tag: %s" % (root.type,) + elif tag.startswith('js::HeapPtr<'): return root['value'] elif tag.startswith('js::Rooted<'): return root['ptr'] diff --git a/js/src/gdb/mozilla/prettyprinters.py b/js/src/gdb/mozilla/prettyprinters.py index 6d2271de194..02edabe9769 100644 --- a/js/src/gdb/mozilla/prettyprinters.py +++ b/js/src/gdb/mozilla/prettyprinters.py @@ -231,7 +231,7 @@ def lookup_for_objfile(objfile): for t2 in implemented_types(t.target()): if t2.code == gdb.TYPE_CODE_TYPEDEF: p = check_table(ptr_printers_by_tag, str(t2)) - elif t2.code == gdb.TYPE_CODE_STRUCT: + elif t2.code == gdb.TYPE_CODE_STRUCT and t2.tag: p = check_table(ptr_printers_by_tag, t2.tag) else: p = None @@ -239,7 +239,7 @@ def lookup_for_objfile(objfile): else: if t.code == gdb.TYPE_CODE_TYPEDEF: p = check_table(printers_by_tag, str(t)) - elif t.code == gdb.TYPE_CODE_STRUCT: + elif t.code == gdb.TYPE_CODE_STRUCT and t.tag: m = template_regexp.match(t.tag) if m: p = check_table(template_printers_by_tag, m.group(1))