| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 (function(global, utils) { | 5 (function(global, utils) { | 
| 6 | 6 | 
| 7 %CheckIsBootstrapping(); | 7 %CheckIsBootstrapping(); | 
| 8 | 8 | 
| 9 // ------------------------------------------------------------------- | 9 // ------------------------------------------------------------------- | 
| 10 // Imports | 10 // Imports | 
| 11 | 11 | 
| 12 var ExpandReplacement; | 12 var ExpandReplacement; | 
| 13 var FLAG_harmony_tolength; |  | 
| 14 var GlobalObject = global.Object; | 13 var GlobalObject = global.Object; | 
| 15 var GlobalRegExp = global.RegExp; | 14 var GlobalRegExp = global.RegExp; | 
| 16 var GlobalRegExpPrototype; | 15 var GlobalRegExpPrototype; | 
| 17 var InternalArray = utils.InternalArray; | 16 var InternalArray = utils.InternalArray; | 
| 18 var InternalPackedArray = utils.InternalPackedArray; | 17 var InternalPackedArray = utils.InternalPackedArray; | 
| 19 var MakeTypeError; | 18 var MakeTypeError; | 
| 20 var matchSymbol = utils.ImportNow("match_symbol"); | 19 var matchSymbol = utils.ImportNow("match_symbol"); | 
| 21 var replaceSymbol = utils.ImportNow("replace_symbol"); | 20 var replaceSymbol = utils.ImportNow("replace_symbol"); | 
| 22 var searchSymbol = utils.ImportNow("search_symbol"); | 21 var searchSymbol = utils.ImportNow("search_symbol"); | 
| 23 var splitSymbol = utils.ImportNow("split_symbol"); | 22 var splitSymbol = utils.ImportNow("split_symbol"); | 
| 24 | 23 | 
| 25 utils.ImportFromExperimental(function(from) { |  | 
| 26   FLAG_harmony_tolength = from.FLAG_harmony_tolength; |  | 
| 27 }); |  | 
| 28 |  | 
| 29 utils.Import(function(from) { | 24 utils.Import(function(from) { | 
| 30   ExpandReplacement = from.ExpandReplacement; | 25   ExpandReplacement = from.ExpandReplacement; | 
| 31   MakeTypeError = from.MakeTypeError; | 26   MakeTypeError = from.MakeTypeError; | 
| 32 }); | 27 }); | 
| 33 | 28 | 
| 34 // ------------------------------------------------------------------- | 29 // ------------------------------------------------------------------- | 
| 35 | 30 | 
| 36 // Property of the builtins object for recording the result of the last | 31 // Property of the builtins object for recording the result of the last | 
| 37 // regexp match.  The property RegExpLastMatchInfo includes the matchIndices | 32 // regexp match.  The property RegExpLastMatchInfo includes the matchIndices | 
| 38 // array of the last successful regexp match (an array of start/end index | 33 // array of the last successful regexp match (an array of start/end index | 
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 169   if (!IS_REGEXP(this)) { | 164   if (!IS_REGEXP(this)) { | 
| 170     throw MakeTypeError(kIncompatibleMethodReceiver, | 165     throw MakeTypeError(kIncompatibleMethodReceiver, | 
| 171                         'RegExp.prototype.exec', this); | 166                         'RegExp.prototype.exec', this); | 
| 172   } | 167   } | 
| 173 | 168 | 
| 174   string = TO_STRING(string); | 169   string = TO_STRING(string); | 
| 175   var lastIndex = this.lastIndex; | 170   var lastIndex = this.lastIndex; | 
| 176 | 171 | 
| 177   // Conversion is required by the ES2015 specification (RegExpBuiltinExec | 172   // Conversion is required by the ES2015 specification (RegExpBuiltinExec | 
| 178   // algorithm, step 4) even if the value is discarded for non-global RegExps. | 173   // algorithm, step 4) even if the value is discarded for non-global RegExps. | 
| 179   var i = TO_LENGTH_OR_INTEGER(lastIndex); | 174   var i = TO_LENGTH(lastIndex); | 
| 180 | 175 | 
| 181   var updateLastIndex = REGEXP_GLOBAL(this) || REGEXP_STICKY(this); | 176   var updateLastIndex = REGEXP_GLOBAL(this) || REGEXP_STICKY(this); | 
| 182   if (updateLastIndex) { | 177   if (updateLastIndex) { | 
| 183     if (i < 0 || i > string.length) { | 178     if (i < 0 || i > string.length) { | 
| 184       this.lastIndex = 0; | 179       this.lastIndex = 0; | 
| 185       return null; | 180       return null; | 
| 186     } | 181     } | 
| 187   } else { | 182   } else { | 
| 188     i = 0; | 183     i = 0; | 
| 189   } | 184   } | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 216   if (!IS_REGEXP(this)) { | 211   if (!IS_REGEXP(this)) { | 
| 217     throw MakeTypeError(kIncompatibleMethodReceiver, | 212     throw MakeTypeError(kIncompatibleMethodReceiver, | 
| 218                         'RegExp.prototype.test', this); | 213                         'RegExp.prototype.test', this); | 
| 219   } | 214   } | 
| 220   string = TO_STRING(string); | 215   string = TO_STRING(string); | 
| 221 | 216 | 
| 222   var lastIndex = this.lastIndex; | 217   var lastIndex = this.lastIndex; | 
| 223 | 218 | 
| 224   // Conversion is required by the ES2015 specification (RegExpBuiltinExec | 219   // Conversion is required by the ES2015 specification (RegExpBuiltinExec | 
| 225   // algorithm, step 4) even if the value is discarded for non-global RegExps. | 220   // algorithm, step 4) even if the value is discarded for non-global RegExps. | 
| 226   var i = TO_LENGTH_OR_INTEGER(lastIndex); | 221   var i = TO_LENGTH(lastIndex); | 
| 227 | 222 | 
| 228   if (REGEXP_GLOBAL(this) || REGEXP_STICKY(this)) { | 223   if (REGEXP_GLOBAL(this) || REGEXP_STICKY(this)) { | 
| 229     if (i < 0 || i > string.length) { | 224     if (i < 0 || i > string.length) { | 
| 230       this.lastIndex = 0; | 225       this.lastIndex = 0; | 
| 231       return false; | 226       return false; | 
| 232     } | 227     } | 
| 233     // matchIndices is either null or the RegExpLastMatchInfo array. | 228     // matchIndices is either null or the RegExpLastMatchInfo array. | 
| 234     var matchIndices = %_RegExpExec(this, string, i, RegExpLastMatchInfo); | 229     var matchIndices = %_RegExpExec(this, string, i, RegExpLastMatchInfo); | 
| 235     if (IS_NULL(matchIndices)) { | 230     if (IS_NULL(matchIndices)) { | 
| 236       this.lastIndex = 0; | 231       this.lastIndex = 0; | 
| (...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 742 // Exports | 737 // Exports | 
| 743 | 738 | 
| 744 utils.Export(function(to) { | 739 utils.Export(function(to) { | 
| 745   to.RegExpExec = DoRegExpExec; | 740   to.RegExpExec = DoRegExpExec; | 
| 746   to.RegExpExecNoTests = RegExpExecNoTests; | 741   to.RegExpExecNoTests = RegExpExecNoTests; | 
| 747   to.RegExpLastMatchInfo = RegExpLastMatchInfo; | 742   to.RegExpLastMatchInfo = RegExpLastMatchInfo; | 
| 748   to.RegExpTest = RegExpTest; | 743   to.RegExpTest = RegExpTest; | 
| 749 }); | 744 }); | 
| 750 | 745 | 
| 751 }) | 746 }) | 
| OLD | NEW | 
|---|