Index: src/runtime/runtime-scopes.cc |
diff --git a/src/runtime/runtime-scopes.cc b/src/runtime/runtime-scopes.cc |
index 997e405bffa056efbe27d938928ca46892201417..0867f68b60eba2f098564ffb658787c19a29ced1 100644 |
--- a/src/runtime/runtime-scopes.cc |
+++ b/src/runtime/runtime-scopes.cc |
@@ -588,26 +588,6 @@ Handle<JSObject> NewStrictArguments(Isolate* isolate, Handle<JSFunction> callee, |
} |
-template <typename T> |
-Handle<JSObject> NewRestArguments(Isolate* isolate, Handle<JSFunction> callee, |
- T parameters, int argument_count, |
- int start_index) { |
- int num_elements = std::max(0, argument_count - start_index); |
- Handle<JSObject> result = isolate->factory()->NewJSArray( |
- FAST_ELEMENTS, num_elements, num_elements, Strength::WEAK, |
- DONT_INITIALIZE_ARRAY_ELEMENTS); |
- { |
- DisallowHeapAllocation no_gc; |
- FixedArray* elements = FixedArray::cast(result->elements()); |
- WriteBarrierMode mode = result->GetWriteBarrierMode(no_gc); |
- for (int i = 0; i < num_elements; i++) { |
- elements->set(i, parameters[i + start_index], mode); |
- } |
- } |
- return result; |
-} |
- |
- |
class HandleArguments BASE_EMBEDDED { |
public: |
explicit HandleArguments(Handle<Object>* array) : array_(array) {} |
@@ -658,19 +638,29 @@ RUNTIME_FUNCTION(Runtime_NewStrictArguments_Generic) { |
} |
-RUNTIME_FUNCTION(Runtime_NewRestArguments_Generic) { |
+RUNTIME_FUNCTION(Runtime_NewRestParameter) { |
HandleScope scope(isolate); |
- DCHECK(args.length() == 2); |
+ DCHECK_EQ(1, args.length()); |
CONVERT_ARG_HANDLE_CHECKED(JSFunction, callee, 0) |
- CONVERT_SMI_ARG_CHECKED(start_index, 1); |
+ int start_index = callee->shared()->internal_formal_parameter_count(); |
// This generic runtime function can also be used when the caller has been |
// inlined, we use the slow but accurate {GetCallerArguments}. |
int argument_count = 0; |
base::SmartArrayPointer<Handle<Object>> arguments = |
GetCallerArguments(isolate, &argument_count); |
- HandleArguments argument_getter(arguments.get()); |
- return *NewRestArguments(isolate, callee, argument_getter, argument_count, |
- start_index); |
+ int num_elements = std::max(0, argument_count - start_index); |
+ Handle<JSObject> result = isolate->factory()->NewJSArray( |
+ FAST_ELEMENTS, num_elements, num_elements, Strength::WEAK, |
+ DONT_INITIALIZE_ARRAY_ELEMENTS); |
+ { |
+ DisallowHeapAllocation no_gc; |
+ FixedArray* elements = FixedArray::cast(result->elements()); |
+ WriteBarrierMode mode = result->GetWriteBarrierMode(no_gc); |
+ for (int i = 0; i < num_elements; i++) { |
+ elements->set(i, *arguments[i + start_index], mode); |
+ } |
+ } |
+ return *result; |
} |
@@ -708,25 +698,6 @@ RUNTIME_FUNCTION(Runtime_NewStrictArguments) { |
} |
-RUNTIME_FUNCTION(Runtime_NewRestParam) { |
- HandleScope scope(isolate); |
- DCHECK(args.length() == 3); |
- CONVERT_SMI_ARG_CHECKED(num_params, 0); |
- Object** parameters = reinterpret_cast<Object**>(args[1]); |
- CONVERT_SMI_ARG_CHECKED(rest_index, 2); |
-#ifdef DEBUG |
- // This runtime function does not materialize the correct arguments when the |
- // caller has been inlined, better make sure we are not hitting that case. |
- JavaScriptFrameIterator it(isolate); |
- DCHECK(!it.frame()->HasInlinedFrames()); |
-#endif // DEBUG |
- Handle<JSFunction> callee; |
- ParameterArguments argument_getter(parameters); |
- return *NewRestArguments(isolate, callee, argument_getter, num_params, |
- rest_index); |
-} |
- |
- |
RUNTIME_FUNCTION(Runtime_NewClosure) { |
HandleScope scope(isolate); |
DCHECK_EQ(1, args.length()); |