OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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_IA32. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_IA32. |
6 #if defined(TARGET_ARCH_IA32) | 6 #if defined(TARGET_ARCH_IA32) |
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 1629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1640 __ CompareObject(ECX, bool_class); | 1640 __ CompareObject(ECX, bool_class); |
1641 __ j(EQUAL, &done, Assembler::kNearJump); | 1641 __ j(EQUAL, &done, Assembler::kNearJump); |
1642 | 1642 |
1643 __ Bind(&runtime_call); | 1643 __ Bind(&runtime_call); |
1644 const Object& result = Object::ZoneHandle(); | 1644 const Object& result = Object::ZoneHandle(); |
1645 __ PushObject(result); // Make room for the result of the runtime call. | 1645 __ PushObject(result); // Make room for the result of the runtime call. |
1646 const Immediate location = | 1646 const Immediate location = |
1647 Immediate(reinterpret_cast<int32_t>(Smi::New(token_index))); | 1647 Immediate(reinterpret_cast<int32_t>(Smi::New(token_index))); |
1648 __ pushl(location); // Push the source location. | 1648 __ pushl(location); // Push the source location. |
1649 __ pushl(EAX); // Push the source object. | 1649 __ pushl(EAX); // Push the source object. |
1650 // TODO(regis): Once we enforce the rule prohibiting subtyping of bool, we | 1650 GenerateCallRuntime(token_index, kConditionTypeErrorRuntimeEntry); |
1651 // should rename the runtime call 'ConditionTypeCheck' to | |
1652 // 'ConditionTypeError'. | |
1653 GenerateCallRuntime(token_index, kConditionTypeCheckRuntimeEntry); | |
1654 // Pop the parameters supplied to the runtime entry. The result of the | 1651 // Pop the parameters supplied to the runtime entry. The result of the |
1655 // type check runtime call is the checked value. | 1652 // type check runtime call is the checked value. |
1656 __ addl(ESP, Immediate(3 * kWordSize)); | 1653 __ addl(ESP, Immediate(3 * kWordSize)); |
1657 | 1654 |
1658 __ Bind(&done); | 1655 __ Bind(&done); |
1659 } | 1656 } |
1660 | 1657 |
1661 | 1658 |
1662 void CodeGenerator::VisitComparisonNode(ComparisonNode* node) { | 1659 void CodeGenerator::VisitComparisonNode(ComparisonNode* node) { |
1663 const Bool& bool_true = Bool::ZoneHandle(Bool::True()); | 1660 const Bool& bool_true = Bool::ZoneHandle(Bool::True()); |
(...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2641 const Class& cls = Class::Handle(parsed_function_.function().owner()); | 2638 const Class& cls = Class::Handle(parsed_function_.function().owner()); |
2642 const Script& script = Script::Handle(cls.script()); | 2639 const Script& script = Script::Handle(cls.script()); |
2643 Parser::ReportMsg(script, token_index, "Error", error_msg, format, args); | 2640 Parser::ReportMsg(script, token_index, "Error", error_msg, format, args); |
2644 Isolate::Current()->long_jump_base()->Jump(1, error_msg); | 2641 Isolate::Current()->long_jump_base()->Jump(1, error_msg); |
2645 UNREACHABLE(); | 2642 UNREACHABLE(); |
2646 } | 2643 } |
2647 | 2644 |
2648 } // namespace dart | 2645 } // namespace dart |
2649 | 2646 |
2650 #endif // defined TARGET_ARCH_IA32 | 2647 #endif // defined TARGET_ARCH_IA32 |
OLD | NEW |