# Pretty-printers for SpiderMonkey JSObjects. import gdb import mozilla.JSString import mozilla.prettyprinters as prettyprinters from mozilla.prettyprinters import ptr_pretty_printer, ref_pretty_printer from mozilla.Root import deref prettyprinters.clear_module_printers(__name__) class JSObjectTypeCache(object): def __init__(self, value, cache): # In GDB 7.4.50, with some programs, this first dummy gdb.lookup_type # call is required to make the second lookup_type call succeed. A GDB # built from the public sources as of 2012-12-12 did not require the # dummy lookup. gdb.lookup_type('js::BaseShape') baseshape_flags = gdb.lookup_type('js::BaseShape::Flag') self.flag_DELEGATE = prettyprinters.enum_value( baseshape_flags, 'js::BaseShape::DELEGATE') self.func_ptr_type = gdb.lookup_type('JSFunction').pointer() # There should be no need to register this for JSFunction as well, since we # search for pretty-printers under the names of base classes, and # JSFunction has JSObject as a base class. @ptr_pretty_printer('JSObject') class JSObjectPtrOrRef(prettyprinters.Pointer):
# Pretty-printers for SpiderMonkey JSObjects. import gdb import mozilla.JSString import mozilla.prettyprinters as prettyprinters from mozilla.prettyprinters import ptr_pretty_printer, ref_pretty_printer from mozilla.Root import deref prettyprinters.clear_module_printers(__name__) class JSObjectTypeCache(object): def __init__(self, value, cache): # In GDB 7.4.50, with some programs, this first dummy gdb.lookup_type # call is required to make the second lookup_type call succeed. A GDB # built from the public sources as of 2012-12-12 did not require the # dummy lookup. gdb.lookup_type('js::BaseShape') baseshape_flags = gdb.lookup_type('js::BaseShape::Flag') self.flag_DELEGATE = prettyprinters.enum_value(baseshape_flags, 'js::BaseShape::DELEGATE') self.func_ptr_type = gdb.lookup_type('JSFunction').pointer() # There should be no need to register this for JSFunction as well, since we # search for pretty-printers under the names of base classes, and # JSFunction has JSObject as a base class. @ptr_pretty_printer('JSObject') class JSObjectPtrOrRef(prettyprinters.Pointer): def __init__(self, value, cache): super(JSObjectPtrOrRef, self).__init__(value, cache) if not cache.mod_JSObject: cache.mod_JSObject = JSObjectTypeCache(value, cache)