Changeset 149247 in webkit for trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
- Timestamp:
- Apr 27, 2013, 4:14:04 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r149236 r149247 602 602 // ------------------------------ PostfixNode ---------------------------------- 603 603 604 static RegisterID* emit PreIncOrDec(BytecodeGenerator& generator, RegisterID* srcDst, Operator oper)605 { 606 return (oper == OpPlusPlus) ? generator.emit PreInc(srcDst) : generator.emitPreDec(srcDst);604 static RegisterID* emitIncOrDec(BytecodeGenerator& generator, RegisterID* srcDst, Operator oper) 605 { 606 return (oper == OpPlusPlus) ? generator.emitInc(srcDst) : generator.emitDec(srcDst); 607 607 } 608 608 609 609 static RegisterID* emitPostIncOrDec(BytecodeGenerator& generator, RegisterID* dst, RegisterID* srcDst, Operator oper) 610 610 { 611 if (srcDst == dst) 612 return generator.emitToJSNumber(dst, srcDst); 613 return (oper == OpPlusPlus) ? generator.emitPostInc(dst, srcDst) : generator.emitPostDec(dst, srcDst); 611 if (dst == srcDst) 612 return generator.emitToNumber(generator.finalDestination(dst), srcDst); 613 RefPtr<RegisterID> tmp = generator.emitToNumber(generator.tempDestination(dst), srcDst); 614 emitIncOrDec(generator, srcDst, oper); 615 return generator.moveToDestinationIfNeeded(dst, tmp.get()); 614 616 } 615 617 … … 625 627 ResolveResult resolveResult = generator.resolve(ident); 626 628 627 if (Re gisterID*local = resolveResult.local()) {629 if (RefPtr<RegisterID> local = resolveResult.local()) { 628 630 if (resolveResult.isReadOnly()) { 629 631 generator.emitReadOnlyExceptionIfNeeded(); 630 return generator.emitToJSNumber(generator.finalDestination(dst), local);632 local = generator.emitMove(generator.tempDestination(dst), local.get()); 631 633 } 632 return emitPostIncOrDec(generator, generator.finalDestination(dst), local , m_operator);634 return emitPostIncOrDec(generator, generator.finalDestination(dst), local.get(), m_operator); 633 635 } 634 636 … … 806 808 807 809 ResolveResult resolveResult = generator.resolve(ident); 808 if (Re gisterID*local = resolveResult.local()) {810 if (RefPtr<RegisterID> local = resolveResult.local()) { 809 811 if (resolveResult.isReadOnly()) { 810 812 generator.emitReadOnlyExceptionIfNeeded(); 811 if (dst == generator.ignoredResult()) 812 return generator.emitToJSNumber(generator.newTemporary(), local); 813 RefPtr<RegisterID> r0 = generator.emitLoad(generator.tempDestination(dst), (m_operator == OpPlusPlus) ? 1.0 : -1.0); 814 generator.emitBinaryOp(op_add, r0.get(), local, r0.get(), OperandTypes()); 815 return generator.moveToDestinationIfNeeded(dst, r0.get()); 813 local = generator.emitMove(generator.tempDestination(dst), local.get()); 816 814 } 817 emit PreIncOrDec(generator, local, m_operator);818 return generator.moveToDestinationIfNeeded(dst, local );815 emitIncOrDec(generator, local.get(), m_operator); 816 return generator.moveToDestinationIfNeeded(dst, local.get()); 819 817 } 820 818 821 819 if (resolveResult.isStatic() && !resolveResult.isReadOnly()) { 822 820 RefPtr<RegisterID> propDst = generator.emitGetStaticVar(generator.tempDestination(dst), resolveResult, ident); 823 emit PreIncOrDec(generator, propDst.get(), m_operator);821 emitIncOrDec(generator, propDst.get(), m_operator); 824 822 generator.emitPutStaticVar(resolveResult, ident, propDst.get()); 825 823 return generator.moveToDestinationIfNeeded(dst, propDst.get()); … … 830 828 NonlocalResolveInfo resolveVerifier; 831 829 RefPtr<RegisterID> base = generator.emitResolveWithBaseForPut(generator.newTemporary(), propDst.get(), resolveResult, ident, resolveVerifier); 832 emit PreIncOrDec(generator, propDst.get(), m_operator);830 emitIncOrDec(generator, propDst.get(), m_operator); 833 831 generator.emitPutToBase(base.get(), ident, propDst.get(), resolveVerifier); 834 832 return generator.moveToDestinationIfNeeded(dst, propDst.get()); … … 848 846 generator.emitExpressionInfo(bracketAccessor->divot(), bracketAccessor->startOffset(), bracketAccessor->endOffset()); 849 847 RegisterID* value = generator.emitGetByVal(propDst.get(), base.get(), property.get()); 850 emit PreIncOrDec(generator, value, m_operator);848 emitIncOrDec(generator, value, m_operator); 851 849 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 852 850 generator.emitPutByVal(base.get(), property.get(), value); … … 866 864 generator.emitExpressionInfo(dotAccessor->divot(), dotAccessor->startOffset(), dotAccessor->endOffset()); 867 865 RegisterID* value = generator.emitGetById(propDst.get(), base.get(), ident); 868 emit PreIncOrDec(generator, value, m_operator);866 emitIncOrDec(generator, value, m_operator); 869 867 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 870 868 generator.emitPutById(base.get(), ident, value);
Note:
See TracChangeset
for help on using the changeset viewer.