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