aboutsummaryrefslogtreecommitdiffstats
path: root/subx.py
diff options
context:
space:
mode:
authors-ol <s-ol@users.noreply.github.com>2020-05-28 16:28:07 +0000
committers-ol <s-ol@users.noreply.github.com>2020-05-28 16:28:07 +0000
commitd298144e6a5d6a0c52338100b73eadf4b33c5f09 (patch)
tree8b595d54677bfdcf58f0ec606f25c154712d6d71 /subx.py
parentAdd ex.* (diff)
downloadsubv-d298144e6a5d6a0c52338100b73eadf4b33c5f09.tar.gz
subv-d298144e6a5d6a0c52338100b73eadf4b33c5f09.zip
cleanup
Diffstat (limited to 'subx.py')
-rw-r--r--subx.py107
1 files changed, 0 insertions, 107 deletions
diff --git a/subx.py b/subx.py
deleted file mode 100644
index 3266403..0000000
--- a/subx.py
+++ /dev/null
@@ -1,107 +0,0 @@
-import re
-white = re.compile('[ \t\.\n]+')
-hex = re.compile(r'^\-?(0x)?[0-9a-f]+$')
-
-def parse_part(part):
- part = part.split('/')
- if hex.match(part[0]):
- part[0] = int(part[0], 16)
- return tuple(part)
-
-def parse_instr(line):
- parts = white.split(line)
- parts = [parse_part(part) for part in parts if part != '']
- return parts
-
-def parse_bits(line):
- parts = []
- for part in white.split(line):
- if part == '':
- continue
-
- val, size = parse_part(part)
- parts.append((val, int(size)))
- return parts
-
-def parse_segment(line):
- parts = white.split(line)
- return (parts[1], int(parts[2], 16))
-
-def parse_label(line):
- return line[:-1]
-
-def is_lref(part):
- return isinstance(part[0], str)
-
-def untag(part, expect=None):
- if expect and part[1] != expect:
- raise ValueError("expected {} to be labelled {}".format(part, expect))
- return part[0]
-
-def format_part(part):
- if not is_lref(part):
- first = '{:02x}'.format(part[0])
- part = (first,) + part[1:]
- return '/'.join([str(p) for p in part])
-
-def format_instr(inst, comment=None):
- packed = ' '.join(format_part(part) for part in inst)
- if comment:
- packed = packed + ' # ' + comment
- return packed
-
-def clean(line):
- return line.strip().split('#')[0].rstrip()
-
-def classify(line):
- if line.startswith('=='): # segment
- return 'segment'
- elif line.endswith(':'): # label
- return 'label'
- else:
- return 'instr'
-
-import unittest
-class TestParsing(unittest.TestCase):
- def test_parse_part(self):
- self.assertEqual(parse_part('0'), (0,))
- self.assertEqual(parse_part('00'), (0,))
- self.assertEqual(parse_part('0x00'), (0,))
-
- self.assertEqual(parse_part('12'), (0x12,))
- self.assertEqual(parse_part('0x12'), (0x12,))
-
- self.assertEqual(parse_part('-12'), (-0x12,))
- self.assertEqual(parse_part('-0x12'), (-0x12,))
-
- self.assertEqual(parse_part('00/with/tag'), (0, 'with', 'tag'))
- self.assertEqual(parse_part('-12/and<</tag*'), (-0x12, 'and<<', 'tag*'))
-
- self.assertEqual(parse_part('label/tag*'), ('label', 'tag*'))
- self.assertEqual(parse_part('$label/tag*'), ('$label', 'tag*'))
- self.assertEqual(parse_part('label:suff/tag*'), ('label:suff', 'tag*'))
- self.assertEqual(parse_part('$label:suff/tag*'), ('$label:suff', 'tag*'))
-
-class TestChecks(unittest.TestCase):
- def test_is_lref(self):
- self.assertTrue(is_lref(('hello',)))
- self.assertTrue(is_lref(('hello:world',)))
- self.assertTrue(is_lref(('$label',)))
- self.assertTrue(is_lref(('$label:extra',)))
- self.assertTrue(is_lref(('$label:extra','disp20u')))
- self.assertTrue(is_lref(('plain','disp20u')))
-
- self.assertFalse(is_lref((0,)))
- self.assertFalse(is_lref((1,)))
- self.assertFalse(is_lref((1,'disp20u')))
- self.assertFalse(is_lref((0x13f,'imm12')))
-
-class TestFormatting(unittest.TestCase):
- def test_format_part(self):
- self.assertEqual(format_part((0,)), '00')
- self.assertEqual(format_part((0x00,)), '00')
-
- self.assertEqual(format_part(('label', 'tag*')), 'label/tag*')
- self.assertEqual(format_part(('$label', 'tag*')), '$label/tag*')
- self.assertEqual(format_part(('label:suff', 'tag')), 'label:suff/tag')
- self.assertEqual(format_part(('$label:suff', 'tag')), '$label:suff/tag')