13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2012 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file. 4a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 5a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#ifndef V8_COMPILATION_CACHE_H_ 6a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#define V8_COMPILATION_CACHE_H_ 7a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/allocation.h" 9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/handles.h" 10014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/objects.h" 11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 12a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace v8 { 13a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace internal { 14a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1544f0eee88ff00398ff7f715fab053374d808c90dSteve Block// The compilation cache consists of several generational sub-caches which uses 1644f0eee88ff00398ff7f715fab053374d808c90dSteve Block// this class as a base class. A sub-cache contains a compilation cache tables 1744f0eee88ff00398ff7f715fab053374d808c90dSteve Block// for each generation of the sub-cache. Since the same source code string has 1844f0eee88ff00398ff7f715fab053374d808c90dSteve Block// different compiled code for scripts and evals, we use separate sub-caches 1944f0eee88ff00398ff7f715fab053374d808c90dSteve Block// for different compilation modes, to avoid retrieving the wrong result. 2044f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass CompilationSubCache { 2144f0eee88ff00398ff7f715fab053374d808c90dSteve Block public: 2244f0eee88ff00398ff7f715fab053374d808c90dSteve Block CompilationSubCache(Isolate* isolate, int generations) 2344f0eee88ff00398ff7f715fab053374d808c90dSteve Block : isolate_(isolate), 2444f0eee88ff00398ff7f715fab053374d808c90dSteve Block generations_(generations) { 2544f0eee88ff00398ff7f715fab053374d808c90dSteve Block tables_ = NewArray<Object*>(generations); 2644f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 2744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 2844f0eee88ff00398ff7f715fab053374d808c90dSteve Block ~CompilationSubCache() { DeleteArray(tables_); } 2944f0eee88ff00398ff7f715fab053374d808c90dSteve Block 3044f0eee88ff00398ff7f715fab053374d808c90dSteve Block // Index for the first generation in the cache. 3144f0eee88ff00398ff7f715fab053374d808c90dSteve Block static const int kFirstGeneration = 0; 3244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 3344f0eee88ff00398ff7f715fab053374d808c90dSteve Block // Get the compilation cache tables for a specific generation. 3444f0eee88ff00398ff7f715fab053374d808c90dSteve Block Handle<CompilationCacheTable> GetTable(int generation); 3544f0eee88ff00398ff7f715fab053374d808c90dSteve Block 3644f0eee88ff00398ff7f715fab053374d808c90dSteve Block // Accessors for first generation. 3744f0eee88ff00398ff7f715fab053374d808c90dSteve Block Handle<CompilationCacheTable> GetFirstTable() { 3844f0eee88ff00398ff7f715fab053374d808c90dSteve Block return GetTable(kFirstGeneration); 3944f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 4044f0eee88ff00398ff7f715fab053374d808c90dSteve Block void SetFirstTable(Handle<CompilationCacheTable> value) { 41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DCHECK(kFirstGeneration < generations_); 4244f0eee88ff00398ff7f715fab053374d808c90dSteve Block tables_[kFirstGeneration] = *value; 4344f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 4444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 4544f0eee88ff00398ff7f715fab053374d808c90dSteve Block // Age the sub-cache by evicting the oldest generation and creating a new 4644f0eee88ff00398ff7f715fab053374d808c90dSteve Block // young generation. 4744f0eee88ff00398ff7f715fab053374d808c90dSteve Block void Age(); 4844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 4944f0eee88ff00398ff7f715fab053374d808c90dSteve Block // GC support. 5044f0eee88ff00398ff7f715fab053374d808c90dSteve Block void Iterate(ObjectVisitor* v); 5144f0eee88ff00398ff7f715fab053374d808c90dSteve Block void IterateFunctions(ObjectVisitor* v); 5244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 5344f0eee88ff00398ff7f715fab053374d808c90dSteve Block // Clear this sub-cache evicting all its content. 5444f0eee88ff00398ff7f715fab053374d808c90dSteve Block void Clear(); 5544f0eee88ff00398ff7f715fab053374d808c90dSteve Block 5644f0eee88ff00398ff7f715fab053374d808c90dSteve Block // Remove given shared function info from sub-cache. 5744f0eee88ff00398ff7f715fab053374d808c90dSteve Block void Remove(Handle<SharedFunctionInfo> function_info); 5844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 5944f0eee88ff00398ff7f715fab053374d808c90dSteve Block // Number of generations in this sub-cache. 6044f0eee88ff00398ff7f715fab053374d808c90dSteve Block inline int generations() { return generations_; } 6144f0eee88ff00398ff7f715fab053374d808c90dSteve Block 6244f0eee88ff00398ff7f715fab053374d808c90dSteve Block protected: 6344f0eee88ff00398ff7f715fab053374d808c90dSteve Block Isolate* isolate() { return isolate_; } 6444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 6544f0eee88ff00398ff7f715fab053374d808c90dSteve Block private: 6644f0eee88ff00398ff7f715fab053374d808c90dSteve Block Isolate* isolate_; 6744f0eee88ff00398ff7f715fab053374d808c90dSteve Block int generations_; // Number of generations. 6844f0eee88ff00398ff7f715fab053374d808c90dSteve Block Object** tables_; // Compilation cache tables - one for each generation. 6944f0eee88ff00398ff7f715fab053374d808c90dSteve Block 7044f0eee88ff00398ff7f715fab053374d808c90dSteve Block DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationSubCache); 7144f0eee88ff00398ff7f715fab053374d808c90dSteve Block}; 7244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 7344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 7444f0eee88ff00398ff7f715fab053374d808c90dSteve Block// Sub-cache for scripts. 7544f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass CompilationCacheScript : public CompilationSubCache { 7644f0eee88ff00398ff7f715fab053374d808c90dSteve Block public: 7744f0eee88ff00398ff7f715fab053374d808c90dSteve Block CompilationCacheScript(Isolate* isolate, int generations); 7844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 79014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Handle<SharedFunctionInfo> Lookup(Handle<String> source, Handle<Object> name, 80014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch int line_offset, int column_offset, 81014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ScriptOriginOptions resource_options, 82014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Handle<Context> context, 83014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LanguageMode language_mode); 84b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch void Put(Handle<String> source, 85b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Handle<Context> context, 86014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LanguageMode language_mode, 87b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Handle<SharedFunctionInfo> function_info); 8844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 8944f0eee88ff00398ff7f715fab053374d808c90dSteve Block private: 90014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch bool HasOrigin(Handle<SharedFunctionInfo> function_info, Handle<Object> name, 91014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch int line_offset, int column_offset, 92014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ScriptOriginOptions resource_options); 9344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 9444f0eee88ff00398ff7f715fab053374d808c90dSteve Block DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheScript); 9544f0eee88ff00398ff7f715fab053374d808c90dSteve Block}; 9644f0eee88ff00398ff7f715fab053374d808c90dSteve Block 9744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Sub-cache for eval scripts. Two caches for eval are used. One for eval calls 99b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// in native contexts and one for eval calls in other contexts. The cache 1003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// considers the following pieces of information when checking for matching 1013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// entries: 1023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// 1. The source string. 1033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// 2. The shared function info of the calling function. 104b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// 3. Whether the source should be compiled as strict code or as sloppy code. 1053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Note: Currently there are clients of CompileEval that always compile 106b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// sloppy code even if the calling function is a strict mode function. 1073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// More specifically these are the CompileString, DebugEvaluate and 1083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// DebugEvaluateGlobal runtime functions. 1093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// 4. The start position of the calling scope. 11044f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass CompilationCacheEval: public CompilationSubCache { 11144f0eee88ff00398ff7f715fab053374d808c90dSteve Block public: 11244f0eee88ff00398ff7f715fab053374d808c90dSteve Block CompilationCacheEval(Isolate* isolate, int generations) 11344f0eee88ff00398ff7f715fab053374d808c90dSteve Block : CompilationSubCache(isolate, generations) { } 11444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 115b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MaybeHandle<SharedFunctionInfo> Lookup(Handle<String> source, 116b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Handle<SharedFunctionInfo> outer_info, 117014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LanguageMode language_mode, 118b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int scope_position); 11944f0eee88ff00398ff7f715fab053374d808c90dSteve Block 120b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch void Put(Handle<String> source, Handle<SharedFunctionInfo> outer_info, 121b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Handle<SharedFunctionInfo> function_info, int scope_position); 12244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 12344f0eee88ff00398ff7f715fab053374d808c90dSteve Block private: 12444f0eee88ff00398ff7f715fab053374d808c90dSteve Block DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheEval); 12544f0eee88ff00398ff7f715fab053374d808c90dSteve Block}; 12644f0eee88ff00398ff7f715fab053374d808c90dSteve Block 12744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 12844f0eee88ff00398ff7f715fab053374d808c90dSteve Block// Sub-cache for regular expressions. 12944f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass CompilationCacheRegExp: public CompilationSubCache { 13044f0eee88ff00398ff7f715fab053374d808c90dSteve Block public: 13144f0eee88ff00398ff7f715fab053374d808c90dSteve Block CompilationCacheRegExp(Isolate* isolate, int generations) 13244f0eee88ff00398ff7f715fab053374d808c90dSteve Block : CompilationSubCache(isolate, generations) { } 13344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 134b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MaybeHandle<FixedArray> Lookup(Handle<String> source, JSRegExp::Flags flags); 13544f0eee88ff00398ff7f715fab053374d808c90dSteve Block 13644f0eee88ff00398ff7f715fab053374d808c90dSteve Block void Put(Handle<String> source, 13744f0eee88ff00398ff7f715fab053374d808c90dSteve Block JSRegExp::Flags flags, 13844f0eee88ff00398ff7f715fab053374d808c90dSteve Block Handle<FixedArray> data); 13944f0eee88ff00398ff7f715fab053374d808c90dSteve Block private: 14044f0eee88ff00398ff7f715fab053374d808c90dSteve Block DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheRegExp); 14144f0eee88ff00398ff7f715fab053374d808c90dSteve Block}; 14244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 143a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1446ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// The compilation cache keeps shared function infos for compiled 1456ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// scripts and evals. The shared function infos are looked up using 1466ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// the source string as the key. For regular expressions the 1476ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// compilation data is cached. 148a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockclass CompilationCache { 149a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block public: 1506ded16be15dd865a9b21ea304d5273c8be299c87Steve Block // Finds the script shared function info for a source 151a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // string. Returns an empty handle if the cache doesn't contain a 152a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // script for the given source string with the right origin. 153b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MaybeHandle<SharedFunctionInfo> LookupScript( 154b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Handle<String> source, Handle<Object> name, int line_offset, 155014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch int column_offset, ScriptOriginOptions resource_options, 156014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Handle<Context> context, LanguageMode language_mode); 157a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1586ded16be15dd865a9b21ea304d5273c8be299c87Steve Block // Finds the shared function info for a source string for eval in a 159a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // given context. Returns an empty handle if the cache doesn't 160a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // contain a script for the given source string. 161b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MaybeHandle<SharedFunctionInfo> LookupEval( 162b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Handle<String> source, Handle<SharedFunctionInfo> outer_info, 163014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Handle<Context> context, LanguageMode language_mode, int scope_position); 164a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 165a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Returns the regexp data associated with the given regexp if it 166a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // is in cache, otherwise an empty handle. 167b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MaybeHandle<FixedArray> LookupRegExp( 168b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Handle<String> source, JSRegExp::Flags flags); 169a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1706ded16be15dd865a9b21ea304d5273c8be299c87Steve Block // Associate the (source, kind) pair to the shared function 1716ded16be15dd865a9b21ea304d5273c8be299c87Steve Block // info. This may overwrite an existing mapping. 17244f0eee88ff00398ff7f715fab053374d808c90dSteve Block void PutScript(Handle<String> source, 173b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Handle<Context> context, 174014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LanguageMode language_mode, 17544f0eee88ff00398ff7f715fab053374d808c90dSteve Block Handle<SharedFunctionInfo> function_info); 176a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 177a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Associate the (source, context->closure()->shared(), kind) triple 1786ded16be15dd865a9b21ea304d5273c8be299c87Steve Block // with the shared function info. This may overwrite an existing mapping. 179b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch void PutEval(Handle<String> source, Handle<SharedFunctionInfo> outer_info, 18044f0eee88ff00398ff7f715fab053374d808c90dSteve Block Handle<Context> context, 181b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Handle<SharedFunctionInfo> function_info, int scope_position); 182a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 183a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Associate the (source, flags) pair to the given regexp data. 184a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // This may overwrite an existing mapping. 18544f0eee88ff00398ff7f715fab053374d808c90dSteve Block void PutRegExp(Handle<String> source, 18644f0eee88ff00398ff7f715fab053374d808c90dSteve Block JSRegExp::Flags flags, 18744f0eee88ff00398ff7f715fab053374d808c90dSteve Block Handle<FixedArray> data); 188a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 189a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Clear the cache - also used to initialize the cache at startup. 19044f0eee88ff00398ff7f715fab053374d808c90dSteve Block void Clear(); 191a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 192b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Remove given shared function info from all caches. 19344f0eee88ff00398ff7f715fab053374d808c90dSteve Block void Remove(Handle<SharedFunctionInfo> function_info); 194b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 195a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // GC support. 19644f0eee88ff00398ff7f715fab053374d808c90dSteve Block void Iterate(ObjectVisitor* v); 19744f0eee88ff00398ff7f715fab053374d808c90dSteve Block void IterateFunctions(ObjectVisitor* v); 198a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 199a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Notify the cache that a mark-sweep garbage collection is about to 200a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // take place. This is used to retire entries from the cache to 201a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // avoid keeping them alive too long without using them. 20244f0eee88ff00398ff7f715fab053374d808c90dSteve Block void MarkCompactPrologue(); 203a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 204a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Enable/disable compilation cache. Used by debugger to disable compilation 205a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // cache during debugging to make sure new scripts are always compiled. 20644f0eee88ff00398ff7f715fab053374d808c90dSteve Block void Enable(); 20744f0eee88ff00398ff7f715fab053374d808c90dSteve Block void Disable(); 208589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 20944f0eee88ff00398ff7f715fab053374d808c90dSteve Block private: 21044f0eee88ff00398ff7f715fab053374d808c90dSteve Block explicit CompilationCache(Isolate* isolate); 21144f0eee88ff00398ff7f715fab053374d808c90dSteve Block ~CompilationCache(); 21244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 21344f0eee88ff00398ff7f715fab053374d808c90dSteve Block HashMap* EagerOptimizingSet(); 21444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 21544f0eee88ff00398ff7f715fab053374d808c90dSteve Block // The number of sub caches covering the different types to cache. 21644f0eee88ff00398ff7f715fab053374d808c90dSteve Block static const int kSubCacheCount = 4; 21744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 21844f0eee88ff00398ff7f715fab053374d808c90dSteve Block bool IsEnabled() { return FLAG_compilation_cache && enabled_; } 21944f0eee88ff00398ff7f715fab053374d808c90dSteve Block 22044f0eee88ff00398ff7f715fab053374d808c90dSteve Block Isolate* isolate() { return isolate_; } 22144f0eee88ff00398ff7f715fab053374d808c90dSteve Block 22244f0eee88ff00398ff7f715fab053374d808c90dSteve Block Isolate* isolate_; 22344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 22444f0eee88ff00398ff7f715fab053374d808c90dSteve Block CompilationCacheScript script_; 22544f0eee88ff00398ff7f715fab053374d808c90dSteve Block CompilationCacheEval eval_global_; 22644f0eee88ff00398ff7f715fab053374d808c90dSteve Block CompilationCacheEval eval_contextual_; 22744f0eee88ff00398ff7f715fab053374d808c90dSteve Block CompilationCacheRegExp reg_exp_; 22844f0eee88ff00398ff7f715fab053374d808c90dSteve Block CompilationSubCache* subcaches_[kSubCacheCount]; 22944f0eee88ff00398ff7f715fab053374d808c90dSteve Block 23044f0eee88ff00398ff7f715fab053374d808c90dSteve Block // Current enable state of the compilation cache. 23144f0eee88ff00398ff7f715fab053374d808c90dSteve Block bool enabled_; 23244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 23344f0eee88ff00398ff7f715fab053374d808c90dSteve Block friend class Isolate; 23444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 23544f0eee88ff00398ff7f715fab053374d808c90dSteve Block DISALLOW_COPY_AND_ASSIGN(CompilationCache); 236a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block}; 237a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 238a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 239014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace internal 240014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace v8 241a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 242a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#endif // V8_COMPILATION_CACHE_H_ 243