-
- unsigned attributesIgnored;
- JSCell* specificValue;
- PropertyOffset myOffset = structure->get(
- *profiledBlock->vm(), ident, attributesIgnored, specificValue);
- if (structure->isDictionary())
- specificValue = 0;
-
- if (!isValidOffset(myOffset)) {
- result.m_offset = invalidOffset;
- break;
- }
-
- if (!i) {
- result.m_offset = myOffset;
- result.m_specificValue = JSValue(specificValue);
- } else if (result.m_offset != myOffset) {
- result.m_offset = invalidOffset;
+
+ case ComplexGetStatus::TakesSlowPath:
+ return GetByIdStatus(slowPathState, true);
+
+ case ComplexGetStatus::Inlineable: {
+ std::unique_ptr<CallLinkStatus> callLinkStatus;
+ switch (list->at(listIndex).type()) {
+ case GetByIdAccess::SimpleInline:
+ case GetByIdAccess::SimpleStub: {
+ break;
+ }
+ case GetByIdAccess::Getter: {
+ AccessorCallJITStubRoutine* stub = static_cast<AccessorCallJITStubRoutine*>(
+ list->at(listIndex).stubRoutine());
+ callLinkStatus = std::make_unique<CallLinkStatus>(
+ CallLinkStatus::computeFor(
+ locker, profiledBlock, *stub->m_callLinkInfo, callExitSiteData));
+ break;
+ }
+ case GetByIdAccess::SimpleMiss:
+ case GetByIdAccess::CustomGetter:
+ case GetByIdAccess::WatchedStub:{
+ // FIXME: It would be totally sweet to support this at some point in the future.
+ // https://bugs.webkit.org/show_bug.cgi?id=133052
+ return GetByIdStatus(slowPathState, true);
+ }
+ default:
+ RELEASE_ASSERT_NOT_REACHED();
+ }
+
+ GetByIdVariant variant(
+ StructureSet(structure), complexGetStatus.offset(), complexGetStatus.chain(),
+ WTF::move(callLinkStatus));
+
+ if (!result.appendVariant(variant))
+ return GetByIdStatus(slowPathState, true);