Changeset 194036 in webkit for trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
- Timestamp:
- Dec 14, 2015, 9:37:59 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r194021 r194036 1665 1665 RegisterID* InstanceOfNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1666 1666 { 1667 RefPtr<RegisterID> hasInstanceValue = generator.newTemporary(); 1668 RefPtr<RegisterID> isObject = generator.newTemporary(); 1669 RefPtr<RegisterID> isCustom = generator.newTemporary(); 1667 RefPtr<RegisterID> src1 = generator.emitNodeForLeftHandSide(m_expr1, m_rightHasAssignments, m_expr2->isPure(generator)); 1668 RefPtr<RegisterID> src2 = generator.emitNode(m_expr2); 1670 1669 RefPtr<RegisterID> prototype = generator.newTemporary(); 1671 RefPtr<RegisterID> value = generator.emitNodeForLeftHandSide(m_expr1, m_rightHasAssignments, m_expr2->isPure(generator)); 1672 RefPtr<RegisterID> constructor = generator.emitNode(m_expr2); 1673 RefPtr<RegisterID> dstReg = generator.finalDestination(dst, value.get()); 1674 RefPtr<Label> custom = generator.newLabel(); 1675 RefPtr<Label> done = generator.newLabel(); 1676 RefPtr<Label> typeError = generator.newLabel(); 1670 RefPtr<RegisterID> dstReg = generator.finalDestination(dst, src1.get()); 1671 RefPtr<Label> target = generator.newLabel(); 1677 1672 1678 1673 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1679 generator.emitIsObject(isObject.get(), constructor.get()); 1680 generator.emitJumpIfFalse(isObject.get(), typeError.get()); 1674 generator.emitCheckHasInstance(dstReg.get(), src1.get(), src2.get(), target.get()); 1681 1675 1682 1676 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1683 generator.emitGetById( hasInstanceValue.get(), constructor.get(), generator.vm()->propertyNames->hasInstanceSymbol);1677 generator.emitGetById(prototype.get(), src2.get(), generator.vm()->propertyNames->prototype); 1684 1678 1685 1679 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1686 generator.emitOverridesHasInstance(isCustom.get(), constructor.get(), hasInstanceValue.get()); 1687 1688 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1689 generator.emitJumpIfTrue(isCustom.get(), custom.get()); 1690 1691 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1692 generator.emitGetById(prototype.get(), constructor.get(), generator.vm()->propertyNames->prototype); 1693 1694 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1695 generator.emitInstanceOf(dstReg.get(), value.get(), prototype.get()); 1696 1697 generator.emitJump(done.get()); 1698 1699 generator.emitLabel(typeError.get()); 1700 generator.emitThrowTypeError("Right hand side of instanceof is not an object"); 1701 1702 generator.emitLabel(custom.get()); 1703 1704 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1705 generator.emitInstanceOfCustom(dstReg.get(), value.get(), constructor.get(), hasInstanceValue.get()); 1706 1707 generator.emitLabel(done.get()); 1708 1709 return dstReg.get(); 1680 RegisterID* result = generator.emitInstanceOf(dstReg.get(), src1.get(), prototype.get()); 1681 generator.emitLabel(target.get()); 1682 return result; 1710 1683 } 1711 1684
Note:
See TracChangeset
for help on using the changeset viewer.