コード例 #1
0
ファイル: packed-array.cpp プロジェクト: Einkoro/hhvm
ArrayData* PackedArray::LvalInt(ArrayData* adIn,
                                int64_t k,
                                Variant*& ret,
                                bool copy) {
  assert(checkInvariants(adIn));

  if (LIKELY(size_t(k) < adIn->m_size)) {
    auto const ad = copy ? Copy(adIn) : adIn;
    ret = &tvAsVariant(&packedData(ad)[k]);
    return ad;
  }

  // We can stay packed if the index is m_size, and the operation does
  // the same thing as LvalNew.
  if (size_t(k) == adIn->m_size) return LvalNew(adIn, ret, copy);

  // Promote-to-mixed path, we know the key is new and should be using
  // findForNewInsert but aren't yet TODO(#2606310).
  auto const mixed = copy ? ToMixedCopy(adIn) : ToMixed(adIn);
  return mixed->addLvalImpl(k, ret);
}
コード例 #2
0
ファイル: empty-array.cpp プロジェクト: aloiret/hhvm
ArrayLval EmptyArray::LvalNewRef(ArrayData* ad, bool copy) {
  if (RuntimeOption::EvalHackArrCompatNotices) raiseHackArrCompatRefNew();
  return LvalNew(ad, copy);
}
コード例 #3
0
ファイル: empty-array.cpp プロジェクト: facebook/hhvm
arr_lval EmptyArray::LvalNewRef(ArrayData* ad, bool copy) {
  if (checkHACRefBind()) raiseHackArrCompatRefNew();
  return LvalNew(ad, copy);
}