| 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 "platform/globals.h" | 5 #include "platform/globals.h" |
| 6 | 6 |
| 7 #include "vm/assembler.h" | 7 #include "vm/assembler.h" |
| 8 #include "vm/class_finalizer.h" | 8 #include "vm/class_finalizer.h" |
| 9 #include "vm/dart_api_impl.h" | 9 #include "vm/dart_api_impl.h" |
| 10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
| (...skipping 2695 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2706 | 2706 |
| 2707 // Test for Code and Instruction object creation. | 2707 // Test for Code and Instruction object creation. |
| 2708 VM_TEST_CASE(Code) { | 2708 VM_TEST_CASE(Code) { |
| 2709 extern void GenerateIncrement(Assembler* assembler); | 2709 extern void GenerateIncrement(Assembler* assembler); |
| 2710 Assembler _assembler_; | 2710 Assembler _assembler_; |
| 2711 GenerateIncrement(&_assembler_); | 2711 GenerateIncrement(&_assembler_); |
| 2712 const Function& function = Function::Handle(CreateFunction("Test_Code")); | 2712 const Function& function = Function::Handle(CreateFunction("Test_Code")); |
| 2713 Code& code = Code::Handle(Code::FinalizeCode(function, &_assembler_)); | 2713 Code& code = Code::Handle(Code::FinalizeCode(function, &_assembler_)); |
| 2714 function.AttachCode(code); | 2714 function.AttachCode(code); |
| 2715 const Instructions& instructions = Instructions::Handle(code.instructions()); | 2715 const Instructions& instructions = Instructions::Handle(code.instructions()); |
| 2716 uword entry_point = instructions.EntryPoint(); | 2716 uword entry_point = instructions.UncheckedEntryPoint(); |
| 2717 EXPECT_EQ(instructions.raw(), Instructions::FromEntryPoint(entry_point)); | 2717 EXPECT_EQ(instructions.raw(), |
| 2718 Instructions::FromUncheckedEntryPoint(entry_point)); |
| 2718 const Object& result = Object::Handle( | 2719 const Object& result = Object::Handle( |
| 2719 DartEntry::InvokeFunction(function, Array::empty_array())); | 2720 DartEntry::InvokeFunction(function, Array::empty_array())); |
| 2720 EXPECT_EQ(1, Smi::Cast(result).Value()); | 2721 EXPECT_EQ(1, Smi::Cast(result).Value()); |
| 2721 } | 2722 } |
| 2722 | 2723 |
| 2723 | 2724 |
| 2724 // Test for immutability of generated instructions. The test crashes with a | 2725 // Test for immutability of generated instructions. The test crashes with a |
| 2725 // segmentation fault when writing into it. | 2726 // segmentation fault when writing into it. |
| 2726 VM_TEST_CASE(CodeImmutability) { | 2727 VM_TEST_CASE(CodeImmutability) { |
| 2727 extern void GenerateIncrement(Assembler* assembler); | 2728 extern void GenerateIncrement(Assembler* assembler); |
| 2728 Assembler _assembler_; | 2729 Assembler _assembler_; |
| 2729 GenerateIncrement(&_assembler_); | 2730 GenerateIncrement(&_assembler_); |
| 2730 const Function& function = Function::Handle(CreateFunction("Test_Code")); | 2731 const Function& function = Function::Handle(CreateFunction("Test_Code")); |
| 2731 Code& code = Code::Handle(Code::FinalizeCode(function, &_assembler_)); | 2732 Code& code = Code::Handle(Code::FinalizeCode(function, &_assembler_)); |
| 2732 function.AttachCode(code); | 2733 function.AttachCode(code); |
| 2733 Instructions& instructions = Instructions::Handle(code.instructions()); | 2734 Instructions& instructions = Instructions::Handle(code.instructions()); |
| 2734 uword entry_point = instructions.EntryPoint(); | 2735 uword entry_point = instructions.UncheckedEntryPoint(); |
| 2735 EXPECT_EQ(instructions.raw(), Instructions::FromEntryPoint(entry_point)); | 2736 EXPECT_EQ(instructions.raw(), |
| 2737 Instructions::FromUncheckedEntryPoint(entry_point)); |
| 2736 // Try writing into the generated code, expected to crash. | 2738 // Try writing into the generated code, expected to crash. |
| 2737 *(reinterpret_cast<char*>(entry_point) + 1) = 1; | 2739 *(reinterpret_cast<char*>(entry_point) + 1) = 1; |
| 2738 if (!FLAG_write_protect_code) { | 2740 if (!FLAG_write_protect_code) { |
| 2739 // Since this test is expected to crash, crash if write protection of code | 2741 // Since this test is expected to crash, crash if write protection of code |
| 2740 // is switched off. | 2742 // is switched off. |
| 2741 // TODO(regis, fschneider): Should this be FATAL() instead? | 2743 // TODO(regis, fschneider): Should this be FATAL() instead? |
| 2742 OS::DebugBreak(); | 2744 OS::DebugBreak(); |
| 2743 } | 2745 } |
| 2744 } | 2746 } |
| 2745 | 2747 |
| (...skipping 1973 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4719 String& test = String::Handle(); | 4721 String& test = String::Handle(); |
| 4720 String& result = String::Handle(); | 4722 String& result = String::Handle(); |
| 4721 for (size_t i = 0; i < ARRAY_SIZE(tests); i++) { | 4723 for (size_t i = 0; i < ARRAY_SIZE(tests); i++) { |
| 4722 test = String::New(tests[i].in); | 4724 test = String::New(tests[i].in); |
| 4723 result = String::ScrubName(test); | 4725 result = String::ScrubName(test); |
| 4724 EXPECT_STREQ(tests[i].out, result.ToCString()); | 4726 EXPECT_STREQ(tests[i].out, result.ToCString()); |
| 4725 } | 4727 } |
| 4726 } | 4728 } |
| 4727 | 4729 |
| 4728 } // namespace dart | 4730 } // namespace dart |
| OLD | NEW |