ArrayData* EmptyArray::SetWithRefInt(ArrayData* ad, int64_t k, TypedValue v) { if (checkHACRefBind() && tvIsReferenced(v)) { raiseHackArrCompatRefBind(k); } auto const lval = LvalIntImpl<false>(ad, k, ad->cowCheck()); tvSetWithRef(v, lval); return lval.arr; }
ArrayData* EmptyArray::SetRefStr(ArrayData*, StringData* k, Variant& var, bool) { if (RuntimeOption::EvalHackArrCompatNotices) raiseHackArrCompatRefBind(k); auto ref = *var.asRef(); tvIncRef(&ref); return EmptyArray::MakeMixed(k, ref).array; }
ArrayData* EmptyArray::SetRefInt(ArrayData*, int64_t k, Variant& var, bool) { if (RuntimeOption::EvalHackArrCompatNotices) raiseHackArrCompatRefBind(k); auto ref = *var.asRef(); tvIncRef(&ref); auto const ret = k == 0 ? EmptyArray::MakePacked(ref) : EmptyArray::MakeMixed(k, ref); return ret.array; }
ArrayLval EmptyArray::LvalStrRef(ArrayData* ad, StringData* k, bool copy) { if (RuntimeOption::EvalHackArrCompatNotices) raiseHackArrCompatRefBind(k); return LvalStr(ad, k, copy); }
ArrayLval EmptyArray::LvalIntRef(ArrayData* ad, int64_t k, bool copy) { if (RuntimeOption::EvalHackArrCompatNotices) raiseHackArrCompatRefBind(k); return LvalInt(ad, k, copy); }
arr_lval EmptyArray::LvalStrRef(ArrayData* ad, StringData* k, bool copy) { if (checkHACRefBind()) raiseHackArrCompatRefBind(k); return LvalStr(ad, k, copy); }
arr_lval EmptyArray::LvalIntRef(ArrayData* ad, int64_t k, bool copy) { if (checkHACRefBind()) raiseHackArrCompatRefBind(k); return LvalInt(ad, k, copy); }