void objOffsetAppend(ObjectData* base, TypedValue* val, bool validate /* = true */) { assert(!base->isCollection()); if (validate) { objArrayAccess(base); } objOffsetSet(base, init_null_variant, val, false); }
void objOffsetUnset(ObjectData* base, const Variant& offset) { objArrayAccess(base); assert(!base->isCollection()); const Func* method = base->methodNamed(s_offsetUnset.get()); assert(method != nullptr); TypedValue tv; tvWriteUninit(&tv); g_context->invokeFuncFew(&tv, method, base, nullptr, 1, offset.asCell()); tvRefcountedDecRef(&tv); }
void objOffsetUnset(ObjectData* base, TypedValue offset) { objArrayAccess(base); assertx(!base->isCollection()); assertx(offset.m_type != KindOfRef); auto const method = base->methodNamed(s_offsetUnset.get()); assert(method != nullptr); g_context->invokeMethodV(base, method, InvokeArgs(&offset, 1)); }
void objOffsetAppend( ObjectData* base, TypedValue* val, bool validate /* = true */ ) { assertx(!base->isCollection()); if (validate) { objArrayAccess(base); } objOffsetSet(base, make_tv<KindOfNull>(), val, false); }
void objOffsetUnset(ObjectData* base, CVarRef offset) { objArrayAccess(base); static StringData* sd__offsetUnset = StringData::GetStaticString("offsetUnset"); assert(!base->isCollection()); const Func* method = base->methodNamed(sd__offsetUnset); assert(method != nullptr); TypedValue tv; tvWriteUninit(&tv); base->invokeUserMethod(&tv, method, CREATE_VECTOR1(offset)); tvRefcountedDecRef(&tv); }
void objOffsetUnset(ObjectData* base, CVarRef offset) { objArrayAccess(base); static StringData* sd__offsetUnset = makeStaticString("offsetUnset"); assert(!base->isCollection()); const Func* method = base->methodNamed(sd__offsetUnset); assert(method != nullptr); TypedValue tv; tvWriteUninit(&tv); g_vmContext->invokeFuncFew(&tv, method, base, nullptr, 1, offset.asCell()); tvRefcountedDecRef(&tv); }
void objOffsetUnset(TypedValue* base, CVarRef offset) { objArrayAccess(base); static StringData* sd__offsetUnset = StringData::GetStaticString("offsetUnset"); ObjectData* obj = base->m_data.pobj; Instance* instance = static_cast<Instance*>(obj); const Func* method = instance->methodNamed(sd__offsetUnset); ASSERT(method != NULL); TypedValue tv; tvWriteUninit(&tv); instance->invokeUserMethod(&tv, method, CREATE_VECTOR1(offset)); tvRefcountedDecRef(&tv); }
TypedValue* objOffsetGet(TypedValue& tvRef, ObjectData* base, const Variant& offset, bool validate /* = true */) { if (validate) { objArrayAccess(base); } TypedValue* result; assert(!base->isCollection()); const Func* method = base->methodNamed(s_offsetGet.get()); assert(method != nullptr); g_context->invokeFuncFew(&tvRef, method, base, nullptr, 1, offset.asCell()); result = &tvRef; return result; }
static bool objOffsetExists(ObjectData* base, CVarRef offset) { objArrayAccess(base); TypedValue tvResult; tvWriteUninit(&tvResult); static StringData* sd__offsetExists = StringData::GetStaticString("offsetExists"); assert(!base->isCollection()); const Func* method = base->methodNamed(sd__offsetExists); assert(method != nullptr); base->invokeUserMethod(&tvResult, method, CREATE_VECTOR1(offset)); tvCastToBooleanInPlace(&tvResult); return bool(tvResult.m_data.num); }
void objOffsetSet(ObjectData* base, const Variant& offset, TypedValue* val, bool validate /* = true */) { if (validate) { objArrayAccess(base); } assert(!base->isCollection()); const Func* method = base->methodNamed(s_offsetSet.get()); assert(method != nullptr); TypedValue tvResult; tvWriteUninit(&tvResult); TypedValue args[2] = { *offset.asCell(), *tvToCell(val) }; g_context->invokeFuncFew(&tvResult, method, base, nullptr, 2, args); tvRefcountedDecRef(&tvResult); }
bool objOffsetExists(TypedValue* base, CVarRef offset) { objArrayAccess(base); TypedValue tvResult; tvWriteUninit(&tvResult); static StringData* sd__offsetExists = StringData::GetStaticString("offsetExists"); ObjectData* obj = base->m_data.pobj; Instance* instance = static_cast<Instance*>(obj); const Func* method = instance->methodNamed(sd__offsetExists); ASSERT(method != NULL); instance->invokeUserMethod(&tvResult, method, CREATE_VECTOR1(offset)); tvCastToBooleanInPlace(&tvResult); return bool(tvResult.m_data.num); }
TypedValue* objOffsetGet(TypedValue& tvRef, ObjectData* base, CVarRef offset, bool validate /* = true */) { if (validate) { objArrayAccess(base); } TypedValue* result; assert(!base->isCollection()); static StringData* sd__offsetGet = makeStaticString("offsetGet"); const Func* method = base->methodNamed(sd__offsetGet); assert(method != nullptr); g_vmContext->invokeFuncFew(&tvRef, method, base, nullptr, 1, offset.asCell()); result = &tvRef; return result; }
TypedValue* objOffsetGet(TypedValue& tvRef, ObjectData* base, CVarRef offset, bool validate /* = true */) { if (validate) { objArrayAccess(base); } TypedValue* result; assert(!base->isCollection()); static StringData* sd__offsetGet = StringData::GetStaticString("offsetGet"); const Func* method = base->methodNamed(sd__offsetGet); assert(method != nullptr); base->invokeUserMethod(&tvRef, method, CREATE_VECTOR1(offset)); result = &tvRef; return result; }
static bool objOffsetExists(ObjectData* base, CVarRef offset) { objArrayAccess(base); TypedValue tvResult; tvWriteUninit(&tvResult); static StringData* sd__offsetExists = makeStaticString("offsetExists"); assert(!base->isCollection()); const Func* method = base->methodNamed(sd__offsetExists); assert(method != nullptr); g_vmContext->invokeFuncFew(&tvResult, method, base, nullptr, 1, offset.asCell()); tvCastToBooleanInPlace(&tvResult); return bool(tvResult.m_data.num); }
TypedValue* objOffsetGet(TypedValue& tvRef, TypedValue* base, CVarRef offset, bool validate /* = true */) { if (validate) { objArrayAccess(base); } TypedValue* result; ObjectData* obj = base->m_data.pobj; Instance* instance = static_cast<Instance*>(obj); static StringData* sd__offsetGet = StringData::GetStaticString("offsetGet"); const Func* method = instance->methodNamed(sd__offsetGet); ASSERT(method != NULL); instance->invokeUserMethod(&tvRef, method, CREATE_VECTOR1(offset)); result = &tvRef; return result; }
void objOffsetSet(ObjectData* base, CVarRef offset, TypedValue* val, bool validate /* = true */) { if (validate) { objArrayAccess(base); } static StringData* sd__offsetSet = StringData::GetStaticString("offsetSet"); assert(!base->isCollection()); const Func* method = base->methodNamed(sd__offsetSet); assert(method != nullptr); TypedValue tvResult; tvWriteUninit(&tvResult); base->invokeUserMethod(&tvResult, method, CREATE_VECTOR2(offset, tvAsCVarRef(val))); tvRefcountedDecRef(&tvResult); }
static OffsetExistsResult objOffsetExists(ObjectData* base, const Variant& offset) { objArrayAccess(base); TypedValue tvResult; tvWriteUninit(&tvResult); assert(!base->isCollection()); const Func* method = base->methodNamed(s_offsetExists.get()); assert(method != nullptr); g_context->invokeFuncFew(&tvResult, method, base, nullptr, 1, offset.asCell()); tvCastToBooleanInPlace(&tvResult); if (!tvResult.m_data.num) return OffsetExistsResult::DoesNotExist; return method->cls() == SystemLib::s_ArrayObjectClass ? OffsetExistsResult::IssetIfNonNull : OffsetExistsResult::DefinitelyExists; }
void objOffsetSet(TypedValue* base, CVarRef offset, TypedValue* val, bool validate /* = true */) { if (validate) { objArrayAccess(base); } static StringData* sd__offsetSet = StringData::GetStaticString("offsetSet"); ObjectData* obj = base->m_data.pobj; Instance* instance = static_cast<Instance*>(obj); const Func* method = instance->methodNamed(sd__offsetSet); ASSERT(method != NULL); TypedValue tvResult; tvWriteUninit(&tvResult); instance->invokeUserMethod(&tvResult, method, CREATE_VECTOR2(offset, tvAsCVarRef(val))); tvRefcountedDecRef(&tvResult); }
TypedValue objOffsetGet( ObjectData* base, TypedValue offset, bool validate /* = true */ ) { if (validate) { objArrayAccess(base); } assertx(!base->isCollection()); assertx(offset.m_type != KindOfRef); auto const method = base->methodNamed(s_offsetGet.get()); assert(method != nullptr); return g_context->invokeMethod(base, method, InvokeArgs(&offset, 1)); }
void objOffsetSet( ObjectData* base, TypedValue offset, TypedValue* val, bool validate /* = true */ ) { if (validate) { objArrayAccess(base); } assertx(!base->isCollection()); assertx(offset.m_type != KindOfRef); auto const method = base->methodNamed(s_offsetSet.get()); assert(method != nullptr); TypedValue args[2] = { offset, *tvToCell(val) }; g_context->invokeMethodV(base, method, folly::range(args)); }
static OffsetExistsResult objOffsetExists(ObjectData* base, TypedValue offset) { objArrayAccess(base); assertx(!base->isCollection()); assertx(offset.m_type != KindOfRef); auto const method = base->methodNamed(s_offsetExists.get()); assert(method != nullptr); auto result = g_context->invokeMethod(base, method, InvokeArgs(&offset, 1)); // In-place cast decrefs the function call result. tvCastToBooleanInPlace(&result); if (!result.m_data.num) { return OffsetExistsResult::DoesNotExist; } return method->cls() == SystemLib::s_ArrayObjectClass ? OffsetExistsResult::IssetIfNonNull : OffsetExistsResult::DefinitelyExists; }