void UnitEmitter::addTrivialPseudoMain() { initMain(0, 0); auto const mfe = getMain(); emitOp(OpInt); emitInt64(1); emitOp(OpRetC); mfe->maxStackCells = 1; mfe->finish(bcPos(), false); recordFunction(mfe); TypedValue mainReturn; mainReturn.m_data.num = 1; mainReturn.m_type = KindOfInt64; m_mainReturn = mainReturn; m_mergeOnly = true; }
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; }