code) const { Isolate* isolate = code->GetIsolate(); Handle deopt_data( DeoptimizationData::cast(code->deoptimization_data()), isolate); SourcePosition pos = *this; std::vector stack; while (pos.isInlined()) { InliningPosition inl = deopt_data->InliningPositions()->get(pos.InliningId()); Handle function( deopt_data->GetInlinedFunction(inl.inlined_function_id), isolate); stack.push_back(SourcePositionInfo(pos, function)); pos = inl.position; } Handle function( SharedFunctionInfo::cast(deopt_data->SharedFunctionInfo()), isolate); stack.push_back(SourcePositionInfo(pos, function)); return stack; } void SourcePosition::Print(std::ostream& out, SharedFunctionInfo* function) const { Script::PositionInfo pos; Object* source_name = nullptr; if (function->script()->IsScript()) { Script* script = Script::cast(function->script()); source_name = script->name(); script->GetPositionInfo(ScriptOffset(), &pos, Script::WITH_OFFSET); } out << "<"; if (source_name != nullptr && source_name->IsString()) { out << String::cast(source_name) ->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL) .get(); } else { out << "unknown"; } out << ":" << pos.line + 1 << ":" << pos.column + 1 << ">"; } void SourcePosition::PrintJson(std::ostream& out) const { out << "{ \"scriptOffset\" : " << ScriptOffset() << ", " << " \"inliningId\" : " << InliningId() << "}"; } void SourcePosition::Print(std::ostream& out, Code* code) const { DeoptimizationData* deopt_data = DeoptimizationData::cast(code->deoptimization_data()); if (!isInlined()) { SharedFunctionInfo* function( SharedFunctionInfo::cast(deopt_data->SharedFunctionInfo())); Print(out, function); } else { InliningPosition inl = deopt_data->InliningPositions()->get(InliningId()); if (inl.inlined_function_id == -1) { out << *this; } else { SharedFunctionInfo* function = deopt_data->GetInlinedFunction(inl.inlined_function_id); Print(out, function); } out << " inlined at "; inl.position.Print(out, code); } } SourcePositionInfo::SourcePositionInfo(SourcePosition pos, Handle f) : position(pos), script(f.is_null() || !f->script()->IsScript() ? Handle 登录后可以享受更多权益 您还没有登录,登录后您可以: 收藏Android系统代码 收藏喜欢的文章 多个平台共享账号 去登录 首次使用?从这里 注册
您还没有登录,登录后您可以:
首次使用?从这里 注册