| Index: runtime/vm/code_generator_ia32.cc
|
| ===================================================================
|
| --- runtime/vm/code_generator_ia32.cc (revision 7300)
|
| +++ runtime/vm/code_generator_ia32.cc (working copy)
|
| @@ -1179,77 +1179,6 @@
|
| }
|
|
|
|
|
| -void CodeGenerator::VisitIncrOpInstanceFieldNode(
|
| - IncrOpInstanceFieldNode* node) {
|
| - ASSERT((node->kind() == Token::kINCR) || (node->kind() == Token::kDECR));
|
| - node->receiver()->Visit(this);
|
| - __ pushl(Address(ESP, 0)); // Duplicate receiver (preserve for setter).
|
| - MarkDeoptPoint(node->getter_id(), node->token_index());
|
| - GenerateInstanceGetterCall(node->getter_id(),
|
| - node->token_index(),
|
| - node->field_name());
|
| - // result is in EAX.
|
| - __ popl(EDX); // Get receiver.
|
| - if (!node->prefix() && IsResultNeeded(node)) {
|
| - // Preserve as result.
|
| - __ pushl(EAX); // Preserve value as result.
|
| - }
|
| - const char* operator_name = (node->kind() == Token::kINCR) ? "+" : "-";
|
| - // EAX: Value.
|
| - // EDX: Receiver.
|
| - __ pushl(EDX); // Preserve receiver.
|
| - __ pushl(EAX); // Left operand.
|
| - __ pushl(Immediate(Smi::RawValue(1))); // Right operand.
|
| - GenerateBinaryOperatorCall(node->operator_id(),
|
| - node->token_index(),
|
| - operator_name);
|
| - __ popl(EDX); // Restore receiver.
|
| - if (IsResultNeeded(node) && node->prefix()) {
|
| - // Value stored into field is the result.
|
| - __ pushl(EAX);
|
| - }
|
| - __ pushl(EDX); // Receiver.
|
| - __ pushl(EAX); // Value.
|
| - // It is not necessary to generate a type test of the assigned value here,
|
| - // because the setter will check the type of its incoming arguments.
|
| - GenerateInstanceSetterCall(node->setter_id(),
|
| - node->token_index(),
|
| - node->field_name());
|
| -}
|
| -
|
| -
|
| -void CodeGenerator::VisitIncrOpIndexedNode(IncrOpIndexedNode* node) {
|
| - ASSERT((node->kind() == Token::kINCR) || (node->kind() == Token::kDECR));
|
| - node->array()->Visit(this);
|
| - node->index()->Visit(this);
|
| - MarkDeoptPoint(node->id(), node->token_index());
|
| - // Preserve array and index for GenerateStoreIndex.
|
| - __ pushl(Address(ESP, kWordSize)); // Copy array.
|
| - __ pushl(Address(ESP, kWordSize)); // Copy index.
|
| - GenerateLoadIndexed(node->load_id(), node->token_index());
|
| - // Result is in EAX.
|
| - if (!node->prefix() && IsResultNeeded(node)) {
|
| - // Preserve EAX as result.
|
| - __ popl(EDX); // Preserved index -> EDX.
|
| - __ popl(ECX); // Preserved array -> ECX.
|
| - __ pushl(EAX); // Preserve original value from indexed load.
|
| - __ pushl(ECX); // Array.
|
| - __ pushl(EDX); // Index.
|
| - }
|
| - const char* operator_name = (node->kind() == Token::kINCR) ? "+" : "-";
|
| - __ pushl(EAX); // Left operand.
|
| - __ pushl(Immediate(Smi::RawValue(1))); // Right operand.
|
| - GenerateBinaryOperatorCall(node->operator_id(),
|
| - node->token_index(),
|
| - operator_name);
|
| - __ pushl(EAX);
|
| - // TOS(0): value, TOS(1): index, TOS(2): array.
|
| - GenerateStoreIndexed(node->store_id(),
|
| - node->token_index(),
|
| - node->prefix() && IsResultNeeded(node));
|
| -}
|
| -
|
| -
|
| static const Class* CoreClass(const char* c_name) {
|
| const String& class_name = String::Handle(String::NewSymbol(c_name));
|
| const Class& cls = Class::ZoneHandle(Library::Handle(
|
|
|