github/workflows/pycopy-test: Upgrade Pycopy to 3.6.1.
[ScratchABlock.git] / correct_internal_entrypoint.py
blob9c491667e1e33780341c9e3677a2e7b76e057cbf
1 #!/usr/bin/env python3
2 import sys
3 import os
4 import glob
7 def process_file(fname):
8 func_name = None
10 with open(fname) as f:
11 l = f.readline()
12 if not l.startswith("; Entry point: "):
13 return
14 l = l.strip()
15 head, func_name = l.rsplit(None, 1)
17 assert func_name
18 print("Processing:", fname)
20 os.rename(fname, fname + ".bak")
22 with open(fname + ".bak") as f, open(fname, "w") as f_out:
23 l = f.readline()
24 assert l[0] == ";"
25 # Don't write this line
27 l = f.readline()
28 addr, rest = l.split(None, 1)
29 f_out.write("%s.0 %s:\n" % (addr, func_name))
30 f_out.write("%s.0 goto %s.0\n" % (addr, func_name))
31 f_out.write(l)
32 for l in f:
33 addr, label = l.split(None, 1)
34 label = label.strip()
35 if label[-1] == ":" and not label.startswith("loc_"):
36 this_name = label[:-1]
37 if func_name == this_name:
38 l = l.replace(func_name, func_name + ".0")
39 f_out.write(l)
42 if __name__ == "__main__":
44 if os.path.isdir(sys.argv[1]):
45 for full_name in glob.glob(sys.argv[1] + "/*"):
46 if full_name.endswith(".lst") and os.path.isfile(full_name):
47 process_file(full_name)
48 else:
49 process_file(sys.argv[1])