diff options
-rw-r--r-- | lib/asm-cl.js | 18 | ||||
-rw-r--r-- | lib/asm.js | 35 | ||||
-rw-r--r-- | lib/base-compiler.js | 6 | ||||
-rw-r--r-- | lib/compilers/CL.js | 2 | ||||
-rwxr-xr-x | test/filter-tests.js | 10 |
5 files changed, 41 insertions, 30 deletions
diff --git a/lib/asm-cl.js b/lib/asm-cl.js index b701a789a..72bc9b06f 100644 --- a/lib/asm-cl.js +++ b/lib/asm-cl.js @@ -24,7 +24,7 @@ var _ = require('underscore-node'); var logger = require('./logger').logger; -var expandTabs = require('./utils').expandTabs; +var utils = require('./utils'); var sourceTag = /^;\s*([0-9]+)\s*:/; var ignoreAll = /^\s*include listing\.inc$/; @@ -118,7 +118,7 @@ function ClParser(filters) { ClParser.prototype._add = function (obj) { if (obj.text === "") return; if (this.currentLabel) obj.label = this.currentLabel; - obj.text = expandTabs(obj.text); + obj.text = utils.expandTabs(obj.text); if (this.filters.binary && this.opcoder.hasOpcodes()) { obj.opcodes = this.opcoder.opcodes; obj.address = this.opcoder.offset; @@ -241,6 +241,18 @@ ClParser.prototype.get = function () { .value(); }; +function AsmParser(compilerProps) { +} + +AsmParser.prototype.process = function (asm, filters) { + var parser = new ClParser(filters); + utils.eachLine(asm, function (line) { + parser.addLine(line); + }); + return parser.get(); +}; + module.exports = { - ClParser: ClParser + ClParser: ClParser, + AsmParser: AsmParser };
\ No newline at end of file diff --git a/lib/asm.js b/lib/asm.js index 03f66d5ef..35a31e6e2 100644 --- a/lib/asm.js +++ b/lib/asm.js @@ -22,10 +22,10 @@ // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. -(function () { - var _ = require('underscore-node'); - var asmCl = require('./asm-cl'); - var utils = require('./utils'); +var _ = require('underscore-node'); +var utils = require('./utils'); + +function AsmParser(compilerProps) { var labelFind = /[.a-zA-Z_][a-zA-Z0-9$_.]*/g; var dataDefn = /\.(string|asciz|ascii|[1248]?byte|short|word|long|quad|value|zero)/; var fileFind = /^\s*\.file\s+(\d+)\s+"([^"]+)".*/; @@ -104,7 +104,6 @@ } function processAsm(asm, filters) { - if (asm.match(/^; Listing generated by Microsoft/)) return processClAsm(asm, filters); if (filters.binary) return processBinaryAsm(asm, filters); var result = []; @@ -184,12 +183,6 @@ var binaryHideFuncRe = null; var maxAsmLines = 500; - function initialise(compilerProps) { - var pattern = compilerProps('binaryHideFuncRe'); - binaryHideFuncRe = new RegExp(pattern); - maxAsmLines = compilerProps('maxLinesOfAsm', maxAsmLines); - } - function isUserFunction(func) { return !func.match(binaryHideFuncRe); } @@ -257,15 +250,15 @@ return result; } - function processClAsm(asm, filters) { - var parser = new asmCl.ClParser(filters); - utils.eachLine(asm, function (line) { - parser.addLine(line); - }); - return parser.get(); + if (compilerProps) { + binaryHideFuncRe = new RegExp(compilerProps('binaryHideFuncRe')); + maxAsmLines = compilerProps('maxLinesOfAsm', maxAsmLines); } + this.process = function (asm, filters) { + return processAsm(asm, filters); + }; +} - exports.processAsm = processAsm; - exports.initialise = initialise; - -}).call(this); +module.exports = { + AsmParser: AsmParser +}; diff --git a/lib/base-compiler.js b/lib/base-compiler.js index 10cc779c6..67fcf8acc 100644 --- a/lib/base-compiler.js +++ b/lib/base-compiler.js @@ -37,9 +37,7 @@ quote = require('shell-quote'), function Compile(compiler, env) { this.compiler = compiler; this.env = env; - // TODO: make `asm` an object instead of a big fat global. Then CL can instantiate - // a completely different ASM here instead of a dodgy regexp to choose its parser. - asm.initialise(env.compilerProps); + this.asm = new asm.AsmParser(env.compilerProps); } Compile.prototype.newTempDir = function () { @@ -171,7 +169,7 @@ Compile.prototype.compile = function (source, options, filters) { result.dirPath = undefined; } if (result.okToCache) { - result.asm = asm.processAsm(result.asm, filters); + result.asm = self.asm.process(result.asm, filters); } else { result.asm = {text: result.asm}; } diff --git a/lib/compilers/CL.js b/lib/compilers/CL.js index 693e6044d..10fc27b93 100644 --- a/lib/compilers/CL.js +++ b/lib/compilers/CL.js @@ -23,9 +23,11 @@ // POSSIBILITY OF SUCH DAMAGE. var Compile = require('../base-compiler'); +var asm = require('../asm-cl'); function compileCl(info, env) { var compile = new Compile(info, env); + compile.asm = new asm.AsmParser(env.compilerProps); info.supportsFiltersInBinary = true; if (process.platform == "linux") { var wine = env.gccProps("wine"); diff --git a/test/filter-tests.js b/test/filter-tests.js index 67244d341..ea0f7f16c 100755 --- a/test/filter-tests.js +++ b/test/filter-tests.js @@ -23,12 +23,18 @@ // POSSIBILITY OF SUCH DAMAGE. var fs = require('fs'), assert = require('assert'); -var asm = require('../lib/asm.js'); +var asm = require('../lib/asm'); +var asmCl = require('../lib/asm-cl'); var should = require('chai').should(); function processAsm(filename, filters) { var file = fs.readFileSync(filename, 'utf-8'); - return asm.processAsm(file, filters); + var parser; + if (file.indexOf('Microsoft') >= 0) + parser = new asmCl.AsmParser(); + else + parser = new asm.AsmParser(); + return parser.process(file, filters); } var cases = fs.readdirSync(__dirname + '/cases') |