void emitGetByOffset(unsigned indexInBlock, Node* node, const AbstractValue& baseValue, const GetByIdVariant& variant, unsigned identifierNumber) { NodeOrigin origin = node->origin; Edge childEdge = node->child1(); Node* child = childEdge.node(); addBaseCheck(indexInBlock, node, baseValue, variant.structureSet()); JSValue baseForLoad; if (variant.alternateBase()) baseForLoad = variant.alternateBase(); else baseForLoad = baseValue.m_value; if (JSValue value = m_graph.tryGetConstantProperty(baseForLoad, variant.baseStructure(), variant.offset())) { m_graph.convertToConstant(node, m_graph.freeze(value)); return; } if (variant.alternateBase()) { child = m_insertionSet.insertConstant(indexInBlock, origin, variant.alternateBase()); childEdge = Edge(child, KnownCellUse); } else childEdge.setUseKind(KnownCellUse); Edge propertyStorage; if (isInlineOffset(variant.offset())) propertyStorage = childEdge; else { propertyStorage = Edge(m_insertionSet.insertNode( indexInBlock, SpecNone, GetButterfly, origin, childEdge)); } node->convertToGetByOffset(m_graph.m_storageAccessData.size(), propertyStorage); StorageAccessData storageAccessData; storageAccessData.offset = variant.offset(); storageAccessData.identifierNumber = identifierNumber; m_graph.m_storageAccessData.append(storageAccessData); }