diff options
author | deansher <deansherthompson@gmail.com> | 2019-01-28 08:12:24 -0500 |
---|---|---|
committer | deansher <deansherthompson@gmail.com> | 2019-01-28 08:12:24 -0500 |
commit | d60f8ab99181ea18cc534728ba4d0470c0ca1bce (patch) | |
tree | 64cef5bc336a6d0038dcb47a4e3b1cd30ed434d7 /tools/nim-gdb.py | |
parent | a6de0274ee768d135bab280d2b2700a0bb475300 (diff) | |
parent | 9402c82e803d133e0b845a7c5c79c261781e7d8d (diff) | |
download | Nim-d60f8ab99181ea18cc534728ba4d0470c0ca1bce.tar.gz |
Merge remote-tracking branch 'upstream/devel' into devel
Diffstat (limited to 'tools/nim-gdb.py')
-rw-r--r-- | tools/nim-gdb.py | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/tools/nim-gdb.py b/tools/nim-gdb.py index 1a0d89fcb..2abaf6926 100644 --- a/tools/nim-gdb.py +++ b/tools/nim-gdb.py @@ -1,4 +1,3 @@ - import gdb import re import sys @@ -16,8 +15,6 @@ def printErrorOnce(id, message): errorSet.add(id) gdb.write(message, gdb.STDERR) -nimobjfile = gdb.current_objfile() or gdb.objfiles()[0] -nimobjfile.type_printers = [] ################################################################################ ##### Type pretty printers @@ -121,9 +118,6 @@ class NimTypePrinter: def instantiate(self): return NimTypeRecognizer() - -nimobjfile.type_printers = [NimTypePrinter()] - ################################################################################ ##### GDB Function, equivalent of Nim's $ operator ################################################################################ @@ -528,5 +522,20 @@ def makematcher(klass): printErrorOnce(typeName, "No matcher for type '" + typeName + "': " + str(e) + "\n") return matcher -nimobjfile.pretty_printers = [] -nimobjfile.pretty_printers.extend([makematcher(var) for var in list(vars().values()) if hasattr(var, 'pattern')]) +def register_nim_pretty_printers_for_object(objfile): + nimMainSym = gdb.lookup_global_symbol("NimMain", gdb.SYMBOL_FUNCTIONS_DOMAIN) + if nimMainSym and nimMainSym.symtab.objfile == objfile: + print("set Nim pretty printers for ", objfile.filename) + + objfile.type_printers = [NimTypePrinter()] + objfile.pretty_printers = [makematcher(var) for var in list(globals().values()) if hasattr(var, 'pattern')] + +# Register pretty printers for all objfiles that are already loaded. +for old_objfile in gdb.objfiles(): + register_nim_pretty_printers_for_object(old_objfile) + +# Register an event handler to register nim pretty printers for all future objfiles. +def new_object_handler(event): + register_nim_pretty_printers_for_object(event.new_objfile) + +gdb.events.new_objfile.connect(new_object_handler) |