OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 8061 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8072 int prefix_argc, | 8072 int prefix_argc, |
8073 int* total_argc) { | 8073 int* total_argc) { |
8074 // Find frame containing arguments passed to the caller. | 8074 // Find frame containing arguments passed to the caller. |
8075 JavaScriptFrameIterator it(isolate); | 8075 JavaScriptFrameIterator it(isolate); |
8076 JavaScriptFrame* frame = it.frame(); | 8076 JavaScriptFrame* frame = it.frame(); |
8077 List<JSFunction*> functions(2); | 8077 List<JSFunction*> functions(2); |
8078 frame->GetFunctions(&functions); | 8078 frame->GetFunctions(&functions); |
8079 if (functions.length() > 1) { | 8079 if (functions.length() > 1) { |
8080 int inlined_jsframe_index = functions.length() - 1; | 8080 int inlined_jsframe_index = functions.length() - 1; |
8081 JSFunction* inlined_function = functions[inlined_jsframe_index]; | 8081 JSFunction* inlined_function = functions[inlined_jsframe_index]; |
8082 Vector<SlotRef> args_slots = | 8082 SlotRefValueBuilder slot_refs( |
8083 SlotRef::ComputeSlotMappingForArguments( | 8083 frame, |
8084 frame, | 8084 inlined_jsframe_index, |
8085 inlined_jsframe_index, | 8085 inlined_function->shared()->formal_parameter_count()); |
8086 inlined_function->shared()->formal_parameter_count()); | |
8087 | 8086 |
8088 int args_count = args_slots.length(); | 8087 int args_count = slot_refs.args_length(); |
8089 | 8088 |
8090 *total_argc = prefix_argc + args_count; | 8089 *total_argc = prefix_argc + args_count; |
8091 SmartArrayPointer<Handle<Object> > param_data( | 8090 SmartArrayPointer<Handle<Object> > param_data( |
8092 NewArray<Handle<Object> >(*total_argc)); | 8091 NewArray<Handle<Object> >(*total_argc)); |
| 8092 slot_refs.Prepare(isolate); |
8093 for (int i = 0; i < args_count; i++) { | 8093 for (int i = 0; i < args_count; i++) { |
8094 Handle<Object> val = args_slots[i].GetValue(isolate); | 8094 Handle<Object> val = slot_refs.GetNext(isolate, 0); |
8095 param_data[prefix_argc + i] = val; | 8095 param_data[prefix_argc + i] = val; |
8096 } | 8096 } |
8097 | 8097 slot_refs.Finish(isolate); |
8098 args_slots.Dispose(); | |
8099 | 8098 |
8100 return param_data; | 8099 return param_data; |
8101 } else { | 8100 } else { |
8102 it.AdvanceToArgumentsFrame(); | 8101 it.AdvanceToArgumentsFrame(); |
8103 frame = it.frame(); | 8102 frame = it.frame(); |
8104 int args_count = frame->ComputeParametersCount(); | 8103 int args_count = frame->ComputeParametersCount(); |
8105 | 8104 |
8106 *total_argc = prefix_argc + args_count; | 8105 *total_argc = prefix_argc + args_count; |
8107 SmartArrayPointer<Handle<Object> > param_data( | 8106 SmartArrayPointer<Handle<Object> > param_data( |
8108 NewArray<Handle<Object> >(*total_argc)); | 8107 NewArray<Handle<Object> >(*total_argc)); |
(...skipping 6782 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14891 // Handle last resort GC and make sure to allow future allocations | 14890 // Handle last resort GC and make sure to allow future allocations |
14892 // to grow the heap without causing GCs (if possible). | 14891 // to grow the heap without causing GCs (if possible). |
14893 isolate->counters()->gc_last_resort_from_js()->Increment(); | 14892 isolate->counters()->gc_last_resort_from_js()->Increment(); |
14894 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, | 14893 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, |
14895 "Runtime::PerformGC"); | 14894 "Runtime::PerformGC"); |
14896 } | 14895 } |
14897 } | 14896 } |
14898 | 14897 |
14899 | 14898 |
14900 } } // namespace v8::internal | 14899 } } // namespace v8::internal |
OLD | NEW |