Changeset 36976 in webkit for trunk/JavaScriptCore/kjs/nodes.cpp
- Timestamp:
- Sep 26, 2008, 6:44:15 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/nodes.cpp
r36872 r36976 142 142 Node::Node(JSGlobalData* globalData) 143 143 : ParserRefCounted(globalData) 144 , m_expectedReturnType(ObjectType)145 {146 m_line = globalData->lexer->lineNo();147 }148 149 Node::Node(JSGlobalData* globalData, JSType expectedReturn)150 : ParserRefCounted(globalData)151 , m_expectedReturnType(expectedReturn)152 144 { 153 145 m_line = globalData->lexer->lineNo(); … … 664 656 return 0; 665 657 RefPtr<RegisterID> r0 = generator.emitUnexpectedLoad(generator.finalDestination(dst), (m_operator == OpPlusPlus) ? 1.0 : -1.0); 666 return generator.emitBinaryOp(op_add, r0.get(), local, r0.get() );658 return generator.emitBinaryOp(op_add, r0.get(), local, r0.get(), OperandTypes()); 667 659 } 668 660 … … 755 747 RefPtr<RegisterID> src1 = generator.emitNodeForLeftHandSide(m_expr1.get(), m_rightHasAssignments, m_expr2->isPure(generator)); 756 748 RegisterID* src2 = generator.emitNode(m_expr2.get()); 757 return generator.emitBinaryOp(opcode, generator.finalDestination(dst, src1.get()), src1.get(), src2 );749 return generator.emitBinaryOp(opcode, generator.finalDestination(dst, src1.get()), src1.get(), src2, OperandTypes(m_expr1->resultDescriptor(), m_expr2->resultDescriptor())); 758 750 } 759 751 … … 781 773 RefPtr<RegisterID> src1 = generator.emitNodeForLeftHandSide(m_expr1.get(), m_rightHasAssignments, m_expr2->isPure(generator)); 782 774 RegisterID* src2 = generator.emitNode(m_expr2.get()); 783 return generator.emitBinaryOp(opcode(), generator.finalDestination(dst, src1.get()), src2, src1.get() );775 return generator.emitBinaryOp(opcode(), generator.finalDestination(dst, src1.get()), src2, src1.get(), OperandTypes(m_expr2->resultDescriptor(), m_expr1->resultDescriptor())); 784 776 } 785 777 … … 789 781 RegisterID* src2 = generator.emitNode(m_expr2.get()); 790 782 generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset); 791 return generator.emitBinaryOp(opcode(), generator.finalDestination(dst, src1.get()), src1.get(), src2 );783 return generator.emitBinaryOp(opcode(), generator.finalDestination(dst, src1.get()), src1.get(), src2, OperandTypes(m_expr1->resultDescriptor(), m_expr2->resultDescriptor())); 792 784 } 793 785 … … 847 839 848 840 // FIXME: should this be moved to be a method on CodeGenerator? 849 static ALWAYS_INLINE RegisterID* emitReadModifyAssignment(CodeGenerator& generator, RegisterID* dst, RegisterID* src1, RegisterID* src2, Operator oper )841 static ALWAYS_INLINE RegisterID* emitReadModifyAssignment(CodeGenerator& generator, RegisterID* dst, RegisterID* src1, RegisterID* src2, Operator oper, OperandTypes types) 850 842 { 851 843 OpcodeID opcode; … … 889 881 } 890 882 891 return generator.emitBinaryOp(opcode, dst, src1, src2 );883 return generator.emitBinaryOp(opcode, dst, src1, src2, types); 892 884 } 893 885 … … 897 889 if (generator.isLocalConstant(m_ident)) { 898 890 RegisterID* src2 = generator.emitNode(m_right.get()); 899 return emitReadModifyAssignment(generator, generator.finalDestination(dst), local, src2, m_operator );891 return emitReadModifyAssignment(generator, generator.finalDestination(dst), local, src2, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor())); 900 892 } 901 893 … … 904 896 generator.emitMove(result.get(), local); 905 897 RegisterID* src2 = generator.emitNode(m_right.get()); 906 emitReadModifyAssignment(generator, result.get(), result.get(), src2, m_operator );898 emitReadModifyAssignment(generator, result.get(), result.get(), src2, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor())); 907 899 generator.emitMove(local, result.get()); 908 900 return generator.moveToDestinationIfNeeded(dst, result.get()); … … 910 902 911 903 RegisterID* src2 = generator.emitNode(m_right.get()); 912 RegisterID* result = emitReadModifyAssignment(generator, local, local, src2, m_operator );904 RegisterID* result = emitReadModifyAssignment(generator, local, local, src2, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor())); 913 905 return generator.moveToDestinationIfNeeded(dst, result); 914 906 } … … 920 912 RefPtr<RegisterID> src1 = generator.emitGetScopedVar(generator.tempDestination(dst), depth, index, globalObject); 921 913 RegisterID* src2 = generator.emitNode(m_right.get()); 922 RegisterID* result = emitReadModifyAssignment(generator, generator.finalDestination(dst, src1.get()), src1.get(), src2, m_operator );914 RegisterID* result = emitReadModifyAssignment(generator, generator.finalDestination(dst, src1.get()), src1.get(), src2, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor())); 923 915 generator.emitPutScopedVar(depth, index, result, globalObject); 924 916 return result; … … 930 922 RegisterID* src2 = generator.emitNode(m_right.get()); 931 923 generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset); 932 RegisterID* result = emitReadModifyAssignment(generator, generator.finalDestination(dst, src1.get()), src1.get(), src2, m_operator );924 RegisterID* result = emitReadModifyAssignment(generator, generator.finalDestination(dst, src1.get()), src1.get(), src2, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor())); 933 925 return generator.emitPutById(base.get(), m_ident, result); 934 926 } … … 986 978 RefPtr<RegisterID> value = generator.emitGetById(generator.tempDestination(dst), base.get(), m_ident); 987 979 RegisterID* change = generator.emitNode(m_right.get()); 988 RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), change, m_operator );980 RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), change, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor())); 989 981 990 982 generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset); … … 1021 1013 RefPtr<RegisterID> value = generator.emitGetByVal(generator.tempDestination(dst), base.get(), property.get()); 1022 1014 RegisterID* change = generator.emitNode(m_right.get()); 1023 RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), change, m_operator );1015 RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), change, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor())); 1024 1016 1025 1017 generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset); … … 1568 1560 RefPtr<RegisterID> clauseVal = generator.newTemporary(); 1569 1561 generator.emitNode(clauseVal.get(), list->getClause()->expr()); 1570 generator.emitBinaryOp(op_stricteq, clauseVal.get(), clauseVal.get(), switchExpression );1562 generator.emitBinaryOp(op_stricteq, clauseVal.get(), clauseVal.get(), switchExpression, OperandTypes()); 1571 1563 labelVector.append(generator.newLabel()); 1572 1564 generator.emitJumpIfTrue(clauseVal.get(), labelVector[labelVector.size() - 1].get()); … … 1576 1568 RefPtr<RegisterID> clauseVal = generator.newTemporary(); 1577 1569 generator.emitNode(clauseVal.get(), list->getClause()->expr()); 1578 generator.emitBinaryOp(op_stricteq, clauseVal.get(), clauseVal.get(), switchExpression );1570 generator.emitBinaryOp(op_stricteq, clauseVal.get(), clauseVal.get(), switchExpression, OperandTypes()); 1579 1571 labelVector.append(generator.newLabel()); 1580 1572 generator.emitJumpIfTrue(clauseVal.get(), labelVector[labelVector.size() - 1].get());
Note:
See TracChangeset
for help on using the changeset viewer.