| Index: src/compilation-cache.cc
|
| ===================================================================
|
| --- src/compilation-cache.cc (revision 1404)
|
| +++ src/compilation-cache.cc (working copy)
|
| @@ -60,31 +60,8 @@
|
| }
|
|
|
|
|
| -// We only re-use a cached function for some script source code if the
|
| -// script originates from the same places. This is to avoid issues
|
| -// when reporting errors, etc.
|
| -static bool HasOrigin(Handle<JSFunction> boilerplate,
|
| - Handle<Object> name,
|
| - int line_offset,
|
| - int column_offset) {
|
| - Handle<Script> script =
|
| - Handle<Script>(Script::cast(boilerplate->shared()->script()));
|
| - // If the script name isn't set, the boilerplate script should have
|
| - // an undefined name to have the same origin.
|
| - if (name.is_null()) {
|
| - return script->name()->IsUndefined();
|
| - }
|
| - // Do the fast bailout checks first.
|
| - if (line_offset != script->line_offset()->value()) return false;
|
| - if (column_offset != script->column_offset()->value()) return false;
|
| - // Check that both names are strings. If not, no match.
|
| - if (!name->IsString() || !script->name()->IsString()) return false;
|
| - // Compare the two name strings for equality.
|
| - return String::cast(*name)->Equals(String::cast(script->name()));
|
| -}
|
| -
|
| -
|
| 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
|
| @@ -92,7 +69,7 @@
|
| Object* result;
|
| { HandleScope scope;
|
| Handle<CompilationCacheTable> table = GetTable(entry);
|
| - result = table->Lookup(*source);
|
| + result = table->LookupEval(*source, *context);
|
| }
|
| if (result->IsJSFunction()) {
|
| return Handle<JSFunction>(JSFunction::cast(result));
|
| @@ -102,21 +79,20 @@
|
| }
|
|
|
|
|
| -static Handle<JSFunction> Lookup(Handle<String> source,
|
| - Handle<Context> context,
|
| - CompilationCache::Entry entry) {
|
| +static Handle<FixedArray> Lookup(Handle<String> source,
|
| + JSRegExp::Flags flags) {
|
| // 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);
|
| + Handle<CompilationCacheTable> table = GetTable(CompilationCache::REGEXP);
|
| + result = table->LookupRegExp(*source, flags);
|
| }
|
| - if (result->IsJSFunction()) {
|
| - return Handle<JSFunction>(JSFunction::cast(result));
|
| + if (result->IsFixedArray()) {
|
| + return Handle<FixedArray>(FixedArray::cast(result));
|
| } else {
|
| - return Handle<JSFunction>::null();
|
| + return Handle<FixedArray>::null();
|
| }
|
| }
|
|
|
| @@ -125,16 +101,10 @@
|
| Handle<Object> name,
|
| int line_offset,
|
| int column_offset) {
|
| - Handle<JSFunction> result = Lookup(source, SCRIPT);
|
| - if (result.is_null()) {
|
| - Counters::compilation_cache_misses.Increment();
|
| - } else if (HasOrigin(result, name, line_offset, column_offset)) {
|
| - Counters::compilation_cache_hits.Increment();
|
| - } else {
|
| - result = Handle<JSFunction>::null();
|
| - Counters::compilation_cache_misses.Increment();
|
| - }
|
| - return result;
|
| + // TODO(xxx): Start caching scripts again but make it local to a
|
| + // global context to avoid sharing code between independent
|
| + // environments.
|
| + return Handle<JSFunction>::null();
|
| }
|
|
|
|
|
| @@ -152,20 +122,31 @@
|
| }
|
|
|
|
|
| -void CompilationCache::PutFunction(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));
|
| +Handle<FixedArray> CompilationCache::LookupRegExp(Handle<String> source,
|
| + JSRegExp::Flags flags) {
|
| + Handle<FixedArray> result = Lookup(source, flags);
|
| + if (result.is_null()) {
|
| + Counters::compilation_cache_misses.Increment();
|
| + } else {
|
| + Counters::compilation_cache_hits.Increment();
|
| + }
|
| + return result;
|
| }
|
|
|
|
|
| -void CompilationCache::PutEvalFunction(Handle<String> source,
|
| - Handle<Context> context,
|
| - Entry entry,
|
| - Handle<JSFunction> boilerplate) {
|
| +void CompilationCache::PutScript(Handle<String> source,
|
| + Entry entry,
|
| + Handle<JSFunction> boilerplate) {
|
| + // TODO(xxx): Start caching scripts again but make it local to a
|
| + // global context to avoid sharing code between independent
|
| + // environments.
|
| +}
|
| +
|
| +
|
| +void CompilationCache::PutEval(Handle<String> source,
|
| + Handle<Context> context,
|
| + Entry entry,
|
| + Handle<JSFunction> boilerplate) {
|
| HandleScope scope;
|
| ASSERT(boilerplate->IsBoilerplate());
|
| Handle<CompilationCacheTable> table = GetTable(entry);
|
| @@ -173,20 +154,7 @@
|
| }
|
|
|
|
|
| -Handle<FixedArray> CompilationCache::LookupRegExp(Handle<String> source,
|
| - JSRegExp::Flags flags) {
|
| - Handle<CompilationCacheTable> table = GetTable(REGEXP);
|
| - Object* result = table->LookupRegExp(*source, flags);
|
| - if (result->IsFixedArray()) {
|
| - Counters::regexp_cache_hits.Increment();
|
| - return Handle<FixedArray>(FixedArray::cast(result));
|
| - } else {
|
| - Counters::regexp_cache_misses.Increment();
|
| - return Handle<FixedArray>();
|
| - }
|
| -}
|
|
|
| -
|
| void CompilationCache::PutRegExp(Handle<String> source,
|
| JSRegExp::Flags flags,
|
| Handle<FixedArray> data) {
|
|
|