From 7667cbfe0d29243f5d2e19254882b1a74fffdff4 Mon Sep 17 00:00:00 2001 From: JJ Date: Sun, 6 Oct 2019 20:31:18 -0400 Subject: [PATCH 1/3] Refactor GetOperandType --- Server/src/main/resources/static/js/editor.js | 115 ++++++++---------- 1 file changed, 53 insertions(+), 62 deletions(-) diff --git a/Server/src/main/resources/static/js/editor.js b/Server/src/main/resources/static/js/editor.js index d4f6d13..6f08dc4 100644 --- a/Server/src/main/resources/static/js/editor.js +++ b/Server/src/main/resources/static/js/editor.js @@ -175,6 +175,53 @@ function parseDWInstruction(line, result, currentLine) { } } +function isLabel(text, result) { + for (i = 0; i < result.labels.length; i++) { + if (text === result.labels[i]) { + return true; + } + } +} + +function isImmediateOp(text, result) { + return (isLabel(text, result) + || !isNaN(Number(text)) + && Number(text) === Math.floor(Number(text)) + && text.indexOf("o") === -1 + && text.indexOf("0e") !== 0); +} + +function isMemoryOp(text) { + return text.startsWith("[") && text.endsWith("]"); +} + +function isRegisterOp(text) { + return new RegExp('^(a|b|c|d|x|y|bp|sp)$').test(text.toLowerCase()); +} + +function getOffsetOperandType(text) { + + var offset = ""; + if (isRegisterOp(text.substring(0, 2))) { + offset = text.substring(2); + } else if (isRegisterOp(text.substring(0, 1))) { + offset = text.substring(1); + } else { + return OPERAND_INVALID; + } + + //Remove either ONE '+' or ONE '-' else the operand is invalid + //Credit: https://github.com/KevinRamharak + offset = offset.replace(/[+-]/, ''); + + offset = offset.trim(); + + if(offset === "" || isImmediateOp(offset, result)){ + return OPERAND_MEM_REG; + } + + return OPERAND_INVALID; +} function getOperandType(text, result) { @@ -183,81 +230,25 @@ function getOperandType(text, result) { return OPERAND_INVALID; } - //Check IMM - if (!isNaN(Number(text)) && Number(text) === Math.floor(Number(text)) && text.indexOf("o") === -1 - && text.indexOf("0e") !== 0) { + if (isImmediateOp(text, result)) { return OPERAND_IMM; } - //Check REG - if (new RegExp('^(a|b|c|d|x|y|bp|sp)$').test(text.toLowerCase())) { + if (isRegisterOp(text)) { return OPERAND_REG; } - //Check Label - for (i = 0; i < result.labels.length; i++) { - if (text === result.labels[i]) { - return OPERAND_IMM; - } - } - - //Check MEM_* - if (text.startsWith("[") && text.endsWith("]")) { + if (isMemoryOp(text)) { text = text.replace("[", "").replace("]", ""); - - //Check MEM_IMM - if (!isNaN(Number(text)) && Number(text) === Math.floor(Number(text))) { + + if(isImmediateOp(text, result)){ return OPERAND_MEM_IMM; } - //Check MEM_Label - for (var i = 0; i < result.labels.length; i++) { - if (text === result.labels[i]) { - return OPERAND_MEM_IMM; - } - } - - //Check for MEM_REG (+ x) - var expr = ""; - if (new RegExp('^(bp|sp)$').test(text.toLowerCase().substring(0, 2).toLowerCase())) { - //Starts with 2-char register - expr = text.substring(2); - } else if (new RegExp('^(a|b|c|d|x|y)$').test(text.toLowerCase().substring(0, 1).toLowerCase())) { - //Starts with 1-char register - expr = text.substring(1); - } else { - return OPERAND_INVALID; - } - - - if (expr.replace(/\s+/g, '') === "") { - //No displacement specified - return OPERAND_MEM_REG; - } - - //Remove white space - expr = expr.replace(/\s+/g, ''); - //expr should now look like this: '+1' '-3' '+0x02' '+myLabel' - - //Check for label - for (i = 0; i < result.labels.length; i++) { - if (expr.substring(1) === result.labels[i]) { - return OPERAND_MEM_REG; - } - } - - //Remove either ONE '+' or ONE '-' else the operand is invalid - //Credit: https://github.com/KevinRamharak - expr = expr.replace(/[+-]/, ''); - - //Check for number - if (!isNaN(Number(expr)) && Number(expr) === Math.floor(Number(expr))) { - return OPERAND_MEM_REG; - } + return getOffsetOperandType(text); } return OPERAND_INVALID; - } function parseInstruction(line, result, currentLine) { From 080266ac4a38ddf83c4b072cc1c4ae12925dbf16 Mon Sep 17 00:00:00 2001 From: jacquej96 <32223123+jacquej96@users.noreply.github.com> Date: Wed, 16 Oct 2019 08:25:01 -0400 Subject: [PATCH 2/3] Resolved PR comments Explicitly declared i in loop, handled result === undefined, removed unnecessary empty string initialization. --- Server/src/main/resources/static/js/editor.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Server/src/main/resources/static/js/editor.js b/Server/src/main/resources/static/js/editor.js index 6f08dc4..d95f00c 100644 --- a/Server/src/main/resources/static/js/editor.js +++ b/Server/src/main/resources/static/js/editor.js @@ -176,7 +176,9 @@ function parseDWInstruction(line, result, currentLine) { } function isLabel(text, result) { - for (i = 0; i < result.labels.length; i++) { + if (result === undefined) { return false; } + + for (var i = 0; i < result.labels.length; i++) { if (text === result.labels[i]) { return true; } @@ -201,7 +203,7 @@ function isRegisterOp(text) { function getOffsetOperandType(text) { - var offset = ""; + var offset; if (isRegisterOp(text.substring(0, 2))) { offset = text.substring(2); } else if (isRegisterOp(text.substring(0, 1))) { From b3f21d643724e25754967c0ae06ef906a22f2941 Mon Sep 17 00:00:00 2001 From: jacquej96 <32223123+jacquej96@users.noreply.github.com> Date: Fri, 8 Nov 2019 11:49:36 -0500 Subject: [PATCH 3/3] Add var to helper function signature --- Server/src/main/resources/static/js/editor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Server/src/main/resources/static/js/editor.js b/Server/src/main/resources/static/js/editor.js index d95f00c..a56ef81 100644 --- a/Server/src/main/resources/static/js/editor.js +++ b/Server/src/main/resources/static/js/editor.js @@ -201,7 +201,7 @@ function isRegisterOp(text) { return new RegExp('^(a|b|c|d|x|y|bp|sp)$').test(text.toLowerCase()); } -function getOffsetOperandType(text) { +function getOffsetOperandType(text, result) { var offset; if (isRegisterOp(text.substring(0, 2))) { @@ -247,7 +247,7 @@ function getOperandType(text, result) { return OPERAND_MEM_IMM; } - return getOffsetOperandType(text); + return getOffsetOperandType(text, result); } return OPERAND_INVALID;