Index: src/runtime/runtime-debug.cc |
diff --git a/src/runtime/runtime-debug.cc b/src/runtime/runtime-debug.cc |
index fb2e893bbbb1275020354919de78671add5139e3..3649621b09972dc7dae2373f56edf3c0100c6e27 100644 |
--- a/src/runtime/runtime-debug.cc |
+++ b/src/runtime/runtime-debug.cc |
@@ -1895,49 +1895,16 @@ RUNTIME_FUNCTION(Runtime_DebugIsActive) { |
return Smi::FromInt(isolate->debug()->is_active()); |
} |
- |
RUNTIME_FUNCTION(Runtime_DebugBreakInOptimizedCode) { |
UNIMPLEMENTED(); |
return NULL; |
} |
-namespace { |
-Handle<JSObject> CreateRangeObject(Isolate* isolate, const CoverageRange* range, |
- Handle<String> inner_string, |
- Handle<String> start_string, |
- Handle<String> end_string, |
- Handle<String> count_string) { |
- HandleScope scope(isolate); |
- Factory* factory = isolate->factory(); |
- Handle<JSObject> range_obj = factory->NewJSObjectWithNullProto(); |
- JSObject::AddProperty(range_obj, start_string, |
- factory->NewNumberFromInt(range->start), NONE); |
- JSObject::AddProperty(range_obj, end_string, |
- factory->NewNumberFromInt(range->end), NONE); |
- JSObject::AddProperty(range_obj, count_string, |
- factory->NewNumberFromUint(range->count), NONE); |
- JSObject::AddProperty(range_obj, factory->name_string(), range->name, NONE); |
- if (!range->inner.empty()) { |
- int size = static_cast<int>(range->inner.size()); |
- Handle<FixedArray> inner_array = factory->NewFixedArray(size); |
- for (int i = 0; i < size; i++) { |
- Handle<JSObject> element = |
- CreateRangeObject(isolate, &range->inner[i], inner_string, |
- start_string, end_string, count_string); |
- inner_array->set(i, *element); |
- } |
- Handle<JSArray> inner = |
- factory->NewJSArrayWithElements(inner_array, FAST_ELEMENTS); |
- JSObject::AddProperty(range_obj, inner_string, inner, NONE); |
- } |
- return scope.CloseAndEscape(range_obj); |
-} |
-} // anonymous namespace |
- |
RUNTIME_FUNCTION(Runtime_DebugCollectCoverage) { |
HandleScope scope(isolate); |
+ DCHECK_EQ(0, args.length()); |
// Collect coverage data. |
- std::unique_ptr<Coverage> coverage(Coverage::Collect(isolate)); |
+ std::unique_ptr<Coverage> coverage(Coverage::Collect(isolate, false)); |
Factory* factory = isolate->factory(); |
// Turn the returned data structure into JavaScript. |
// Create an array of scripts. |
@@ -1945,22 +1912,31 @@ RUNTIME_FUNCTION(Runtime_DebugCollectCoverage) { |
// Prepare property keys. |
Handle<FixedArray> scripts_array = factory->NewFixedArray(num_scripts); |
Handle<String> script_string = factory->NewStringFromStaticChars("script"); |
- Handle<String> toplevel_string = |
- factory->NewStringFromStaticChars("toplevel"); |
- Handle<String> inner_string = factory->NewStringFromStaticChars("inner"); |
Handle<String> start_string = factory->NewStringFromStaticChars("start"); |
Handle<String> end_string = factory->NewStringFromStaticChars("end"); |
Handle<String> count_string = factory->NewStringFromStaticChars("count"); |
for (int i = 0; i < num_scripts; i++) { |
- const auto& data = coverage->at(i); |
+ const auto& script_data = coverage->at(i); |
HandleScope inner_scope(isolate); |
- Handle<JSObject> script_obj = factory->NewJSObjectWithNullProto(); |
- Handle<JSObject> wrapper = Script::GetWrapper(data.script); |
+ int num_functions = static_cast<int>(script_data.functions.size()); |
+ Handle<FixedArray> functions_array = factory->NewFixedArray(num_functions); |
+ for (int j = 0; j < num_functions; j++) { |
+ const auto& function_data = script_data.functions[j]; |
+ Handle<JSObject> range_obj = factory->NewJSObjectWithNullProto(); |
+ JSObject::AddProperty(range_obj, start_string, |
+ factory->NewNumberFromInt(function_data.start), |
+ NONE); |
+ JSObject::AddProperty(range_obj, end_string, |
+ factory->NewNumberFromInt(function_data.end), NONE); |
+ JSObject::AddProperty(range_obj, count_string, |
+ factory->NewNumberFromUint(function_data.count), |
+ NONE); |
+ functions_array->set(j, *range_obj); |
+ } |
+ Handle<JSArray> script_obj = |
+ factory->NewJSArrayWithElements(functions_array, FAST_ELEMENTS); |
+ Handle<JSObject> wrapper = Script::GetWrapper(script_data.script); |
JSObject::AddProperty(script_obj, script_string, wrapper, NONE); |
- Handle<JSObject> toplevel = |
- CreateRangeObject(isolate, &data.toplevel, inner_string, start_string, |
- end_string, count_string); |
- JSObject::AddProperty(script_obj, toplevel_string, toplevel, NONE); |
scripts_array->set(i, *script_obj); |
} |
return *factory->NewJSArrayWithElements(scripts_array, FAST_ELEMENTS); |