diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2020-05-28 16:28:07 +0000 |
|---|---|---|
| committer | s-ol <s-ol@users.noreply.github.com> | 2020-05-28 16:28:07 +0000 |
| commit | d298144e6a5d6a0c52338100b73eadf4b33c5f09 (patch) | |
| tree | 8b595d54677bfdcf58f0ec606f25c154712d6d71 /subx.py | |
| parent | Add ex.* (diff) | |
| download | subv-d298144e6a5d6a0c52338100b73eadf4b33c5f09.tar.gz subv-d298144e6a5d6a0c52338100b73eadf4b33c5f09.zip | |
cleanup
Diffstat (limited to 'subx.py')
| -rw-r--r-- | subx.py | 107 |
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') |
