bool mayReadOrWriteGlobals()

in hphp/runtime/vm/super-inlining-bros.cpp [1148:1377]


bool mayReadOrWriteGlobals(Op op) {
  switch (op) {
    case Op::FuncCred:
    case Op::Print:
    case Op::Clone:
    case Op::Exit:
    case Op::Fatal:
    case Op::CnsE:
    case Op::CGetG:
    case Op::CGetS:
    case Op::IssetG:
    case Op::IssetS:
    case Op::SetG:
    case Op::SetS:
    case Op::SetOpG:
    case Op::SetOpS:
    case Op::IncDecG:
    case Op::IncDecS:
    case Op::UnsetG:
    case Op::Incl:
    case Op::InclOnce:
    case Op::Req:
    case Op::ReqOnce:
    case Op::ReqDoc:
    case Op::Eval:
    case Op::NativeImpl:
    case Op::ContEnter:
    case Op::ContRaise:
    case Op::Yield:
    case Op::YieldK:
    case Op::ContCheck:
    case Op::ContValid:
    case Op::ContKey:
    case Op::ContCurrent:
    case Op::ContGetReturn:
    case Op::Await:
    case Op::AwaitAll:
    case Op::Silence:
    case Op::BaseGC:
    case Op::BaseGL:
    case Op::BaseSC:
    case Op::MemoGet:
    case Op::MemoGetEager:
    case Op::MemoSet:
    case Op::MemoSetEager:
    case Op::SetImplicitContextByValue:
      return true;

    case Op::Nop:
    case Op::EntryNop:
    case Op::BreakTraceHint:
    case Op::PopC:
    case Op::PopU:
    case Op::PopU2:
    case Op::PopL:
    case Op::Dup:
    case Op::CGetCUNop:
    case Op::UGetCUNop:
    case Op::Null:
    case Op::NullUninit:
    case Op::True:
    case Op::False:
    case Op::Int:
    case Op::Double:
    case Op::String:
    case Op::Dict:
    case Op::Keyset:
    case Op::Vec:
    case Op::NewDictArray:
    case Op::NewStructDict:
    case Op::NewVec:
    case Op::NewKeysetArray:
    case Op::AddElemC:
    case Op::AddNewElemC:
    case Op::NewCol:
    case Op::NewPair:
    case Op::ColFromArray:
    case Op::ClsCns:
    case Op::ClsCnsD:
    case Op::ClsCnsL:
    case Op::ClassName:
    case Op::LazyClassFromClass:
    case Op::File:
    case Op::Dir:
    case Op::Method:
    case Op::Concat:
    case Op::ConcatN:
    case Op::Add:
    case Op::Sub:
    case Op::Mul:
    case Op::AddO:
    case Op::SubO:
    case Op::MulO:
    case Op::Div:
    case Op::Mod:
    case Op::Pow:
    case Op::Not:
    case Op::Same:
    case Op::NSame:
    case Op::Eq:
    case Op::Neq:
    case Op::Lt:
    case Op::Lte:
    case Op::Gt:
    case Op::Gte:
    case Op::Cmp:
    case Op::BitAnd:
    case Op::BitOr:
    case Op::BitXor:
    case Op::BitNot:
    case Op::Shl:
    case Op::Shr:
    case Op::CastBool:
    case Op::CastInt:
    case Op::CastDouble:
    case Op::CastString:
    case Op::CastDict:
    case Op::CastKeyset:
    case Op::CastVec:
    case Op::DblAsBits:
    case Op::InstanceOf:
    case Op::InstanceOfD:
    case Op::IsLateBoundCls:
    case Op::IsTypeStructC:
    case Op::ThrowAsTypeStructException:
    case Op::CombineAndResolveTypeStruct:
    case Op::Select:
    case Op::Jmp:
    case Op::JmpNS:
    case Op::JmpZ:
    case Op::JmpNZ:
    case Op::Switch:
    case Op::SSwitch:
    case Op::RetC:
    case Op::RetM:
    case Op::RetCSuspended:
    case Op::Throw:
    case Op::CGetL:
    case Op::CGetQuietL:
    case Op::CUGetL:
    case Op::CGetL2:
    case Op::PushL:
    case Op::ClassGetC:
    case Op::ClassGetTS:
    case Op::GetMemoKeyL:
    case Op::AKExists:
    case Op::IssetL:
    case Op::IsUnsetL:
    case Op::IsTypeC:
    case Op::IsTypeL:
    case Op::AssertRATL:
    case Op::AssertRATStk:
    case Op::SetL:
    case Op::SetOpL:
    case Op::IncDecL:
    case Op::UnsetL:
    case Op::ResolveFunc:
    case Op::ResolveMethCaller:
    case Op::ResolveRFunc:
    case Op::ResolveClsMethod:
    case Op::ResolveClsMethodD:
    case Op::ResolveClsMethodS:
    case Op::ResolveRClsMethod:
    case Op::ResolveRClsMethodD:
    case Op::ResolveRClsMethodS:
    case Op::ResolveClass:
    case Op::LazyClass:
    case Op::NewObj:
    case Op::NewObjR:
    case Op::NewObjD:
    case Op::NewObjRD:
    case Op::NewObjS:
    case Op::LockObj:
    case Op::FCallClsMethod:
    case Op::FCallClsMethodD:
    case Op::FCallClsMethodS:
    case Op::FCallClsMethodSD:
    case Op::FCallCtor:
    case Op::FCallFunc:
    case Op::FCallFuncD:
    case Op::FCallObjMethod:
    case Op::FCallObjMethodD:
    case Op::IterInit:
    case Op::LIterInit:
    case Op::IterNext:
    case Op::LIterNext:
    case Op::IterFree:
    case Op::LIterFree:
    case Op::This:
    case Op::BareThis:
    case Op::CheckThis:
    case Op::ChainFaults:
    case Op::OODeclExists:
    case Op::VerifyOutType:
    case Op::VerifyParamType:
    case Op::VerifyParamTypeTS:
    case Op::VerifyRetTypeC:
    case Op::VerifyRetTypeTS:
    case Op::VerifyRetNonNullC:
    case Op::SelfCls:
    case Op::ParentCls:
    case Op::LateBoundCls:
    case Op::RecordReifiedGeneric:
    case Op::CheckReifiedGenericMismatch:
    case Op::CreateCl:
    case Op::CreateCont:
    case Op::WHResult:
    case Op::Idx:
    case Op::ArrayIdx:
    case Op::ArrayMarkLegacy:
    case Op::ArrayUnmarkLegacy:
    case Op::CheckProp:
    case Op::InitProp:
    case Op::ThrowNonExhaustiveSwitch:
    case Op::RaiseClassStringConversionWarning:
    case Op::BaseL:
    case Op::BaseC:
    case Op::BaseH:
    case Op::Dim:
    case Op::QueryM:
    case Op::SetM:
    case Op::SetRangeM:
    case Op::IncDecM:
    case Op::SetOpM:
    case Op::UnsetM:
      return false;
  }

  always_assert_flog(0, "Invalid op: {}\n", static_cast<uint32_t>(op));
}