std::unique_ptr<php::Func> parse_func(ParseUnitState& puState, borrowed_ptr<php::Unit> unit, borrowed_ptr<php::Class> cls, const FuncEmitter& fe) { FTRACE(2, " func: {}\n", fe.name()->data() && *fe.name()->data() ? fe.name()->data() : "pseudomain"); auto ret = folly::make_unique<php::Func>(); ret->name = fe.name(); ret->srcInfo = php::SrcInfo { fe.getLocation(), fe.getDocComment() }; ret->unit = unit; ret->cls = cls; // Note: probably need to clear AttrLeaf here eventually. ret->attrs = fe.attrs(); ret->userAttributes = fe.getUserAttributes(); ret->userRetTypeConstraint = fe.returnTypeConstraint(); ret->originalFilename = fe.originalFilename(); ret->top = fe.top(); ret->isClosureBody = fe.isClosureBody(); ret->isGeneratorBody = fe.isGenerator(); ret->isGeneratorFromClosure = fe.isGeneratorFromClosure(); ret->isPairGenerator = fe.isPairGenerator(); ret->hasGeneratorAsBody = fe.hasGeneratorAsBody(); ret->nextBlockId = 0; add_frame_variables(*ret, fe); build_cfg(puState, *ret, fe); return ret; }
std::unique_ptr<php::Func> parse_func(ParseUnitState& puState, borrowed_ptr<php::Unit> unit, borrowed_ptr<php::Class> cls, const FuncEmitter& fe) { FTRACE(2, " func: {}\n", fe.name()->data() && *fe.name()->data() ? fe.name()->data() : "pseudomain"); auto ret = folly::make_unique<php::Func>(); ret->name = fe.name(); ret->srcInfo = php::SrcInfo { fe.getLocation(), fe.getDocComment() }; ret->unit = unit; ret->cls = cls; ret->nextBlockId = 0; ret->attrs = fe.attrs(); ret->userAttributes = fe.getUserAttributes(); ret->returnUserType = fe.returnUserType(); ret->retTypeConstraint = fe.returnTypeConstraint(); ret->originalFilename = fe.originalFilename(); ret->top = fe.top(); ret->isClosureBody = fe.isClosureBody(); ret->isAsync = fe.isAsync(); ret->isGenerator = fe.isGenerator(); ret->isPairGenerator = fe.isPairGenerator(); /* * HNI-style native functions get some extra information. */ if (fe.isHNINative()) { ret->nativeInfo = folly::make_unique<php::NativeInfo>(); ret->nativeInfo->returnType = fe.getReturnType(); } add_frame_variables(*ret, fe); build_cfg(puState, *ret, fe); return ret; }