📄 objects-debug.cc.svn-base
字号:
void JSFunction::JSFunctionVerify() { CHECK(IsJSFunction()); VerifyObjectField(kPrototypeOrInitialMapOffset);}void SharedFunctionInfo::SharedFunctionInfoPrint() { HeapObject::PrintHeader("SharedFunctionInfo"); PrintF(" - name: "); name()->ShortPrint(); PrintF("\n - expected_nof_properties: %d", expected_nof_properties()); PrintF("\n - instance class name ="); instance_class_name()->Print(); PrintF("\n - code ="); code()->ShortPrint(); PrintF("\n - source code ="); GetSourceCode()->ShortPrint(); PrintF("\n - lazy load: %s", lazy_load_data() == Heap::undefined_value() ? "no" : "yes"); // Script files are often large, hard to read. // PrintF("\n - script ="); // script()->Print(); PrintF("\n - function token position = %d", function_token_position()); PrintF("\n - start position = %d", start_position()); PrintF("\n - end position = %d", end_position()); PrintF("\n - is expression = %d", is_expression()); PrintF("\n - debug info = "); debug_info()->Print(); PrintF("\n - length = %d", length()); PrintF("\n");}void SharedFunctionInfo::SharedFunctionInfoVerify() { CHECK(IsSharedFunctionInfo()); VerifyObjectField(kNameOffset); VerifyObjectField(kCodeOffset); VerifyObjectField(kInstanceClassNameOffset); VerifyObjectField(kExternalReferenceDataOffset); VerifyObjectField(kLazyLoadDataOffset); VerifyObjectField(kScriptOffset); VerifyObjectField(kDebugInfoOffset);}void JSGlobalObject::JSGlobalObjectPrint() { PrintF("global "); JSObjectPrint();}void JSGlobalObject::JSGlobalObjectVerify() { CHECK(IsJSGlobalObject()); JSObjectVerify(); for (int i = GlobalObject::kBuiltinsOffset; i < JSGlobalObject::kSize; i += kPointerSize) { VerifyObjectField(i); }}void JSBuiltinsObject::JSBuiltinsObjectPrint() { PrintF("builtins "); JSObjectPrint();}void JSBuiltinsObject::JSBuiltinsObjectVerify() { CHECK(IsJSBuiltinsObject()); JSObjectVerify(); for (int i = GlobalObject::kBuiltinsOffset; i < JSBuiltinsObject::kSize; i += kPointerSize) { VerifyObjectField(i); }}void Oddball::OddballVerify() { CHECK(IsOddball()); VerifyHeapPointer(to_string()); Object* number = to_number(); if (number->IsHeapObject()) { ASSERT(number == Heap::nan_value()); } else { ASSERT(number->IsSmi()); int value = Smi::cast(number)->value(); ASSERT(value == 0 || value == 1 || value == -1); }}void Code::CodePrint() { HeapObject::PrintHeader("Code");#ifdef ENABLE_DISASSEMBLER Disassemble();#endif}void Code::CodeVerify() { CHECK(ic_flag() == IC_TARGET_IS_ADDRESS); Address last_gc_pc = NULL; for (RelocIterator it(this); !it.done(); it.next()) { it.rinfo()->Verify(); // Ensure that GC will not iterate twice over the same pointer. if (RelocInfo::IsGCRelocMode(it.rinfo()->rmode())) { CHECK(it.rinfo()->pc() != last_gc_pc); last_gc_pc = it.rinfo()->pc(); } }}void JSArray::JSArrayVerify() { JSObjectVerify(); ASSERT(length()->IsNumber() || length()->IsUndefined()); ASSERT(elements()->IsUndefined() || elements()->IsFixedArray());}void JSRegExp::JSRegExpVerify() { JSObjectVerify(); ASSERT(type()->IsSmi() || type()->IsUndefined()); ASSERT(data()->IsUndefined() || data()->IsFixedArray());}void Proxy::ProxyPrint() { PrintF("proxy to %p", proxy());}void Proxy::ProxyVerify() { ASSERT(IsProxy());}void Dictionary::Print() { int capacity = Capacity(); for (int i = 0; i < capacity; i++) { Object* k = KeyAt(i); if (IsKey(k)) { PrintF(" "); if (k->IsString()) { String::cast(k)->StringPrint(); } else { k->ShortPrint(); } PrintF(": "); ValueAt(i)->ShortPrint(); PrintF("\n"); } }}void AccessorInfo::AccessorInfoVerify() { CHECK(IsAccessorInfo()); VerifyPointer(getter()); VerifyPointer(setter()); VerifyPointer(name()); VerifyPointer(data()); VerifyPointer(flag());}void AccessorInfo::AccessorInfoPrint() { PrintF("AccessorInfo"); PrintF("\n - getter: "); getter()->ShortPrint(); PrintF("\n - setter: "); setter()->ShortPrint(); PrintF("\n - name: "); name()->ShortPrint(); PrintF("\n - data: "); data()->ShortPrint(); PrintF("\n - flag: "); flag()->ShortPrint();}void AccessCheckInfo::AccessCheckInfoVerify() { CHECK(IsAccessCheckInfo()); VerifyPointer(named_callback()); VerifyPointer(indexed_callback()); VerifyPointer(data());}void AccessCheckInfo::AccessCheckInfoPrint() { PrintF("AccessCheckInfo"); PrintF("\n - named_callback: "); named_callback()->ShortPrint(); PrintF("\n - indexed_callback: "); indexed_callback()->ShortPrint(); PrintF("\n - data: "); data()->ShortPrint();}void InterceptorInfo::InterceptorInfoVerify() { CHECK(IsInterceptorInfo()); VerifyPointer(getter()); VerifyPointer(setter()); VerifyPointer(query()); VerifyPointer(deleter()); VerifyPointer(enumerator()); VerifyPointer(data());}void InterceptorInfo::InterceptorInfoPrint() { PrintF("InterceptorInfo"); PrintF("\n - getter: "); getter()->ShortPrint(); PrintF("\n - setter: "); setter()->ShortPrint(); PrintF("\n - query: "); query()->ShortPrint(); PrintF("\n - deleter: "); deleter()->ShortPrint(); PrintF("\n - enumerator: "); enumerator()->ShortPrint(); PrintF("\n - data: "); data()->ShortPrint();}void CallHandlerInfo::CallHandlerInfoVerify() { CHECK(IsCallHandlerInfo()); VerifyPointer(callback()); VerifyPointer(data());}void CallHandlerInfo::CallHandlerInfoPrint() { PrintF("CallHandlerInfo"); PrintF("\n - callback: "); callback()->ShortPrint(); PrintF("\n - data: "); data()->ShortPrint();}void TemplateInfo::TemplateInfoVerify() { VerifyPointer(tag()); VerifyPointer(property_list());}void FunctionTemplateInfo::FunctionTemplateInfoVerify() { CHECK(IsFunctionTemplateInfo()); TemplateInfoVerify(); VerifyPointer(serial_number()); VerifyPointer(call_code()); VerifyPointer(property_accessors()); VerifyPointer(prototype_template()); VerifyPointer(parent_template()); VerifyPointer(named_property_handler()); VerifyPointer(indexed_property_handler()); VerifyPointer(instance_template()); VerifyPointer(signature()); VerifyPointer(access_check_info());}void FunctionTemplateInfo::FunctionTemplateInfoPrint() { PrintF("FunctionTemplateInfo"); PrintF("\n - tag: "); tag()->ShortPrint(); PrintF("\n - property_list: "); property_list()->ShortPrint(); PrintF("\n - serial_number: "); serial_number()->ShortPrint(); PrintF("\n - call_code: "); call_code()->ShortPrint(); PrintF("\n - property_accessors: "); property_accessors()->ShortPrint(); PrintF("\n - prototype_template: "); prototype_template()->ShortPrint(); PrintF("\n - parent_template: "); parent_template()->ShortPrint(); PrintF("\n - named_property_handler: "); named_property_handler()->ShortPrint(); PrintF("\n - indexed_property_handler: "); indexed_property_handler()->ShortPrint(); PrintF("\n - instance_template: "); instance_template()->ShortPrint(); PrintF("\n - signature: "); signature()->ShortPrint(); PrintF("\n - access_check_info: "); access_check_info()->ShortPrint(); PrintF("\n - hidden_prototype: %s", hidden_prototype() ? "true" : "false"); PrintF("\n - undetectable: %s", undetectable() ? "true" : "false"); PrintF("\n - need_access_check: %s", needs_access_check() ? "true" : "false");}void ObjectTemplateInfo::ObjectTemplateInfoVerify() { CHECK(IsObjectTemplateInfo()); TemplateInfoVerify(); VerifyPointer(constructor()); VerifyPointer(internal_field_count());}void ObjectTemplateInfo::ObjectTemplateInfoPrint() { PrintF("ObjectTemplateInfo"); PrintF("\n - constructor: "); constructor()->ShortPrint(); PrintF("\n - internal_field_count: "); internal_field_count()->ShortPrint();}void SignatureInfo::SignatureInfoVerify() { CHECK(IsSignatureInfo()); VerifyPointer(receiver()); VerifyPointer(args());}void SignatureInfo::SignatureInfoPrint() { PrintF("SignatureInfo"); PrintF("\n - receiver: "); receiver()->ShortPrint(); PrintF("\n - args: "); args()->ShortPrint();}void TypeSwitchInfo::TypeSwitchInfoVerify() { CHECK(IsTypeSwitchInfo()); VerifyPointer(types());}void TypeSwitchInfo::TypeSwitchInfoPrint() { PrintF("TypeSwitchInfo"); PrintF("\n - types: "); types()->ShortPrint();}void Script::ScriptVerify() { CHECK(IsScript()); VerifyPointer(source()); VerifyPointer(name()); line_offset()->SmiVerify(); column_offset()->SmiVerify(); type()->SmiVerify();}void Script::ScriptPrint() { HeapObject::PrintHeader("Script"); PrintF("\n - source: "); source()->ShortPrint(); PrintF("\n - name: "); name()->ShortPrint(); PrintF("\n - line_offset: "); line_offset()->ShortPrint(); PrintF("\n - column_offset: "); column_offset()->ShortPrint(); PrintF("\n - type: "); type()->ShortPrint(); PrintF("\n");}void DebugInfo::DebugInfoVerify() { CHECK(IsDebugInfo()); VerifyPointer(shared()); VerifyPointer(original_code()); VerifyPointer(code()); VerifyPointer(break_points());}void DebugInfo::DebugInfoPrint() { PrintF("DebugInfo"); PrintF("\n - shared"); shared()->ShortPrint(); PrintF("\n - original_code"); original_code()->ShortPrint(); PrintF("\n - code"); code()->ShortPrint(); PrintF("\n - break_points"); break_points()->ShortPrint();}void BreakPointInfo::BreakPointInfoVerify() { CHECK(IsBreakPointInfo()); code_position()->SmiVerify(); source_position()->SmiVerify(); statement_position()->SmiVerify(); VerifyPointer(break_point_objects());}void BreakPointInfo::BreakPointInfoPrint() { PrintF("BreakPointInfo"); PrintF("\n - code_position %d", code_position()); PrintF("\n - source_position %d", source_position()); PrintF("\n - statement_position %d", statement_position()); PrintF("\n - break_point_objects "); break_point_objects()->ShortPrint();}void JSObject::IncrementSpillStatistics(SpillInformation* info) { info->number_of_objects_++; // Named properties if (HasFastProperties()) { info->number_of_objects_with_fast_properties_++; info->number_of_fast_used_fields_ += map()->NextFreePropertyIndex(); info->number_of_fast_unused_fields_ += map()->unused_property_fields(); } else { Dictionary* dict = property_dictionary(); info->number_of_slow_used_properties_ += dict->NumberOfElements(); info->number_of_slow_unused_properties_ += dict->Capacity() - dict->NumberOfElements(); } // Indexed properties if (HasFastElements()) { info->number_of_objects_with_fast_elements_++; int holes = 0; FixedArray* e = FixedArray::cast(elements()); int len = e->length(); for (int i = 0; i < len; i++) { if (e->get(i) == Heap::the_hole_value()) holes++; } info->number_of_fast_used_elements_ += len - holes; info->number_of_fast_unused_elements_ += holes; } else { Dictionary* dict = element_dictionary(); info->number_of_slow_used_elements_ += dict->NumberOfElements(); info->number_of_slow_unused_elements_ += dict->Capacity() - dict->NumberOfElements(); }}void JSObject::SpillInformation::Clear() { number_of_objects_ = 0; number_of_objects_with_fast_properties_ = 0; number_of_objects_with_fast_elements_ = 0; number_of_fast_used_fields_ = 0; number_of_fast_unused_fields_ = 0; number_of_slow_used_properties_ = 0; number_of_slow_unused_properties_ = 0; number_of_fast_used_elements_ = 0; number_of_fast_unused_elements_ = 0; number_of_slow_used_elements_ = 0; number_of_slow_unused_elements_ = 0;}void JSObject::SpillInformation::Print() { PrintF("\n JSObject Spill Statistics (#%d):\n", number_of_objects_); PrintF(" - fast properties (#%d): %d (used) %d (unused)\n", number_of_objects_with_fast_properties_, number_of_fast_used_fields_, number_of_fast_unused_fields_); PrintF(" - slow properties (#%d): %d (used) %d (unused)\n", number_of_objects_ - number_of_objects_with_fast_properties_, number_of_slow_used_properties_, number_of_slow_unused_properties_); PrintF(" - fast elements (#%d): %d (used) %d (unused)\n", number_of_objects_with_fast_elements_, number_of_fast_used_elements_, number_of_fast_unused_elements_); PrintF(" - slow elements (#%d): %d (used) %d (unused)\n", number_of_objects_ - number_of_objects_with_fast_elements_, number_of_slow_used_elements_, number_of_slow_unused_elements_); PrintF("\n");}void DescriptorArray::PrintDescriptors() { PrintF("Descriptor array %d\n", number_of_descriptors()); int number = 0; for (DescriptorReader r(this); !r.eos(); r.advance()) { Descriptor desc; r.Get(&desc); PrintF(" %d: ", number++); desc.Print(); } PrintF("\n");}bool DescriptorArray::IsSortedNoDuplicates() { String* current_key = NULL; uint32_t current = 0; for (DescriptorReader r(this); !r.eos(); r.advance()) { String* key = r.GetKey(); if (key == current_key) { PrintDescriptors(); return false; } current_key = key; uint32_t hash = r.GetKey()->Hash(); if (hash < current) { PrintDescriptors(); return false; } current = hash; } return true;}#endif // DEBUG} } // namespace v8::internal
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -