| Index: src/compilation-cache.cc
 | 
| ===================================================================
 | 
| --- src/compilation-cache.cc	(revision 1344)
 | 
| +++ src/compilation-cache.cc	(working copy)
 | 
| @@ -102,6 +102,25 @@
 | 
|  }
 | 
|  
 | 
|  
 | 
| +static Handle<JSFunction> Lookup(Handle<String> source,
 | 
| +                                 Handle<Context> context,
 | 
| +                                 CompilationCache::Entry entry) {
 | 
| +  // 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->LookupEval(*source, *context);
 | 
| +  }
 | 
| +  if (result->IsJSFunction()) {
 | 
| +    return Handle<JSFunction>(JSFunction::cast(result));
 | 
| +  } else {
 | 
| +    return Handle<JSFunction>::null();
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +
 | 
|  Handle<JSFunction> CompilationCache::LookupScript(Handle<String> source,
 | 
|                                                    Handle<Object> name,
 | 
|                                                    int line_offset,
 | 
| @@ -120,9 +139,10 @@
 | 
|  
 | 
|  
 | 
|  Handle<JSFunction> CompilationCache::LookupEval(Handle<String> source,
 | 
| +                                                Handle<Context> context,
 | 
|                                                  Entry entry) {
 | 
|    ASSERT(entry == EVAL_GLOBAL || entry == EVAL_CONTEXTUAL);
 | 
| -  Handle<JSFunction> result = Lookup(source, entry);
 | 
| +  Handle<JSFunction> result = Lookup(source, context, entry);
 | 
|    if (result.is_null()) {
 | 
|      Counters::compilation_cache_misses.Increment();
 | 
|    } else {
 | 
| @@ -142,6 +162,17 @@
 | 
|  }
 | 
|  
 | 
|  
 | 
| +void CompilationCache::PutEvalFunction(Handle<String> source,
 | 
| +                                       Handle<Context> context,
 | 
| +                                       Entry entry,
 | 
| +                                       Handle<JSFunction> boilerplate) {
 | 
| +  HandleScope scope;
 | 
| +  ASSERT(boilerplate->IsBoilerplate());
 | 
| +  Handle<CompilationCacheTable> table = GetTable(entry);
 | 
| +  CALL_HEAP_FUNCTION_VOID(table->PutEval(*source, *context, *boilerplate));
 | 
| +}
 | 
| +
 | 
| +
 | 
|  Handle<FixedArray> CompilationCache::LookupRegExp(Handle<String> source,
 | 
|                                                    JSRegExp::Flags flags) {
 | 
|    Handle<CompilationCacheTable> table = GetTable(REGEXP);
 | 
| 
 |