void CodeGenerator::cgIncDecProp(IRInstruction* inst) { auto const base = inst->src(0); auto const extra = inst->extra<IncDecProp>(); BUILD_OPTAB(INCDECPROP_HELPER_TABLE, base->isA(TObj)); cgCallHelper( vmain(), CallSpec::direct(opFunc), callDestTV(inst), SyncOptions::Sync, argGroup(inst) .immPtr(getClass(inst->marker())) .ssa(0) .typedValue(1) .imm(static_cast<int32_t>(extra->op)) ); }
void cgInitClsCns(IRLS& env, const IRInstruction* inst) { auto const extra = inst->extra<InitClsCns>(); auto const link = rds::bindClassConstant(extra->clsName, extra->cnsName); auto& v = vmain(env); auto const args = argGroup(env, inst) .addr(rvmtl(), safe_cast<int32_t>(link.handle())) .immPtr(NamedEntity::get(extra->clsName)) .immPtr(extra->clsName) .immPtr(extra->cnsName); cgCallHelper(v, env, CallSpec::direct(lookupClsCnsHelper), callDestTV(env, inst), SyncOptions::Sync, args); markRDSHandleInitialized(v, link.handle()); }
void cgLookupCnsU(IRLS& env, const IRInstruction* inst) { auto const cnsName = inst->src(0)->strVal(); auto const fallbackName = inst->src(1)->strVal(); auto const fallbackCh = makeCnsHandle(fallbackName, false); auto const args = argGroup(env, inst) .imm(safe_cast<int32_t>(fallbackCh)) .immPtr(cnsName) .immPtr(fallbackName); cgCallHelper( vmain(env), env, rds::isNormalHandle(fallbackCh) ? CallSpec::direct(lookupCnsUHelperNormal) : CallSpec::direct(lookupCnsUHelperPersistent), callDestTV(env, inst), SyncOptions::Sync, args ); }