| 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 #include "src/accessors.h" | 5 #include "src/accessors.h" |
| 6 | 6 |
| 7 #include "src/api.h" | 7 #include "src/api.h" |
| 8 #include "src/contexts.h" | 8 #include "src/contexts.h" |
| 9 #include "src/deoptimizer.h" | 9 #include "src/deoptimizer.h" |
| 10 #include "src/execution.h" | 10 #include "src/execution.h" |
| (...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 867 | 867 |
| 868 // Get the number of arguments and construct an arguments object | 868 // Get the number of arguments and construct an arguments object |
| 869 // mirror for the right frame. | 869 // mirror for the right frame. |
| 870 const int length = frame->ComputeParametersCount(); | 870 const int length = frame->ComputeParametersCount(); |
| 871 Handle<JSObject> arguments = isolate->factory()->NewArgumentsObject( | 871 Handle<JSObject> arguments = isolate->factory()->NewArgumentsObject( |
| 872 function, length); | 872 function, length); |
| 873 Handle<FixedArray> array = isolate->factory()->NewFixedArray(length); | 873 Handle<FixedArray> array = isolate->factory()->NewFixedArray(length); |
| 874 | 874 |
| 875 // Copy the parameters to the arguments object. | 875 // Copy the parameters to the arguments object. |
| 876 DCHECK(array->length() == length); | 876 DCHECK(array->length() == length); |
| 877 for (int i = 0; i < length; i++) array->set(i, frame->GetParameter(i)); | 877 for (int i = 0; i < length; i++) { |
| 878 Object* value = frame->GetParameter(i); |
| 879 if (value->IsTheHole(isolate)) { |
| 880 // Generators currently use holes as dummy arguments when resuming. We |
| 881 // must not leak those. |
| 882 DCHECK(IsResumableFunction(function->shared()->kind())); |
| 883 value = isolate->heap()->undefined_value(); |
| 884 } |
| 885 array->set(i, value); |
| 886 } |
| 878 arguments->set_elements(*array); | 887 arguments->set_elements(*array); |
| 879 | 888 |
| 880 // Return the freshly allocated arguments object. | 889 // Return the freshly allocated arguments object. |
| 881 return arguments; | 890 return arguments; |
| 882 } | 891 } |
| 883 | 892 |
| 884 // No frame corresponding to the given function found. Return null. | 893 // No frame corresponding to the given function found. Return null. |
| 885 return isolate->factory()->null_value(); | 894 return isolate->factory()->null_value(); |
| 886 } | 895 } |
| 887 | 896 |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1106 Handle<AccessorInfo> Accessors::BoundFunctionNameInfo( | 1115 Handle<AccessorInfo> Accessors::BoundFunctionNameInfo( |
| 1107 Isolate* isolate, PropertyAttributes attributes) { | 1116 Isolate* isolate, PropertyAttributes attributes) { |
| 1108 return MakeAccessor(isolate, isolate->factory()->name_string(), | 1117 return MakeAccessor(isolate, isolate->factory()->name_string(), |
| 1109 &BoundFunctionNameGetter, &ReconfigureToDataProperty, | 1118 &BoundFunctionNameGetter, &ReconfigureToDataProperty, |
| 1110 attributes); | 1119 attributes); |
| 1111 } | 1120 } |
| 1112 | 1121 |
| 1113 | 1122 |
| 1114 } // namespace internal | 1123 } // namespace internal |
| 1115 } // namespace v8 | 1124 } // namespace v8 |
| OLD | NEW |