Index: src/messages.js |
diff --git a/src/messages.js b/src/messages.js |
index ea0096fe1ae85a2c369e56c602e4d36129a20631..45de71c9285454e88fd24cb406c5d00110a84e5e 100644 |
--- a/src/messages.js |
+++ b/src/messages.js |
@@ -495,10 +495,24 @@ Script.prototype.nameOrSourceURL = function() { |
// because this file is being processed by js2c whose handling of spaces |
// in regexps is broken. Also, ['"] are excluded from allowed URLs to |
// avoid matches against sources that invoke evals with sourceURL. |
- var sourceUrlPattern = |
- /\/\/@[\040\t]sourceURL=[\040\t]*([^\s'"]*)[\040\t]*$/m; |
- var match = sourceUrlPattern.exec(this.source); |
- return match ? match[1] : this.name; |
+ // A better solution would be to detect these special comments in |
+ // the scanner/parser. |
+ var source = ToString(this.source); |
+ var sourceUrlPos = %StringIndexOf(source, "sourceURL=", 0); |
+ if (sourceUrlPos > 4) { |
+ var sourceUrlPattern = |
+ /\/\/@[\040\t]sourceURL=[\040\t]*([^\s\'\"]*)[\040\t]*$/gm; |
+ // Don't reuse lastMatchInfo here, so we create a new array with room |
+ // for four captures (array with length one longer than the index |
+ // of the fourth capture, where the numbering is zero-based). |
+ var matchInfo = new InternalArray(CAPTURE(3) + 1); |
+ var match = |
+ %_RegExpExec(sourceUrlPattern, source, sourceUrlPos - 4, matchInfo); |
+ if (match) { |
+ return SubString(source, matchInfo[CAPTURE(2)], matchInfo[CAPTURE(3)]); |
+ } |
+ } |
+ return this.name; |
} |