OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1683 VisitForAccumulatorValue(value); | 1683 VisitForAccumulatorValue(value); |
1684 __ Mov(x2, Operand(key->value())); | 1684 __ Mov(x2, Operand(key->value())); |
1685 __ Peek(x1, 0); | 1685 __ Peek(x1, 0); |
1686 CallStoreIC(key->LiteralFeedbackId()); | 1686 CallStoreIC(key->LiteralFeedbackId()); |
1687 PrepareForBailoutForId(key->id(), NO_REGISTERS); | 1687 PrepareForBailoutForId(key->id(), NO_REGISTERS); |
1688 } else { | 1688 } else { |
1689 VisitForEffect(value); | 1689 VisitForEffect(value); |
1690 } | 1690 } |
1691 break; | 1691 break; |
1692 } | 1692 } |
1693 // Duplicate receiver on stack. | |
1694 __ Peek(x0, 0); | |
1695 __ Push(x0); | |
1696 VisitForStackValue(key); | |
1697 VisitForStackValue(value); | |
1698 if (property->emit_store()) { | 1693 if (property->emit_store()) { |
| 1694 // Duplicate receiver on stack. |
| 1695 __ Peek(x0, 0); |
| 1696 __ Push(x0); |
| 1697 VisitForStackValue(key); |
| 1698 VisitForStackValue(value); |
1699 __ Mov(x0, Operand(Smi::FromInt(NONE))); // PropertyAttributes | 1699 __ Mov(x0, Operand(Smi::FromInt(NONE))); // PropertyAttributes |
1700 __ Push(x0); | 1700 __ Push(x0); |
1701 __ CallRuntime(Runtime::kSetProperty, 4); | 1701 __ CallRuntime(Runtime::kSetProperty, 4); |
1702 } else { | 1702 } else { |
1703 __ Drop(3); | 1703 VisitForEffect(key); |
| 1704 VisitForEffect(value); |
1704 } | 1705 } |
1705 break; | 1706 break; |
1706 case ObjectLiteral::Property::PROTOTYPE: | 1707 case ObjectLiteral::Property::PROTOTYPE: |
1707 // Duplicate receiver on stack. | |
1708 __ Peek(x0, 0); | |
1709 // TODO(jbramley): This push shouldn't be necessary if we don't call the | |
1710 // runtime below. In that case, skip it. | |
1711 __ Push(x0); | |
1712 VisitForStackValue(value); | |
1713 if (property->emit_store()) { | 1708 if (property->emit_store()) { |
| 1709 // Duplicate receiver on stack. |
| 1710 __ Peek(x0, 0); |
| 1711 __ Push(x0); |
| 1712 VisitForStackValue(value); |
1714 __ CallRuntime(Runtime::kSetPrototype, 2); | 1713 __ CallRuntime(Runtime::kSetPrototype, 2); |
1715 } else { | 1714 } else { |
1716 __ Drop(2); | 1715 VisitForEffect(value); |
1717 } | 1716 } |
1718 break; | 1717 break; |
1719 case ObjectLiteral::Property::GETTER: | 1718 case ObjectLiteral::Property::GETTER: |
1720 accessor_table.lookup(key)->second->getter = value; | 1719 accessor_table.lookup(key)->second->getter = value; |
1721 break; | 1720 break; |
1722 case ObjectLiteral::Property::SETTER: | 1721 case ObjectLiteral::Property::SETTER: |
1723 accessor_table.lookup(key)->second->setter = value; | 1722 accessor_table.lookup(key)->second->setter = value; |
1724 break; | 1723 break; |
1725 } | 1724 } |
1726 } | 1725 } |
(...skipping 3257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4984 return previous_; | 4983 return previous_; |
4985 } | 4984 } |
4986 | 4985 |
4987 | 4986 |
4988 #undef __ | 4987 #undef __ |
4989 | 4988 |
4990 | 4989 |
4991 } } // namespace v8::internal | 4990 } } // namespace v8::internal |
4992 | 4991 |
4993 #endif // V8_TARGET_ARCH_A64 | 4992 #endif // V8_TARGET_ARCH_A64 |
OLD | NEW |