| Index: src/builtins/builtins-regexp-gen.cc | 
| diff --git a/src/builtins/builtins-regexp-gen.cc b/src/builtins/builtins-regexp-gen.cc | 
| index a675c483f4f042a483f68f31d5d3c7470455bd87..4abd9c8b05ccecb4621314ad33dc5376bd2ed5e8 100644 | 
| --- a/src/builtins/builtins-regexp-gen.cc | 
| +++ b/src/builtins/builtins-regexp-gen.cc | 
| @@ -2437,10 +2437,19 @@ TF_BUILTIN(RegExpSplit, RegExpBuiltinsAssembler) { | 
| // ES#sec-regexp.prototype-@@split | 
| // RegExp.prototype [ @@split ] ( string, limit ) | 
| TF_BUILTIN(RegExpPrototypeSplit, RegExpBuiltinsAssembler) { | 
| -  Node* const maybe_receiver = Parameter(Descriptor::kReceiver); | 
| -  Node* const maybe_string = Parameter(Descriptor::kString); | 
| -  Node* const maybe_limit = Parameter(Descriptor::kLimit); | 
| -  Node* const context = Parameter(Descriptor::kContext); | 
| +  const int kStringArg = 0; | 
| +  const int kLimitArg = 1; | 
| + | 
| +  Node* argc = | 
| +      ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount)); | 
| +  CodeStubArguments args(this, argc); | 
| + | 
| +  Node* const maybe_receiver = args.GetReceiver(); | 
| +  Node* const maybe_string = | 
| +      args.GetOptionalArgumentValue(kStringArg, UndefinedConstant()); | 
| +  Node* const maybe_limit = | 
| +      args.GetOptionalArgumentValue(kLimitArg, UndefinedConstant()); | 
| +  Node* const context = Parameter(BuiltinDescriptor::kContext); | 
|  | 
| // Ensure {maybe_receiver} is a JSReceiver. | 
| ThrowIfNotJSReceiver(context, maybe_receiver, | 
| @@ -2455,12 +2464,12 @@ TF_BUILTIN(RegExpPrototypeSplit, RegExpBuiltinsAssembler) { | 
| BranchIfFastRegExp(context, receiver, &stub, &runtime); | 
|  | 
| BIND(&stub); | 
| -  Return(CallBuiltin(Builtins::kRegExpSplit, context, receiver, string, | 
| -                     maybe_limit)); | 
| +  args.PopAndReturn(CallBuiltin(Builtins::kRegExpSplit, context, receiver, | 
| +                                string, maybe_limit)); | 
|  | 
| BIND(&runtime); | 
| -  Return(CallRuntime(Runtime::kRegExpSplit, context, receiver, string, | 
| -                     maybe_limit)); | 
| +  args.PopAndReturn(CallRuntime(Runtime::kRegExpSplit, context, receiver, | 
| +                                string, maybe_limit)); | 
| } | 
|  | 
| Node* RegExpBuiltinsAssembler::ReplaceGlobalCallableFastPath( | 
| @@ -2850,10 +2859,19 @@ TF_BUILTIN(RegExpReplace, RegExpBuiltinsAssembler) { | 
| // ES#sec-regexp.prototype-@@replace | 
| // RegExp.prototype [ @@replace ] ( string, replaceValue ) | 
| TF_BUILTIN(RegExpPrototypeReplace, RegExpBuiltinsAssembler) { | 
| -  Node* const maybe_receiver = Parameter(Descriptor::kReceiver); | 
| -  Node* const maybe_string = Parameter(Descriptor::kString); | 
| -  Node* const replace_value = Parameter(Descriptor::kReplaceValue); | 
| -  Node* const context = Parameter(Descriptor::kContext); | 
| +  const int kStringArg = 0; | 
| +  const int kReplaceValueArg = 1; | 
| + | 
| +  Node* argc = | 
| +      ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount)); | 
| +  CodeStubArguments args(this, argc); | 
| + | 
| +  Node* const maybe_receiver = args.GetReceiver(); | 
| +  Node* const maybe_string = | 
| +      args.GetOptionalArgumentValue(kStringArg, UndefinedConstant()); | 
| +  Node* const replace_value = | 
| +      args.GetOptionalArgumentValue(kReplaceValueArg, UndefinedConstant()); | 
| +  Node* const context = Parameter(BuiltinDescriptor::kContext); | 
|  | 
| // RegExpPrototypeReplace is a bit of a beast - a summary of dispatch logic: | 
| // | 
| @@ -2887,12 +2905,12 @@ TF_BUILTIN(RegExpPrototypeReplace, RegExpBuiltinsAssembler) { | 
| BranchIfFastRegExp(context, receiver, &stub, &runtime); | 
|  | 
| BIND(&stub); | 
| -  Return(CallBuiltin(Builtins::kRegExpReplace, context, receiver, string, | 
| -                     replace_value)); | 
| +  args.PopAndReturn(CallBuiltin(Builtins::kRegExpReplace, context, receiver, | 
| +                                string, replace_value)); | 
|  | 
| BIND(&runtime); | 
| -  Return(CallRuntime(Runtime::kRegExpReplace, context, receiver, string, | 
| -                     replace_value)); | 
| +  args.PopAndReturn(CallRuntime(Runtime::kRegExpReplace, context, receiver, | 
| +                                string, replace_value)); | 
| } | 
|  | 
| // Simple string matching functionality for internal use which does not modify | 
|  |