diff options
| author | Jakob L. Kreuze <zerodaysfordays@sdf.lonestar.org> | 2019-12-25 16:41:04 -0500 |
|---|---|---|
| committer | Jakob L. Kreuze <zerodaysfordays@sdf.lonestar.org> | 2019-12-25 16:49:24 -0500 |
| commit | e5802d9272289ac852d585c90ddc55976b34ba9a (patch) | |
| tree | 364bf0fabe31c5ea99047f2888eb247eba2be146 /asm.myr | |
| parent | fab0dae5a3f048a5085bc6329833dbd8d977c5ba (diff) | |
Refactor to the Myrddin tutorial's style guide.
Diffstat (limited to 'asm.myr')
| -rw-r--r-- | asm.myr | 30 |
1 files changed, 21 insertions, 9 deletions
@@ -71,14 +71,23 @@ const emitinstr = {p -> `std.Ok((b, mark)) } +const die_emit = {msg, lc + std.die(std.fmt("{} on line {}\n", msg, lc)) +} + +const die_rewrite = {l, lc + const s = "ref to undefined label '{}' on line {}\n" + std.die(std.fmt(s, l, lc)) +} + const main = { var fd = bio.mkfile(std.In, bio.Rd) var src = bio.byline(fd) var lc = 0 var offset = 0 - var queue = [][:] var buf = [][:] + var q = [][:] var labels = std.mkht() var res @@ -90,14 +99,16 @@ const main = { ;; match res - | `std.Err(msg): std.die(std.fmt("{} on line {}\n", msg, lc)) + | `std.Err(msg): die_emit(msg, lc) | `std.Ok((bytes, marker)): match marker - | `std.Some(label): queue = std.slpush(&queue, (label, offset, lc)) + | `std.Some(label): + q = std.slpush(&q, (label, offset, lc)) | `std.None: ;; match bytes - | `std.Some(arr): buf = std.sljoin(&buf, arr[:]) + | `std.Some(arr): + buf = std.sljoin(&buf, arr[:]) offset += 2 | `std.None: ;; @@ -106,12 +117,13 @@ const main = { lc++ ;; - for replacement : queue ; - match replacement - | (l, buf_pos, src_pos): + for p : q ; + match p + | (l, buf_pos, linum): match std.htget(labels, l) - | `std.None: std.die(std.fmt("reference to undefined label '{}' on line {}\n", l, src_pos)) - | `std.Some(addr): buf[buf_pos] |= addr & 0x0f00 + | `std.None: die_rewrite(l, linum) + | `std.Some(addr): + buf[buf_pos] |= addr & 0x0f00 buf[buf_pos + 1] |= addr & 0xff ;; ;; |