OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/arguments.h" | 8 #include "src/arguments.h" |
9 #include "src/frames-inl.h" | 9 #include "src/frames-inl.h" |
10 #include "src/messages.h" | 10 #include "src/messages.h" |
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
376 isolate->factory()->NewArgumentsObject(callee, argument_count); | 376 isolate->factory()->NewArgumentsObject(callee, argument_count); |
377 | 377 |
378 // Allocate the elements if needed. | 378 // Allocate the elements if needed. |
379 int parameter_count = callee->shared()->internal_formal_parameter_count(); | 379 int parameter_count = callee->shared()->internal_formal_parameter_count(); |
380 if (argument_count > 0) { | 380 if (argument_count > 0) { |
381 if (parameter_count > 0) { | 381 if (parameter_count > 0) { |
382 int mapped_count = Min(argument_count, parameter_count); | 382 int mapped_count = Min(argument_count, parameter_count); |
383 Handle<FixedArray> parameter_map = | 383 Handle<FixedArray> parameter_map = |
384 isolate->factory()->NewFixedArray(mapped_count + 2, NOT_TENURED); | 384 isolate->factory()->NewFixedArray(mapped_count + 2, NOT_TENURED); |
385 parameter_map->set_map(isolate->heap()->sloppy_arguments_elements_map()); | 385 parameter_map->set_map(isolate->heap()->sloppy_arguments_elements_map()); |
386 | 386 result->set_map(isolate->native_context()->fast_aliased_arguments_map()); |
387 Handle<Map> map = Map::Copy(handle(result->map()), "NewSloppyArguments"); | |
388 map->set_elements_kind(SLOPPY_ARGUMENTS_ELEMENTS); | |
389 | |
390 result->set_map(*map); | |
391 result->set_elements(*parameter_map); | 387 result->set_elements(*parameter_map); |
392 | 388 |
393 // Store the context and the arguments array at the beginning of the | 389 // Store the context and the arguments array at the beginning of the |
394 // parameter map. | 390 // parameter map. |
395 Handle<Context> context(isolate->context()); | 391 Handle<Context> context(isolate->context()); |
396 Handle<FixedArray> arguments = | 392 Handle<FixedArray> arguments = |
397 isolate->factory()->NewFixedArray(argument_count, NOT_TENURED); | 393 isolate->factory()->NewFixedArray(argument_count, NOT_TENURED); |
398 parameter_map->set(0, *context); | 394 parameter_map->set(0, *context); |
399 parameter_map->set(1, *arguments); | 395 parameter_map->set(1, *arguments); |
400 | 396 |
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1133 return Smi::FromInt(frame->GetArgumentsLength()); | 1129 return Smi::FromInt(frame->GetArgumentsLength()); |
1134 } | 1130 } |
1135 | 1131 |
1136 | 1132 |
1137 RUNTIME_FUNCTION(Runtime_Arguments) { | 1133 RUNTIME_FUNCTION(Runtime_Arguments) { |
1138 SealHandleScope shs(isolate); | 1134 SealHandleScope shs(isolate); |
1139 return __RT_impl_Runtime_GetArgumentsProperty(args, isolate); | 1135 return __RT_impl_Runtime_GetArgumentsProperty(args, isolate); |
1140 } | 1136 } |
1141 } // namespace internal | 1137 } // namespace internal |
1142 } // namespace v8 | 1138 } // namespace v8 |
OLD | NEW |