diff options
Diffstat (limited to 'tools/autodebugger_js.py')
-rw-r--r-- | tools/autodebugger_js.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tools/autodebugger_js.py b/tools/autodebugger_js.py new file mode 100644 index 00000000..3f8818c6 --- /dev/null +++ b/tools/autodebugger_js.py @@ -0,0 +1,47 @@ +''' +Processes a C source file, adding debugging information. + +Similar to autodebugger.py, but runs on .js files. +''' + +import os, sys, re + +filename = sys.argv[1] +func = sys.argv[2] + +f = open(filename, 'r') +data = f.read() +f.close() + +lines = data.split('\n') +in_func = False +for i in range(len(lines)): + if lines[i].startswith('function '): + name = lines[i].split('(')[0].split(' ')[1] + args = lines[i].split('(')[1].split(')')[0] + lines[i] += ' print("call %s(" + [%s] + ")");' % (name, args) + if lines[i].startswith('function ' + func + '('): + in_func = True + continue + elif lines[i].startswith('}'): + in_func = False + continue + if in_func: + m = re.match('^ +([$_\w\d \[\]]+) = +([^;]+);$', lines[i]) + if m and (' if ' not in lines[i-1] or '{' in lines[i-1]) and \ + (' if ' not in lines[i+1] or '{' in lines[i+1]) and \ + (' else' not in lines[i-1] or '{' in lines[i-1]) and \ + (' else' not in lines[i+1] or '{' in lines[i+1]): + var = m.groups(1)[0].rstrip().split(' ')[-1] + if 'STACKTOP' not in lines[i] and 'stackBase' not in lines[i]: + #lines[i] += ''' print("[%4d] %s = " + %s);''' % (i+1, var, var) + lines[i] += ''' print("%s = " + %s);''' % (var, var) + m = re.match('^ +HEAP.*$', lines[i]) + if m and lines[i].count(' = ') == 1: + left, right = lines[i].split(' = ') + lines[i] += ''' print("%s = " + %s);''' % (left, left) + +print '\n'.join(lines) + +print >> sys.stderr, 'Success.' + |