diff options
author | kpdecker <kpdecker@gmail.com> | 2015-12-12 16:07:52 -0600 |
---|---|---|
committer | Lon Ingram <lawnsea@gmail.com> | 2016-11-11 12:01:16 -0600 |
commit | 20c965cd65d646948d76522e4f20d38cd39762a3 (patch) | |
tree | 6912edda02e685a84d333505ceb47e017c95ba1e | |
parent | 6c9f98c0252ec42bb9ca8e6584fd45ffd0809acf (diff) | |
download | handlebars.js-20c965cd65d646948d76522e4f20d38cd39762a3.zip handlebars.js-20c965cd65d646948d76522e4f20d38cd39762a3.tar.gz handlebars.js-20c965cd65d646948d76522e4f20d38cd39762a3.tar.bz2 |
Fix throw when creating exception object in Safari
https://github.com/jquery/esprima/issues/1290
-rw-r--r-- | lib/handlebars/exception.js | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/handlebars/exception.js b/lib/handlebars/exception.js index 52499c0..24734d4 100644 --- a/lib/handlebars/exception.js +++ b/lib/handlebars/exception.js @@ -12,7 +12,7 @@ function Exception(message, node) { message += ' - ' + line + ':' + column; } - let tmp = Error.prototype.constructor.call(this, message); + let tmp = Error.prototype.constructor.call(this, message, loc && loc.source, line); // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. for (let idx = 0; idx < errorProps.length; idx++) { @@ -24,9 +24,19 @@ function Exception(message, node) { Error.captureStackTrace(this, Exception); } - if (loc) { - this.lineNumber = line; - this.column = column; + try { + if (loc) { + this.lineNumber = line; + + // Work around issue under safari where we can't directly set the column value + if (Object.defineProperty) { + Object.defineProperty(this, 'column', {value: column}); + } else { + this.column = column; + } + } + } catch (nop) { + /* Ignore if the browser is very particular */ } } |