-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain.py
More file actions
114 lines (92 loc) · 2.21 KB
/
main.py
File metadata and controls
114 lines (92 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import argparse
import sys
# import assemble
import disassemble
import sutil
def get_out_file(args):
if args.echo:
file = sys.stdout
else:
file = open(args.output, 'w', encoding=sutil.ASCII_ISO)
return file
parser = argparse.ArgumentParser(
description='The Lida assembler service for Lua',
allow_abbrev=True
)
# Argument groups
action = parser.add_mutually_exclusive_group()
g_assembler = parser.add_argument_group('assembler')
g_disassembler = parser.add_argument_group('disassembler')
output = parser.add_argument_group('output')
where = output.add_mutually_exclusive_group()
action.add_argument(
'-a', '--assemble',
action='store_true',
help='assemble a file into bytecode'
)
action.add_argument(
'-d', '--disassemble',
action='store_true',
help='disassemble a file into listing'
)
parser.add_argument(
'-v', '--verbose',
action='store_true',
help='show debug information'
)
# Disassembler
g_disassembler.add_argument(
'-C', '--comments',
action='store_true',
help='show comments on complex instructions'
)
g_disassembler.add_argument(
'-L', '--nolines',
action='store_true',
help='hide line info behind instructions'
)
g_disassembler.add_argument(
'-I', '--inlconsts',
action='store_true',
help='inlines use of constants in instructions'
)
g_disassembler.add_argument(
'-J', '--smartjumps',
action='store_true',
help='simplify labels for unoptimized JMPs'
)
# Output stuff
where.add_argument(
'-o', '--output',
type=str,
metavar='file',
default='lida.out',
help='set the output file for assembly and disassembly (default: lida.out)'
)
where.add_argument(
'-e', '--echo',
action='store_true',
help='outputs to stdout instead of a file'
)
output.add_argument(
'files',
type=str,
nargs='+',
help='file names to load'
)
arg_list = parser.parse_args()
if arg_list.assemble:
raise NotImplementedError("Assembler is not yet implemented")
# process = assemble.process_query
elif arg_list.disassemble:
process = disassemble.process_query
else:
process = None # silence warning
parser.error('expected a mode')
output = get_out_file(arg_list)
timer = sutil.LightTimer()
process(output, arg_list)
if output != sys.stdout:
output.close()
if arg_list.verbose:
print(f"Finished in {timer.pretty()}")