diff options
Diffstat (limited to 'third_party/demangler.py')
-rw-r--r-- | third_party/demangler.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/third_party/demangler.py b/third_party/demangler.py new file mode 100644 index 00000000..da8dc665 --- /dev/null +++ b/third_party/demangler.py @@ -0,0 +1,42 @@ +#!/usr/bin/python + +''' +Simple tool to run the demangler. + +Usage: demangler.py FILENAME SPLITTER + +Make sure you define ~/.emscripten, and fill it with something like + +JS_ENGINE=[os.path.expanduser('~/Dev/v8/d8')] +JS_ENGINE_PARAMS=['--'] + +or + +JS_ENGINE=[os.path.expanduser('~/Dev/tracemonkey/js/src/js')] +JS_ENGINE_PARAMS=[] + +''' + +import os, sys, subprocess + +CONFIG_FILE = os.path.expanduser('~/.emscripten') +exec(open(CONFIG_FILE, 'r').read()) + +data = open(sys.argv[1], 'r').readlines() +splitter = sys.argv[2] + +SEEN = {} +for line in data: + if line[0] == ' ': continue + if line[0] != '_': continue + func = line.split(splitter)[0][1:] + if func in SEEN: continue + SEEN[func] = True + args = JS_ENGINE + ['gcc_demangler.js'] + JS_ENGINE_PARAMS + [func] + cleaned = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()[0] + if cleaned is None: continue + cleaned = cleaned[1:-2] + if cleaned == '(null)': continue + if ' throw ' in cleaned: continue + print func, '=', cleaned + |