diff --git a/lib/ace/mode/javascript_worker.js b/lib/ace/mode/javascript_worker.js index 4700ead6..32e72bbb 100644 --- a/lib/ace/mode/javascript_worker.js +++ b/lib/ace/mode/javascript_worker.js @@ -41,6 +41,7 @@ define(function(require, exports, module) { var oop = require("../lib/oop"); var Mirror = require("../worker/mirror").Mirror; var lint = require("../worker/jshint").JSHINT; +var parser = require("../narcissus/parser"); var JavaScriptWorker = exports.JavaScriptWorker = function(sender) { Mirror.call(this, sender); @@ -56,7 +57,6 @@ oop.inherits(JavaScriptWorker, Mirror); value = value.replace(/^#!.*\n/, "\n"); // var start = new Date(); - var parser = require("../narcissus/jsparse"); try { parser.parse(value); } catch(e) { diff --git a/lib/ace/mode/javascript_worker_test.js b/lib/ace/mode/javascript_worker_test.js index 0a331036..33625e95 100644 --- a/lib/ace/mode/javascript_worker_test.js +++ b/lib/ace/mode/javascript_worker_test.js @@ -71,6 +71,19 @@ module.exports = { assert.equal(error.row, 0); assert.equal(error.column, null); }, + + "test invalid multi line string": function() { + var worker = new JavaScriptWorker(this.sender); + worker.setValue('"a\n\\nn"'); + worker.deferredUpdate.call(); + + console.log(this.sender.events) + var error = this.sender.events[0][1]; + assert.equal(error.text, "Unterminated string literal"); + assert.equal(error.type, "error"); + assert.equal(error.row, 0); + assert.equal(error.column, null); + }, "test check for narcissus bug": function() { var worker = new JavaScriptWorker(this.sender); diff --git a/lib/ace/narcissus/parser.js b/lib/ace/narcissus/parser.js index 3fda17d4..4c93c63f 100644 --- a/lib/ace/narcissus/parser.js +++ b/lib/ace/narcissus/parser.js @@ -435,8 +435,10 @@ Pp.Statements = function Statements(n, topLevel) { } } } catch (e) { - if (this.done()) - this.unexpectedEOF = true; + try { + if (this.done()) + this.unexpectedEOF = true; + } catch(e) {} throw e; } }