| Index: vm/code_descriptors_test.cc
|
| ===================================================================
|
| --- vm/code_descriptors_test.cc (revision 6302)
|
| +++ vm/code_descriptors_test.cc (working copy)
|
| @@ -11,7 +11,6 @@
|
| #include "vm/code_descriptors.h"
|
| #include "vm/code_generator.h"
|
| #include "vm/dart_entry.h"
|
| -#include "vm/native_entry.h"
|
| #include "vm/unit_test.h"
|
|
|
| namespace dart {
|
| @@ -90,16 +89,16 @@
|
| // Validate the first stack map entry.
|
| stack_map ^= stack_map_list.At(0);
|
| EXPECT(stack_map.IsObject(0));
|
| - EXPECT_EQ(0, stack_map.MinimumBitOffset());
|
| - EXPECT_EQ(0, stack_map.MaximumBitOffset());
|
| + EXPECT_EQ(0, stack_map.Minimum());
|
| + EXPECT_EQ(0, stack_map.Maximum());
|
|
|
| // Validate the second stack map entry.
|
| stack_map ^= stack_map_list.At(1);
|
| EXPECT(stack_map.IsObject(0));
|
| EXPECT(!stack_map.IsObject(1));
|
| EXPECT(stack_map.IsObject(2));
|
| - EXPECT_EQ(0, stack_map.MinimumBitOffset());
|
| - EXPECT_EQ(2, stack_map.MaximumBitOffset());
|
| + EXPECT_EQ(0, stack_map.Minimum());
|
| + EXPECT_EQ(2, stack_map.Maximum());
|
|
|
| // Validate the third stack map entry.
|
| stack_map ^= stack_map_list.At(2);
|
| @@ -108,8 +107,8 @@
|
| for (intptr_t i = 2; i <= 5; i++) {
|
| EXPECT(stack_map.IsObject(i));
|
| }
|
| - EXPECT_EQ(0, stack_map.MinimumBitOffset());
|
| - EXPECT_EQ(5, stack_map.MaximumBitOffset());
|
| + EXPECT_EQ(0, stack_map.Minimum());
|
| + EXPECT_EQ(5, stack_map.Maximum());
|
|
|
| // Validate the fourth stack map entry.
|
| stack_map ^= stack_map_list.At(3);
|
| @@ -122,8 +121,8 @@
|
| EXPECT(!stack_map.IsObject(i));
|
| }
|
| EXPECT(stack_map.IsObject(10));
|
| - EXPECT_EQ(0, stack_map.MinimumBitOffset());
|
| - EXPECT_EQ(10, stack_map.MaximumBitOffset());
|
| + EXPECT_EQ(0, stack_map.Minimum());
|
| + EXPECT_EQ(10, stack_map.Maximum());
|
| retval = true;
|
| } else {
|
| retval = false;
|
| @@ -133,86 +132,6 @@
|
| }
|
| CODEGEN_TEST_RUN(StackmapCodegen, Smi::New(1))
|
|
|
| -
|
| -DEFINE_NATIVE_ENTRY(NativeFunc, 2) {
|
| - GET_NATIVE_ARGUMENT(Smi, i, arguments->At(0));
|
| - GET_NATIVE_ARGUMENT(Smi, k, arguments->At(1));
|
| - EXPECT_EQ(10, i.Value());
|
| - EXPECT_EQ(20, k.Value());
|
| - Isolate::Current()->heap()->CollectAllGarbage();
|
| -}
|
| -
|
| -
|
| -static Dart_NativeFunction native_resolver(Dart_Handle name,
|
| - int argument_count) {
|
| - return reinterpret_cast<Dart_NativeFunction>(&DN_NativeFunc);
|
| -}
|
| -
|
| -
|
| -TEST_CASE(StackmapGC) {
|
| - const char* kScriptChars =
|
| - "class A {"
|
| - " static void func(var i, var k) native 'NativeFunc';"
|
| - " static foo() {"
|
| - " var i;"
|
| - " var s1;"
|
| - " var k;"
|
| - " var s2;"
|
| - " var s3;"
|
| - " i = 10; s1 = 'abcd'; k = 20; s2 = 'B'; s3 = 'C';"
|
| - " func(i, k);"
|
| - " return i + k; }"
|
| - " static int moo() {"
|
| - " var i = A.foo();"
|
| - " Expect.equals(30, i);"
|
| - " }\n"
|
| - "}\n";
|
| - // First setup the script and compile the script.
|
| - TestCase::LoadTestScript(kScriptChars, native_resolver);
|
| - const String& name = String::Handle(String::New(TestCase::url()));
|
| - const Library& lib = Library::Handle(Library::LookupLibrary(name));
|
| - EXPECT(!lib.IsNull());
|
| - Class& cls = Class::Handle(
|
| - lib.LookupClass(String::Handle(String::NewSymbol("A"))));
|
| - EXPECT(!cls.IsNull());
|
| -
|
| - // Now compile the two functions 'A.foo' and 'A.moo'
|
| - String& function_moo_name = String::Handle(String::New("moo"));
|
| - Function& function_moo =
|
| - Function::Handle(cls.LookupStaticFunction(function_moo_name));
|
| - EXPECT(CompilerTest::TestCompileFunction(function_moo));
|
| - EXPECT(function_moo.HasCode());
|
| -
|
| - String& function_foo_name = String::Handle(String::New("foo"));
|
| - Function& function_foo =
|
| - Function::Handle(cls.LookupStaticFunction(function_foo_name));
|
| - EXPECT(CompilerTest::TestCompileFunction(function_foo));
|
| - EXPECT(function_foo.HasCode());
|
| -
|
| - // Build and setup a stackmap for function 'A.foo' in order to test the
|
| - // traversal of stack maps when a GC happens.
|
| - StackmapBuilder* builder = new StackmapBuilder();
|
| - EXPECT(builder != NULL);
|
| - builder->SetSlotAsValue(0); // var i.
|
| - builder->SetSlotAsObject(1); // var s1.
|
| - builder->SetSlotAsValue(2); // var k.
|
| - builder->SetSlotAsObject(3); // var s2.
|
| - builder->SetSlotAsObject(4); // var s3.
|
| - builder->AddEntry(0); // Add a stack map entry at pc offset 0.
|
| - const Code& code = Code::Handle(function_foo.unoptimized_code());
|
| - const Array& stack_maps = Array::Handle(builder->FinalizeStackmaps(code));
|
| - code.set_stackmaps(stack_maps);
|
| -
|
| - // Now invoke 'A.moo' and it will trigger a GC when the native function
|
| - // is called, this should then cause the stack map of function 'A.foo'
|
| - // to be traversed and the appropriate objects visited.
|
| - GrowableArray<const Object*> arguments;
|
| - const Array& kNoArgumentNames = Array::Handle();
|
| - Object& result = Object::Handle();
|
| - result = DartEntry::InvokeStatic(function_foo, arguments, kNoArgumentNames);
|
| - EXPECT(!result.IsError());
|
| -}
|
| -
|
| } // namespace dart
|
|
|
| #endif // defined TARGET_ARCH_IA32 || defined(TARGET_ARCH_X64)
|
|
|