void Func::prettyPrint(std::ostream& out) const { if (isPseudoMain()) { out << "Pseudo-main"; } else if (preClass() != NULL) { out << "Method "; if (m_attrs & AttrStatic) { out << "static "; } if (m_attrs & AttrPublic) { out << "public "; } if (m_attrs & AttrProtected) { out << "protected "; } if (m_attrs & AttrPrivate) { out << "private "; } if (m_attrs & AttrAbstract) { out << "abstract "; } if (m_attrs & AttrFinal) { out << "final "; } out << preClass()->name()->data() << "::" << m_name->data(); } else { out << "Function " << m_name->data(); } out << " at " << base(); if (shared()->m_id != -1) { out << " (ID " << shared()->m_id << ")"; } out << std::endl; const ParamInfoVec& params = shared()->m_params; for (uint i = 0; i < params.size(); ++i) { if (params[i].funcletOff() != InvalidAbsoluteOffset) { out << " DV for parameter " << i << " at " << params[i].funcletOff() << " = " << params[i].phpCode()->data() << std::endl; } } const EHEntVec& ehtab = shared()->m_ehtab; for (EHEntVec::const_iterator it = ehtab.begin(); it != ehtab.end(); ++it) { bool catcher = it->m_ehtype == EHEnt::EHType_Catch; out << " EH " << (catcher ? "Catch" : "Fault") << " for " << it->m_base << ":" << it->m_past; if (it->m_parentIndex != -1) { out << " outer EH " << it->m_parentIndex; } if (it->m_iterId != -1) { out << " iterId " << it->m_iterId; } if (catcher) { out << std::endl; for (EHEnt::CatchVec::const_iterator it2 = it->m_catches.begin(); it2 != it->m_catches.end(); ++it2) { out << " Handle " << m_unit->lookupLitstrId(it2->first)->data() << " at " << it2->second; } } else { out << " to " << it->m_fault; } if (it->m_parentIndex != -1) { out << " parentIndex " << it->m_parentIndex; } out << std::endl; } }
std::string show(SrcKey sk) { auto func = sk.func(); auto unit = sk.unit(); const char *filepath = "*anonFile*"; if (unit->filepath()->data() && unit->filepath()->size()) { filepath = unit->filepath()->data(); } return folly::format("{}:{} in {}(id 0x{:#x})@{: >6}", filepath, unit->getLineNumber(sk.offset()), func->isPseudoMain() ? "pseudoMain" : func->fullName()->data(), (unsigned long long)sk.getFuncId(), sk.offset()).str(); }
std::string show(SrcKey sk) { auto func = sk.func(); auto unit = sk.unit(); const char *filepath = "*anonFile*"; if (unit->filepath()->data() && unit->filepath()->size()) { filepath = unit->filepath()->data(); } return folly::sformat("{}:{} in {}(id 0x{:#x})@{: >6}{}{}", filepath, unit->getLineNumber(sk.offset()), func->isPseudoMain() ? "pseudoMain" : func->fullName()->data(), (uint32_t)sk.funcID(), sk.offset(), sk.resumed() ? "r" : "", sk.hasThis() ? "t" : "", sk.prologue() ? "p" : ""); }
void FuncEmitter::init(int l1, int l2, Offset base_, Attr attrs_, bool top_, const StringData* docComment_) { base = base_; line1 = l1; line2 = l2; top = top_; attrs = attrs_; docComment = docComment_; if (!isPseudoMain()) { if (!SystemLib::s_inited) { assertx(attrs & AttrBuiltin); } if ((attrs & AttrBuiltin) && !pce()) { attrs |= AttrSkipFrame; } } }