| Index: test/cctest/test-heap.cc
|
| ===================================================================
|
| --- test/cctest/test-heap.cc (revision 4799)
|
| +++ test/cctest/test-heap.cc (working copy)
|
| @@ -957,3 +957,42 @@
|
| // Check that region covering inobject property 1 is marked dirty.
|
| CHECK(page->IsRegionDirty(clone_addr + (object_size - kPointerSize)));
|
| }
|
| +
|
| +TEST(TestCodeFlushing) {
|
| + i::FLAG_allow_natives_syntax = true;
|
| + InitializeVM();
|
| + v8::HandleScope scope;
|
| + const char* source = "function foo() {"
|
| + " var x = 42;"
|
| + " var y = 42;"
|
| + " var z = x + y;"
|
| + "};"
|
| + "foo()";
|
| + Handle<String> foo_name = Factory::LookupAsciiSymbol("foo");
|
| +
|
| + // This compile will add the code to the compilation cache.
|
| + CompileRun(source);
|
| +
|
| + // Check function is compiled.
|
| + Object* func_value = Top::context()->global()->GetProperty(*foo_name);
|
| + CHECK(func_value->IsJSFunction());
|
| + Handle<JSFunction> function(JSFunction::cast(func_value));
|
| + CHECK(function->shared()->is_compiled());
|
| +
|
| + Heap::CollectAllGarbage(true);
|
| + Heap::CollectAllGarbage(true);
|
| +
|
| + // foo should still be in the compilation cache and therefore not
|
| + // have been removed.
|
| + CHECK(function->shared()->is_compiled());
|
| + Heap::CollectAllGarbage(true);
|
| + Heap::CollectAllGarbage(true);
|
| + Heap::CollectAllGarbage(true);
|
| + Heap::CollectAllGarbage(true);
|
| +
|
| + // foo should no longer be in the compilation cache
|
| + CHECK(!function->shared()->is_compiled());
|
| + // Call foo to get it recompiled.
|
| + CompileRun("foo()");
|
| + CHECK(function->shared()->is_compiled());
|
| +}
|
|
|