| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_X64. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_X64. |
| 6 #if defined(TARGET_ARCH_X64) | 6 #if defined(TARGET_ARCH_X64) |
| 7 | 7 |
| 8 #include "vm/code_generator.h" | 8 #include "vm/code_generator.h" |
| 9 | 9 |
| 10 #include "lib/error.h" | 10 #include "lib/error.h" |
| (...skipping 2472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2483 | 2483 |
| 2484 // Pop out all the other arguments on the stack. | 2484 // Pop out all the other arguments on the stack. |
| 2485 __ addq(RSP, Immediate(num_args * kWordSize)); | 2485 __ addq(RSP, Immediate(num_args * kWordSize)); |
| 2486 } | 2486 } |
| 2487 | 2487 |
| 2488 | 2488 |
| 2489 // Expects receiver on stack, returns result in RAX.. | 2489 // Expects receiver on stack, returns result in RAX.. |
| 2490 void CodeGenerator::GenerateInstanceGetterCall(intptr_t node_id, | 2490 void CodeGenerator::GenerateInstanceGetterCall(intptr_t node_id, |
| 2491 intptr_t token_index, | 2491 intptr_t token_index, |
| 2492 const String& field_name) { | 2492 const String& field_name) { |
| 2493 const String& getter_name = String::ZoneHandle(Field::GetterName(field_name)); | 2493 const String& getter_name = |
| 2494 String::ZoneHandle(Field::GetterSymbol(field_name)); |
| 2494 const int kNumberOfArguments = 1; | 2495 const int kNumberOfArguments = 1; |
| 2495 const Array& kNoArgumentNames = Array::Handle(); | 2496 const Array& kNoArgumentNames = Array::Handle(); |
| 2496 const int kNumArgumentsChecked = 1; | 2497 const int kNumArgumentsChecked = 1; |
| 2497 GenerateInstanceCall(node_id, | 2498 GenerateInstanceCall(node_id, |
| 2498 token_index, | 2499 token_index, |
| 2499 getter_name, | 2500 getter_name, |
| 2500 kNumberOfArguments, | 2501 kNumberOfArguments, |
| 2501 kNoArgumentNames, | 2502 kNoArgumentNames, |
| 2502 kNumArgumentsChecked); | 2503 kNumArgumentsChecked); |
| 2503 } | 2504 } |
| 2504 | 2505 |
| 2505 | 2506 |
| 2506 // Call to the instance getter. | 2507 // Call to the instance getter. |
| 2507 void CodeGenerator::VisitInstanceGetterNode(InstanceGetterNode* node) { | 2508 void CodeGenerator::VisitInstanceGetterNode(InstanceGetterNode* node) { |
| 2508 node->receiver()->Visit(this); | 2509 node->receiver()->Visit(this); |
| 2509 MarkDeoptPoint(node->id(), node->token_index()); | 2510 MarkDeoptPoint(node->id(), node->token_index()); |
| 2510 GenerateInstanceGetterCall(node->id(), | 2511 GenerateInstanceGetterCall(node->id(), |
| 2511 node->token_index(), | 2512 node->token_index(), |
| 2512 node->field_name()); | 2513 node->field_name()); |
| 2513 if (IsResultNeeded(node)) { | 2514 if (IsResultNeeded(node)) { |
| 2514 __ pushq(RAX); | 2515 __ pushq(RAX); |
| 2515 } | 2516 } |
| 2516 } | 2517 } |
| 2517 | 2518 |
| 2518 | 2519 |
| 2519 // Expects receiver and value on stack. | 2520 // Expects receiver and value on stack. |
| 2520 void CodeGenerator::GenerateInstanceSetterCall(intptr_t node_id, | 2521 void CodeGenerator::GenerateInstanceSetterCall(intptr_t node_id, |
| 2521 intptr_t token_index, | 2522 intptr_t token_index, |
| 2522 const String& field_name) { | 2523 const String& field_name) { |
| 2523 const String& setter_name = String::ZoneHandle(Field::SetterName(field_name)); | 2524 const String& setter_name = |
| 2525 String::ZoneHandle(Field::SetterSymbol(field_name)); |
| 2524 const int kNumberOfArguments = 2; // receiver + value. | 2526 const int kNumberOfArguments = 2; // receiver + value. |
| 2525 const Array& kNoArgumentNames = Array::Handle(); | 2527 const Array& kNoArgumentNames = Array::Handle(); |
| 2526 const int kNumArgumentsChecked = 1; | 2528 const int kNumArgumentsChecked = 1; |
| 2527 GenerateInstanceCall(node_id, | 2529 GenerateInstanceCall(node_id, |
| 2528 token_index, | 2530 token_index, |
| 2529 setter_name, | 2531 setter_name, |
| 2530 kNumberOfArguments, | 2532 kNumberOfArguments, |
| 2531 kNoArgumentNames, | 2533 kNoArgumentNames, |
| 2532 kNumArgumentsChecked); | 2534 kNumArgumentsChecked); |
| 2533 } | 2535 } |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2798 const Error& error = Error::Handle( | 2800 const Error& error = Error::Handle( |
| 2799 Parser::FormatError(script, token_index, "Error", format, args)); | 2801 Parser::FormatError(script, token_index, "Error", format, args)); |
| 2800 va_end(args); | 2802 va_end(args); |
| 2801 Isolate::Current()->long_jump_base()->Jump(1, error); | 2803 Isolate::Current()->long_jump_base()->Jump(1, error); |
| 2802 UNREACHABLE(); | 2804 UNREACHABLE(); |
| 2803 } | 2805 } |
| 2804 | 2806 |
| 2805 } // namespace dart | 2807 } // namespace dart |
| 2806 | 2808 |
| 2807 #endif // defined TARGET_ARCH_X64 | 2809 #endif // defined TARGET_ARCH_X64 |
| OLD | NEW |