std::string show(RegionDesc::Location l) { switch (l.tag()) { case RegionDesc::Location::Tag::Local: return folly::format("Local{{{}}}", l.localId()).str(); case RegionDesc::Location::Tag::Stack: return folly::format("Stack{{{}}}", l.offsetFromFP().offset).str(); } not_reached(); }
void assertTypeLocation(IRGS& env, const RegionDesc::Location& loc, Type type) { assertx(type <= TStkElem); using T = RegionDesc::Location::Tag; switch (loc.tag()) { case T::Stack: assertTypeStack(env, offsetFromBCSP(env, loc.offsetFromFP()), type); break; case T::Local: assertTypeLocal(env, loc.localId(), type); break; } }
void predictTypeLocation( IRGS& env, const RegionDesc::Location& loc, Type type ) { using T = RegionDesc::Location::Tag; switch (loc.tag()) { case T::Stack: predictTypeStack(env, offsetFromBCSP(env, loc.offsetFromFP()), type); break; case T::Local: predictTypeLocal(env, loc.localId(), type); break; } }
void checkTypeLocation(IRGS& env, const RegionDesc::Location& loc, Type type, Offset dest, bool outerOnly) { assertx(type <= TGen); using T = RegionDesc::Location::Tag; switch (loc.tag()) { case T::Stack: checkTypeStack(env, offsetFromBCSP(env, loc.offsetFromFP()), type, dest, outerOnly); break; case T::Local: checkTypeLocal(env, loc.localId(), type, dest, outerOnly); break; } }