| 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 |
| (...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 380 GlobalRegExp.prototype, 'constructor', GlobalRegExp, DONT_ENUM); | 380 GlobalRegExp.prototype, 'constructor', GlobalRegExp, DONT_ENUM); |
| 381 %SetCode(GlobalRegExp, RegExpConstructor); | 381 %SetCode(GlobalRegExp, RegExpConstructor); |
| 382 | 382 |
| 383 utils.InstallFunctions(GlobalRegExp.prototype, DONT_ENUM, [ | 383 utils.InstallFunctions(GlobalRegExp.prototype, DONT_ENUM, [ |
| 384 "exec", RegExpExecJS, | 384 "exec", RegExpExecJS, |
| 385 "test", RegExpTest, | 385 "test", RegExpTest, |
| 386 "toString", RegExpToString, | 386 "toString", RegExpToString, |
| 387 "compile", RegExpCompileJS | 387 "compile", RegExpCompileJS |
| 388 ]); | 388 ]); |
| 389 | 389 |
| 390 %DefineGetterPropertyUnchecked(GlobalRegExp.prototype, "global", | 390 utils.InstallGetter(GlobalRegExp.prototype, 'global', RegExpGetGlobal); |
| 391 RegExpGetGlobal, DONT_ENUM); | 391 utils.InstallGetter(GlobalRegExp.prototype, 'ignoreCase', RegExpGetIgnoreCase); |
| 392 %DefineGetterPropertyUnchecked(GlobalRegExp.prototype, "ignoreCase", | 392 utils.InstallGetter(GlobalRegExp.prototype, 'multiline', RegExpGetMultiline); |
| 393 RegExpGetIgnoreCase, DONT_ENUM); | 393 utils.InstallGetter(GlobalRegExp.prototype, 'source', RegExpGetSource); |
| 394 %DefineGetterPropertyUnchecked(GlobalRegExp.prototype, "multiline", | |
| 395 RegExpGetMultiline, DONT_ENUM); | |
| 396 %DefineGetterPropertyUnchecked(GlobalRegExp.prototype, "source", | |
| 397 RegExpGetSource, DONT_ENUM); | |
| 398 | 394 |
| 399 // The length of compile is 1 in SpiderMonkey. | 395 // The length of compile is 1 in SpiderMonkey. |
| 400 %FunctionSetLength(GlobalRegExp.prototype.compile, 1); | 396 %FunctionSetLength(GlobalRegExp.prototype.compile, 1); |
| 401 | 397 |
| 402 // The properties `input` and `$_` are aliases for each other. When this | 398 // The properties `input` and `$_` are aliases for each other. When this |
| 403 // value is set the value it is set to is coerced to a string. | 399 // value is set the value it is set to is coerced to a string. |
| 404 // Getter and setter for the input. | 400 // Getter and setter for the input. |
| 405 var RegExpGetInput = function() { | 401 var RegExpGetInput = function() { |
| 406 var regExpInput = LAST_INPUT(RegExpLastMatchInfo); | 402 var regExpInput = LAST_INPUT(RegExpLastMatchInfo); |
| 407 return IS_UNDEFINED(regExpInput) ? "" : regExpInput; | 403 return IS_UNDEFINED(regExpInput) ? "" : regExpInput; |
| 408 }; | 404 }; |
| 409 var RegExpSetInput = function(string) { | 405 var RegExpSetInput = function(string) { |
| 410 LAST_INPUT(RegExpLastMatchInfo) = TO_STRING(string); | 406 LAST_INPUT(RegExpLastMatchInfo) = TO_STRING(string); |
| 411 }; | 407 }; |
| 412 | 408 |
| 413 %OptimizeObjectForAddingMultipleProperties(GlobalRegExp, 22); | 409 %OptimizeObjectForAddingMultipleProperties(GlobalRegExp, 22); |
| 414 %DefineAccessorPropertyUnchecked(GlobalRegExp, 'input', RegExpGetInput, | 410 utils.InstallGetterSetter(GlobalRegExp, 'input', RegExpGetInput, RegExpSetInput, |
| 415 RegExpSetInput, DONT_DELETE); | 411 DONT_DELETE); |
| 416 %DefineAccessorPropertyUnchecked(GlobalRegExp, '$_', RegExpGetInput, | 412 utils.InstallGetterSetter(GlobalRegExp, '$_', RegExpGetInput, RegExpSetInput, |
| 417 RegExpSetInput, DONT_ENUM | DONT_DELETE); | 413 DONT_ENUM | DONT_DELETE); |
| 414 |
| 418 | 415 |
| 419 var NoOpSetter = function(ignored) {}; | 416 var NoOpSetter = function(ignored) {}; |
| 420 | 417 |
| 421 | 418 |
| 422 // Static properties set by a successful match. | 419 // Static properties set by a successful match. |
| 423 %DefineAccessorPropertyUnchecked(GlobalRegExp, 'lastMatch', RegExpGetLastMatch, | 420 utils.InstallGetterSetter(GlobalRegExp, 'lastMatch', RegExpGetLastMatch, |
| 424 NoOpSetter, DONT_DELETE); | 421 NoOpSetter, DONT_DELETE); |
| 425 %DefineAccessorPropertyUnchecked(GlobalRegExp, '$&', RegExpGetLastMatch, | 422 utils.InstallGetterSetter(GlobalRegExp, '$&', RegExpGetLastMatch, NoOpSetter, |
| 426 NoOpSetter, DONT_ENUM | DONT_DELETE); | 423 DONT_ENUM | DONT_DELETE); |
| 427 %DefineAccessorPropertyUnchecked(GlobalRegExp, 'lastParen', RegExpGetLastParen, | 424 utils.InstallGetterSetter(GlobalRegExp, 'lastParen', RegExpGetLastParen, |
| 428 NoOpSetter, DONT_DELETE); | 425 NoOpSetter, DONT_DELETE); |
| 429 %DefineAccessorPropertyUnchecked(GlobalRegExp, '$+', RegExpGetLastParen, | 426 utils.InstallGetterSetter(GlobalRegExp, '$+', RegExpGetLastParen, NoOpSetter, |
| 430 NoOpSetter, DONT_ENUM | DONT_DELETE); | 427 DONT_ENUM | DONT_DELETE); |
| 431 %DefineAccessorPropertyUnchecked(GlobalRegExp, 'leftContext', | 428 utils.InstallGetterSetter(GlobalRegExp, 'leftContext', RegExpGetLeftContext, |
| 432 RegExpGetLeftContext, NoOpSetter, | 429 NoOpSetter, DONT_DELETE); |
| 433 DONT_DELETE); | 430 utils.InstallGetterSetter(GlobalRegExp, '$`', RegExpGetLeftContext, NoOpSetter, |
| 434 %DefineAccessorPropertyUnchecked(GlobalRegExp, '$`', RegExpGetLeftContext, | 431 DONT_ENUM | DONT_DELETE); |
| 435 NoOpSetter, DONT_ENUM | DONT_DELETE); | 432 utils.InstallGetterSetter(GlobalRegExp, 'rightContext', RegExpGetRightContext, |
| 436 %DefineAccessorPropertyUnchecked(GlobalRegExp, 'rightContext', | 433 NoOpSetter, DONT_DELETE); |
| 437 RegExpGetRightContext, NoOpSetter, | 434 utils.InstallGetterSetter(GlobalRegExp, "$'", RegExpGetRightContext, NoOpSetter, |
| 438 DONT_DELETE); | 435 DONT_ENUM | DONT_DELETE); |
| 439 %DefineAccessorPropertyUnchecked(GlobalRegExp, "$'", RegExpGetRightContext, | |
| 440 NoOpSetter, DONT_ENUM | DONT_DELETE); | |
| 441 | 436 |
| 442 for (var i = 1; i < 10; ++i) { | 437 for (var i = 1; i < 10; ++i) { |
| 443 %DefineAccessorPropertyUnchecked(GlobalRegExp, '$' + i, | 438 utils.InstallGetterSetter(GlobalRegExp, '$' + i, RegExpMakeCaptureGetter(i), |
| 444 RegExpMakeCaptureGetter(i), NoOpSetter, | 439 NoOpSetter, DONT_DELETE); |
| 445 DONT_DELETE); | |
| 446 } | 440 } |
| 447 %ToFastProperties(GlobalRegExp); | 441 %ToFastProperties(GlobalRegExp); |
| 448 | 442 |
| 449 // ------------------------------------------------------------------- | 443 // ------------------------------------------------------------------- |
| 450 // Exports | 444 // Exports |
| 451 | 445 |
| 452 utils.Export(function(to) { | 446 utils.Export(function(to) { |
| 453 to.RegExpExec = DoRegExpExec; | 447 to.RegExpExec = DoRegExpExec; |
| 454 to.RegExpExecNoTests = RegExpExecNoTests; | 448 to.RegExpExecNoTests = RegExpExecNoTests; |
| 455 to.RegExpLastMatchInfo = RegExpLastMatchInfo; | 449 to.RegExpLastMatchInfo = RegExpLastMatchInfo; |
| 456 to.RegExpTest = RegExpTest; | 450 to.RegExpTest = RegExpTest; |
| 457 }); | 451 }); |
| 458 | 452 |
| 459 }) | 453 }) |
| OLD | NEW |