| Index: runtime/vm/code_patcher_ia32_test.cc
|
| ===================================================================
|
| --- runtime/vm/code_patcher_ia32_test.cc (revision 655)
|
| +++ runtime/vm/code_patcher_ia32_test.cc (working copy)
|
| @@ -6,8 +6,10 @@
|
| #if defined(TARGET_ARCH_IA32)
|
|
|
| #include "vm/assembler.h"
|
| +#include "vm/code_generator.h"
|
| #include "vm/code_patcher.h"
|
| #include "vm/dart_entry.h"
|
| +#include "vm/ic_data.h"
|
| #include "vm/instructions.h"
|
| #include "vm/native_entry.h"
|
| #include "vm/native_entry_test.h"
|
| @@ -79,6 +81,38 @@
|
| }
|
|
|
|
|
| +ASSEMBLER_TEST_GENERATE(IcDataAccess, assembler) {
|
| + const String& function_name = String::Handle(String::New("Vermicelles"));
|
| + ICData ic_data(function_name, 1);
|
| + EXPECT(!Array::Handle(ic_data.data()).IsNull());
|
| + __ LoadObject(ECX, Array::ZoneHandle(ic_data.data()));
|
| + __ LoadObject(EDX, CodeGenerator::ArgumentsDescriptor(1, Array::Handle()));
|
| + __ call(&StubCode::CallInstanceFunctionLabel());
|
| + __ ret();
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(IcDataAccess, entry) {
|
| + uword return_address = entry + CodePatcher::InstanceCallSizeInBytes();
|
| + const Array& array = Array::Handle(
|
| + CodePatcher::GetInstanceCallIcDataAt(return_address));
|
| + EXPECT(!array.IsNull());
|
| + ICData ic_data(array);
|
| + EXPECT_STREQ("Vermicelles",
|
| + String::Handle(ic_data.FunctionName()).ToCString());
|
| + EXPECT_EQ(1, ic_data.NumberOfArgumentsChecked());
|
| + EXPECT_EQ(0, ic_data.NumberOfChecks());
|
| + const String& new_function_name = String::Handle(String::New("Rigi"));
|
| + ICData new_ic_data(new_function_name, 1);
|
| + EXPECT_STREQ("Rigi", String::Handle(new_ic_data.FunctionName()).ToCString());
|
| + CodePatcher::SetInstanceCallIcDataAt(return_address,
|
| + Array::ZoneHandle(new_ic_data.data()));
|
| + const Array& new_array = Array::Handle(
|
| + CodePatcher::GetInstanceCallIcDataAt(return_address));
|
| + ICData test_ic_data(new_array);
|
| + EXPECT_STREQ("Rigi", String::Handle(test_ic_data.FunctionName()).ToCString());
|
| +}
|
| +
|
| } // namespace dart
|
|
|
| #endif // TARGET_ARCH_IA32
|
|
|