From 4dda5881ef83c433fb4d3fb2c942054fb205843e Mon Sep 17 00:00:00 2001 From: n loewen Date: Wed, 16 Aug 2023 09:38:18 +0100 Subject: [PATCH] Refactor (assembler): Define label prefix in a constant, for easy re-configuration --- assembler.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/assembler.js b/assembler.js index f20f4a9..7258f68 100644 --- a/assembler.js +++ b/assembler.js @@ -13,8 +13,10 @@ exports.assemble = (str, debug = false) => { return decodeInstructions(str); } +// Configure pseudo-ops: const POINTER_TO_CURRENT_ADDR_PSEUDO_OPERAND = '*addr'; const CONSTANT_PREFIX = '#'; +const LABEL_PREFIX = '@'; const mnemonicsWithOptionalArgs = ['end', 'nop']; const mnemonics2opcodes = { @@ -60,10 +62,10 @@ function decodeInstructions(line) { // HANDLE OPS // Handle label definitions - if (line.startsWith('@')) { + if (line.startsWith(LABEL_PREFIX)) { // TODO: validate label // validateLabel(line); - let label = line.substring(1); // strip '@' + let label = line.substring(1); // strip label prefix if (label in labels) { labels[label].pointsToByte = IP; @@ -112,9 +114,9 @@ function decodeInstructions(line) { // HANDLE OPERANDS // Handle references to labels - } else if (arg_str.startsWith('@')) { + } else if (arg_str.startsWith(LABEL_PREFIX)) { // TODO: validate label // validateLabel(line); - let label = arg_str.substring(1); // strip '@' + let label = arg_str.substring(1); // strip label prefix arg_num = 0; if (label in labels) { @@ -189,7 +191,7 @@ function decodeInstructions(line) { // Backfill label references for (let k of Object.keys(labels)) { - dbgGroup(2, `@${k}`); + dbgGroup(2, `${LABEL_PREFIX}${k}`); let label = labels[k]; dbg(2, `pointsToByte: ${label.pointsToByte}`); dbg(2, `bytesToReplace: ${label.bytesToReplace}`);