static Handle<JSFunction> Lookup(Handle<String> source,
CompilationCache::Entry entry) {
- Handle<CompilationCacheTable> table = GetTable(entry);
- Object* result = table->Lookup(*source);
+ // Make sure not to leak the table into the surrounding handle
+ // scope. Otherwise, we risk keeping old tables around even after
+ // having cleared the cache.
+ Object* result;
+ { HandleScope scope;
+ Handle<CompilationCacheTable> table = GetTable(entry);
+ result = table->Lookup(*source);
+ }
if (result->IsJSFunction()) {
return Handle<JSFunction>(JSFunction::cast(result));
} else {
void CompilationCache::Associate(Handle<String> source,
Entry entry,
Handle<JSFunction> boilerplate) {
+ HandleScope scope;
ASSERT(boilerplate->IsBoilerplate());
Handle<CompilationCacheTable> table = GetTable(entry);
CALL_HEAP_FUNCTION_VOID(table->Put(*source, *boilerplate));
int TestAsciiResource::dispose_count = 0;
-TEST(ScriptUsingStringResource) {
+THREADED_TEST(ScriptUsingStringResource) {
TestResource::dispose_count = 0;
const char* c_source = "1 + 2 * 3";
uint16_t* two_byte_source = AsciiToTwoByteString(c_source);
}
-TEST(ScriptUsingAsciiStringResource) {
+THREADED_TEST(ScriptUsingAsciiStringResource) {
TestAsciiResource::dispose_count = 0;
const char* c_source = "1 + 2 * 3";
{