| Index: src/messages.js
|
| ===================================================================
|
| --- src/messages.js (revision 10901)
|
| +++ src/messages.js (working copy)
|
| @@ -533,6 +533,13 @@
|
| if (this.name) {
|
| return this.name;
|
| }
|
| +
|
| + // The result is cached as on long scripts it takes noticable time to search
|
| + // for the sourceURL.
|
| + if (this.hasCachedNameOrSourceURL)
|
| + return this.cachedNameOrSourceURL;
|
| + this.hasCachedNameOrSourceURL = true;
|
| +
|
| // TODO(608): the spaces in a regexp below had to be escaped as \040
|
| // because this file is being processed by js2c whose handling of spaces
|
| // in regexps is broken. Also, ['"] are excluded from allowed URLs to
|
| @@ -541,6 +548,7 @@
|
| // the scanner/parser.
|
| var source = ToString(this.source);
|
| var sourceUrlPos = %StringIndexOf(source, "sourceURL=", 0);
|
| + this.cachedNameOrSourceURL = this.name;
|
| if (sourceUrlPos > 4) {
|
| var sourceUrlPattern =
|
| /\/\/@[\040\t]sourceURL=[\040\t]*([^\s\'\"]*)[\040\t]*$/gm;
|
| @@ -551,15 +559,17 @@
|
| var match =
|
| %_RegExpExec(sourceUrlPattern, source, sourceUrlPos - 4, matchInfo);
|
| if (match) {
|
| - return SubString(source, matchInfo[CAPTURE(2)], matchInfo[CAPTURE(3)]);
|
| + this.cachedNameOrSourceURL =
|
| + SubString(source, matchInfo[CAPTURE(2)], matchInfo[CAPTURE(3)]);
|
| }
|
| }
|
| - return this.name;
|
| + return this.cachedNameOrSourceURL;
|
| }
|
|
|
|
|
| SetUpLockedPrototype(Script,
|
| - $Array("source", "name", "line_ends", "line_offset", "column_offset"),
|
| + $Array("source", "name", "line_ends", "line_offset", "column_offset",
|
| + "cachedNameOrSourceURL", "hasCachedNameOrSourceURL" ),
|
| $Array(
|
| "lineFromPosition", ScriptLineFromPosition,
|
| "locationFromPosition", ScriptLocationFromPosition,
|
|
|