aboutsummaryrefslogtreecommitdiffstats
path: root/subv.py
diff options
context:
space:
mode:
Diffstat (limited to 'subv.py')
-rw-r--r--subv.py17
1 files changed, 9 insertions, 8 deletions
diff --git a/subv.py b/subv.py
index a280e77..fae4a3e 100644
--- a/subv.py
+++ b/subv.py
@@ -127,9 +127,9 @@ def classify(line):
>>> classify('$some:label:')
'label'
>>> classify('ff/op 0/subop/add 1/rd/x1 label[11:0]/imm12')
- 'data'
+ 'instr'
>>> classify('ff/8 0/3 2/5')
- 'data'
+ 'instr'
"""
if line == '':
return 'empty'
@@ -138,7 +138,7 @@ def classify(line):
elif line.endswith(':'): # label
return 'label'
else:
- return 'data'
+ return 'instr'
def parse(line):
""" clean, classify and parse lines.
@@ -157,10 +157,8 @@ def parse(line):
parsed = parse_segment(clean)
elif type == 'label':
parsed = parse_label(clean)
- elif type == 'data':
+ elif type == 'instr':
parsed = parse_instr(clean)
- if len(parsed[0]) > 1 and not num.match(parsed[0][-1]):
- type = 'instr'
else:
parsed = None
@@ -297,7 +295,8 @@ class LineIterator(object):
def __init__(self, stream):
self.stream = stream
self.iter = enumerate(self.stream, start=1)
- self.i, self.raw_line, self.line = 0, None, None
+ self.i, self.raw_line = 0, None
+ self.line, self.segment = None, None
def __iter__(self):
return self
@@ -307,9 +306,11 @@ class LineIterator(object):
self.line = None
try:
self.line = parse(self.raw_line)
+ if self.line['type'] == 'segment':
+ self.segment = self.line['segment'][0]
except Exception as e:
raise self.exception("failed to parse line") from e
- return self.line
+ return (self.segment, self.line)
def exception(self, msg):
if self.line: