Ejemplo n.º 1
0
ArrayData*
EmptyArray::SetStr(ArrayData*, StringData* k, Cell v) {
  tvIncRefGen(v);
  // TODO(#3888164): we should make it so we don't need KindOfUninit checks
  if (v.m_type == KindOfUninit) v.m_type = KindOfNull;
  return EmptyArray::MakeMixed(k, v).arr;
}
Ejemplo n.º 2
0
Cell APCLocalArray::NvGetKey(const ArrayData* ad, ssize_t pos) {
  auto a = asApcArray(ad);
  Variant k = a->m_arr->getKey(pos);
  auto const tv = k.asTypedValue();
  tvIncRefGen(tv);
  return *tv;
}
Ejemplo n.º 3
0
ArrayData* EmptyArray::SetInt(ArrayData*, int64_t k, Cell v) {
  // TODO(#3888164): we should make it so we don't need KindOfUninit checks
  if (v.m_type == KindOfUninit) v.m_type = KindOfNull;
  tvIncRefGen(v);
  auto const lval = k == 0 ? EmptyArray::MakePacked(v)
                           : EmptyArray::MakeMixed(k, v);
  return lval.arr;
}
Ejemplo n.º 4
0
Cell incDecBodySlow(IncDecOp op, Cell* fr) {
  assert(cellIsPlausible(*fr));
  assert(fr->m_type != KindOfUninit);

  auto dup = [&]() { tvIncRefGen(fr); return *fr; };

  switch (op) {
  case IncDecOp::PreInc:
    cellInc(*fr);
    return dup();
  case IncDecOp::PostInc: {
    auto const tmp = dup();
    cellInc(*fr);
    return tmp;
  }
  case IncDecOp::PreDec:
    cellDec(*fr);
    return dup();
  case IncDecOp::PostDec: {
    auto const tmp = dup();
    cellDec(*fr);
    return tmp;
  }
  default: break;
  }

  switch (op) {
  case IncDecOp::PreIncO:
    cellIncO(*fr);
    return dup();
  case IncDecOp::PostIncO: {
    auto const tmp = dup();
    cellIncO(*fr);
    return tmp;
  }
  case IncDecOp::PreDecO:
    cellDecO(*fr);
    return dup();
  case IncDecOp::PostDecO: {
    auto const tmp = dup();
    cellDecO(*fr);
    return tmp;
  }
  default: break;
  }
  not_reached();
}
Ejemplo n.º 5
0
ArrayData* EmptyArray::Prepend(ArrayData*, Cell v) {
  tvIncRefGen(v);
  return EmptyArray::MakePacked(v).arr;
}