| Index: src/compilation-cache.cc
|
| diff --git a/src/compilation-cache.cc b/src/compilation-cache.cc
|
| index 5f8b41cf1fc5e49bbd49aa398a7e996caa840f58..64c1116c2e140f5bc7d32bdeff22f3725fa18b6d 100644
|
| --- a/src/compilation-cache.cc
|
| +++ b/src/compilation-cache.cc
|
| @@ -254,19 +254,16 @@ MaybeHandle<SharedFunctionInfo> CompilationCacheEval::Lookup(
|
| Handle<Context> context,
|
| StrictMode strict_mode,
|
| int scope_position) {
|
| + HandleScope scope(isolate());
|
| // 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.
|
| Handle<Object> result = isolate()->factory()->undefined_value();
|
| int generation;
|
| - { HandleScope scope(isolate());
|
| - Handle<Object> temp = result;
|
| - for (generation = 0; generation < generations(); generation++) {
|
| - Handle<CompilationCacheTable> table = GetTable(generation);
|
| - temp = table->LookupEval(source, context, strict_mode, scope_position);
|
| - if (temp->IsSharedFunctionInfo()) break;
|
| - }
|
| - if (temp->IsSharedFunctionInfo()) result = scope.CloseAndEscape(temp);
|
| + for (generation = 0; generation < generations(); generation++) {
|
| + Handle<CompilationCacheTable> table = GetTable(generation);
|
| + result = table->LookupEval(source, context, strict_mode, scope_position);
|
| + if (result->IsSharedFunctionInfo()) break;
|
| }
|
| if (result->IsSharedFunctionInfo()) {
|
| Handle<SharedFunctionInfo> function_info =
|
| @@ -275,7 +272,7 @@ MaybeHandle<SharedFunctionInfo> CompilationCacheEval::Lookup(
|
| Put(source, context, function_info, scope_position);
|
| }
|
| isolate()->counters()->compilation_cache_hits()->Increment();
|
| - return function_info;
|
| + return scope.CloseAndEscape(function_info);
|
| } else {
|
| isolate()->counters()->compilation_cache_misses()->Increment();
|
| return MaybeHandle<SharedFunctionInfo>();
|
| @@ -298,21 +295,16 @@ void CompilationCacheEval::Put(Handle<String> source,
|
| MaybeHandle<FixedArray> CompilationCacheRegExp::Lookup(
|
| Handle<String> source,
|
| JSRegExp::Flags flags) {
|
| + HandleScope scope(isolate());
|
| // 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.
|
| Handle<Object> result = isolate()->factory()->undefined_value();
|
| int generation;
|
| - { HandleScope scope(isolate());
|
| - Handle<Object> temp = result;
|
| - for (generation = 0; generation < generations(); generation++) {
|
| - Handle<CompilationCacheTable> table = GetTable(generation);
|
| - temp = table->LookupRegExp(source, flags);
|
| - if (temp->IsFixedArray()) {
|
| - break;
|
| - }
|
| - }
|
| - if (temp->IsSharedFunctionInfo()) result = scope.CloseAndEscape(temp);
|
| + for (generation = 0; generation < generations(); generation++) {
|
| + Handle<CompilationCacheTable> table = GetTable(generation);
|
| + result = table->LookupRegExp(source, flags);
|
| + if (result->IsFixedArray()) break;
|
| }
|
| if (result->IsFixedArray()) {
|
| Handle<FixedArray> data = Handle<FixedArray>::cast(result);
|
| @@ -320,7 +312,7 @@ MaybeHandle<FixedArray> CompilationCacheRegExp::Lookup(
|
| Put(source, flags, data);
|
| }
|
| isolate()->counters()->compilation_cache_hits()->Increment();
|
| - return data;
|
| + return scope.CloseAndEscape(data);
|
| } else {
|
| isolate()->counters()->compilation_cache_misses()->Increment();
|
| return MaybeHandle<FixedArray>();
|
|
|