void UnitEmitter::pushMergeableDef(Unit::MergeKind kind, const StringData* name, const TypedValue& tv) { m_mergeableStmts.push_back(std::make_pair(kind, m_mergeableValues.size())); m_mergeableValues.push_back(std::make_pair(mergeLitstr(name), tv)); m_allClassesHoistable = false; }
std::unique_ptr<UnitEmitter> createFatalUnit(StringData* filename, const MD5& md5, FatalOp /*op*/, StringData* err) { auto ue = std::make_unique<UnitEmitter>(md5); ue->m_filepath = filename; ue->initMain(1, 1); ue->emitOp(OpString); ue->emitInt32(ue->mergeLitstr(err)); ue->emitOp(OpFatal); ue->emitByte(static_cast<uint8_t>(FatalOp::Runtime)); FuncEmitter* fe = ue->getMain(); fe->maxStackCells = 1; // XXX line numbers are bogus fe->finish(ue->bcPos(), false); ue->recordFunction(fe); return ue; }
void UnitEmitter::pushMergeableInclude(Unit::MergeKind kind, const StringData* unitName) { m_mergeableStmts.push_back( std::make_pair(kind, mergeLitstr(unitName))); m_allClassesHoistable = false; }