| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 10133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10144 | 10144 |
| 10145 // Now advance to the arguments adapter frame (if any). It contains all | 10145 // Now advance to the arguments adapter frame (if any). It contains all |
| 10146 // the provided parameters whereas the function frame always have the number | 10146 // the provided parameters whereas the function frame always have the number |
| 10147 // of arguments matching the functions parameters. The rest of the | 10147 // of arguments matching the functions parameters. The rest of the |
| 10148 // information (except for what is collected above) is the same. | 10148 // information (except for what is collected above) is the same. |
| 10149 it.AdvanceToArgumentsFrame(); | 10149 it.AdvanceToArgumentsFrame(); |
| 10150 | 10150 |
| 10151 // Find the number of arguments to fill. At least fill the number of | 10151 // Find the number of arguments to fill. At least fill the number of |
| 10152 // parameters for the function and fill more if more parameters are provided. | 10152 // parameters for the function and fill more if more parameters are provided. |
| 10153 int argument_count = info.number_of_parameters(); | 10153 int argument_count = info.number_of_parameters(); |
| 10154 if (argument_count < it.frame()->ComputeParametersCount()) { | 10154 if (it.frame()->is_optimized()) { |
| 10155 argument_count = it.frame()->ComputeParametersCount(); | 10155 ASSERT_EQ(argument_count, deoptimized_frame->parameters_count()); |
| 10156 } else { |
| 10157 if (argument_count < it.frame()->ComputeParametersCount()) { |
| 10158 argument_count = it.frame()->ComputeParametersCount(); |
| 10159 } |
| 10156 } | 10160 } |
| 10157 | 10161 |
| 10158 // Calculate the size of the result. | 10162 // Calculate the size of the result. |
| 10159 int details_size = kFrameDetailsFirstDynamicIndex + | 10163 int details_size = kFrameDetailsFirstDynamicIndex + |
| 10160 2 * (argument_count + info.NumberOfLocals()) + | 10164 2 * (argument_count + info.NumberOfLocals()) + |
| 10161 (at_return ? 1 : 0); | 10165 (at_return ? 1 : 0); |
| 10162 Handle<FixedArray> details = isolate->factory()->NewFixedArray(details_size); | 10166 Handle<FixedArray> details = isolate->factory()->NewFixedArray(details_size); |
| 10163 | 10167 |
| 10164 // Add the frame id. | 10168 // Add the frame id. |
| 10165 details->set(kFrameDetailsFrameIdIndex, *frame_id); | 10169 details->set(kFrameDetailsFrameIdIndex, *frame_id); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10214 | 10218 |
| 10215 // Add arguments name and value. | 10219 // Add arguments name and value. |
| 10216 for (int i = 0; i < argument_count; i++) { | 10220 for (int i = 0; i < argument_count; i++) { |
| 10217 // Name of the argument. | 10221 // Name of the argument. |
| 10218 if (i < info.number_of_parameters()) { | 10222 if (i < info.number_of_parameters()) { |
| 10219 details->set(details_index++, *info.parameter_name(i)); | 10223 details->set(details_index++, *info.parameter_name(i)); |
| 10220 } else { | 10224 } else { |
| 10221 details->set(details_index++, heap->undefined_value()); | 10225 details->set(details_index++, heap->undefined_value()); |
| 10222 } | 10226 } |
| 10223 | 10227 |
| 10224 // Parameter value. If we are inspecting an optimized frame, use | 10228 // Parameter value. |
| 10225 // undefined as the value. | 10229 if (it.frame()->is_optimized()) { |
| 10226 // | 10230 // Get the value from the deoptimized frame. |
| 10227 // TODO(3141533): We should be able to get the actual parameter | 10231 details->set(details_index++, deoptimized_frame->GetParameter(i)); |
| 10228 // value for optimized frames. | |
| 10229 if (!it.frame()->is_optimized() && | |
| 10230 (i < it.frame()->ComputeParametersCount())) { | |
| 10231 details->set(details_index++, it.frame()->GetParameter(i)); | |
| 10232 } else { | 10232 } else { |
| 10233 details->set(details_index++, heap->undefined_value()); | 10233 if (i < it.frame()->ComputeParametersCount()) { |
| 10234 // Get the value from the stack. |
| 10235 details->set(details_index++, it.frame()->GetParameter(i)); |
| 10236 } else { |
| 10237 details->set(details_index++, heap->undefined_value()); |
| 10238 } |
| 10234 } | 10239 } |
| 10235 } | 10240 } |
| 10236 | 10241 |
| 10237 // Add locals name and value from the temporary copy from the function frame. | 10242 // Add locals name and value from the temporary copy from the function frame. |
| 10238 for (int i = 0; i < info.NumberOfLocals() * 2; i++) { | 10243 for (int i = 0; i < info.NumberOfLocals() * 2; i++) { |
| 10239 details->set(details_index++, locals->get(i)); | 10244 details->set(details_index++, locals->get(i)); |
| 10240 } | 10245 } |
| 10241 | 10246 |
| 10242 // Add the value being returned. | 10247 // Add the value being returned. |
| 10243 if (at_return) { | 10248 if (at_return) { |
| (...skipping 2362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12606 } else { | 12611 } else { |
| 12607 // Handle last resort GC and make sure to allow future allocations | 12612 // Handle last resort GC and make sure to allow future allocations |
| 12608 // to grow the heap without causing GCs (if possible). | 12613 // to grow the heap without causing GCs (if possible). |
| 12609 isolate->counters()->gc_last_resort_from_js()->Increment(); | 12614 isolate->counters()->gc_last_resort_from_js()->Increment(); |
| 12610 isolate->heap()->CollectAllGarbage(false); | 12615 isolate->heap()->CollectAllGarbage(false); |
| 12611 } | 12616 } |
| 12612 } | 12617 } |
| 12613 | 12618 |
| 12614 | 12619 |
| 12615 } } // namespace v8::internal | 12620 } } // namespace v8::internal |
| OLD | NEW |