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 FLAG_harmony_tolength; | 12 var FLAG_harmony_tolength; |
13 var GlobalObject = global.Object; | 13 var GlobalObject = global.Object; |
14 var GlobalRegExp = global.RegExp; | 14 var GlobalRegExp = global.RegExp; |
15 var InternalPackedArray = utils.InternalPackedArray; | 15 var InternalPackedArray = utils.InternalPackedArray; |
16 var MakeTypeError; | 16 var MakeTypeError; |
17 var regExpFlagsSymbol = utils.ImportNow("regexp_flags_symbol"); | |
18 var regExpSourceSymbol = utils.ImportNow("regexp_source_symbol"); | |
19 | 17 |
20 utils.ImportFromExperimental(function(from) { | 18 utils.ImportFromExperimental(function(from) { |
21 FLAG_harmony_tolength = from.FLAG_harmony_tolength; | 19 FLAG_harmony_tolength = from.FLAG_harmony_tolength; |
22 }); | 20 }); |
23 | 21 |
24 utils.Import(function(from) { | 22 utils.Import(function(from) { |
25 MakeTypeError = from.MakeTypeError; | 23 MakeTypeError = from.MakeTypeError; |
26 }); | 24 }); |
27 | 25 |
28 // ------------------------------------------------------------------- | 26 // ------------------------------------------------------------------- |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 var matchEnd = RegExpLastMatchInfo[CAPTURE(index + 1)]; | 325 var matchEnd = RegExpLastMatchInfo[CAPTURE(index + 1)]; |
328 if (matchStart == -1 || matchEnd == -1) return ''; | 326 if (matchStart == -1 || matchEnd == -1) return ''; |
329 return %_SubString(LAST_SUBJECT(RegExpLastMatchInfo), matchStart, matchEnd); | 327 return %_SubString(LAST_SUBJECT(RegExpLastMatchInfo), matchStart, matchEnd); |
330 }; | 328 }; |
331 } | 329 } |
332 | 330 |
333 | 331 |
334 // ES6 21.2.5.4, 21.2.5.5, 21.2.5.7, 21.2.5.12, 21.2.5.15. | 332 // ES6 21.2.5.4, 21.2.5.5, 21.2.5.7, 21.2.5.12, 21.2.5.15. |
335 function GetRegExpFlagGetter(name, mask) { | 333 function GetRegExpFlagGetter(name, mask) { |
336 var getter = function() { | 334 var getter = function() { |
337 if (!IS_SPEC_OBJECT(this)) { | 335 if (!IS_REGEXP(this)) { |
338 throw MakeTypeError(kRegExpNonObject, name, TO_STRING(this)); | 336 throw MakeTypeError(kRegExpNonObject, name, TO_STRING(this)); |
339 } | 337 } |
340 var flags = this[regExpFlagsSymbol]; | 338 return !!(%_RegExpFlags(this) & mask); |
341 if (IS_UNDEFINED(flags)) { | |
342 throw MakeTypeError(kRegExpNonRegExp, TO_STRING(this)); | |
343 } | |
344 return !!(flags & mask); | |
345 }; | 339 }; |
346 %FunctionSetName(getter, name); | 340 %FunctionSetName(getter, name); |
347 %SetNativeFlag(getter); | 341 %SetNativeFlag(getter); |
348 return getter; | 342 return getter; |
349 } | 343 } |
350 | 344 |
351 | 345 |
352 // ES6 21.2.5.10. | 346 // ES6 21.2.5.10. |
353 function RegExpGetSource() { | 347 function RegExpGetSource() { |
354 if (!IS_SPEC_OBJECT(this)) { | 348 if (!IS_REGEXP(this)) { |
355 throw MakeTypeError(kRegExpNonObject, "RegExp.prototype.source", | 349 throw MakeTypeError(kRegExpNonObject, "RegExp.prototype.source", |
356 TO_STRING(this)); | 350 TO_STRING(this)); |
357 } | 351 } |
358 var source = this[regExpSourceSymbol]; | 352 return %RegExpSource(this); |
359 if (IS_UNDEFINED(source)) { | |
360 throw MakeTypeError(kRegExpNonRegExp, TO_STRING(this)); | |
361 } | |
362 return source; | |
363 } | 353 } |
364 | 354 |
365 %SetNativeFlag(RegExpGetSource); | 355 %SetNativeFlag(RegExpGetSource); |
366 | 356 |
367 // ------------------------------------------------------------------- | 357 // ------------------------------------------------------------------- |
368 | 358 |
369 %FunctionSetInstanceClassName(GlobalRegExp, 'RegExp'); | 359 %FunctionSetInstanceClassName(GlobalRegExp, 'RegExp'); |
370 %FunctionSetPrototype(GlobalRegExp, new GlobalObject()); | 360 %FunctionSetPrototype(GlobalRegExp, new GlobalObject()); |
371 %AddNamedProperty( | 361 %AddNamedProperty( |
372 GlobalRegExp.prototype, 'constructor', GlobalRegExp, DONT_ENUM); | 362 GlobalRegExp.prototype, 'constructor', GlobalRegExp, DONT_ENUM); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
465 | 455 |
466 utils.Export(function(to) { | 456 utils.Export(function(to) { |
467 to.GetRegExpFlagGetter = GetRegExpFlagGetter; | 457 to.GetRegExpFlagGetter = GetRegExpFlagGetter; |
468 to.RegExpExec = DoRegExpExec; | 458 to.RegExpExec = DoRegExpExec; |
469 to.RegExpExecNoTests = RegExpExecNoTests; | 459 to.RegExpExecNoTests = RegExpExecNoTests; |
470 to.RegExpLastMatchInfo = RegExpLastMatchInfo; | 460 to.RegExpLastMatchInfo = RegExpLastMatchInfo; |
471 to.RegExpTest = RegExpTest; | 461 to.RegExpTest = RegExpTest; |
472 }); | 462 }); |
473 | 463 |
474 }) | 464 }) |
OLD | NEW |