blob: f779a23aacc6702d4575c73442ceb1d457119408 [file] [log] [blame]
Steve Blocka7e24c12009-10-30 11:49:00 +00001// Copyright 2008 the V8 project authors. All rights reserved.
2// Redistribution and use in source and binary forms, with or without
3// modification, are permitted provided that the following conditions are
4// met:
5//
6// * Redistributions of source code must retain the above copyright
7// notice, this list of conditions and the following disclaimer.
8// * Redistributions in binary form must reproduce the above
9// copyright notice, this list of conditions and the following
10// disclaimer in the documentation and/or other materials provided
11// with the distribution.
12// * Neither the name of Google Inc. nor the names of its
13// contributors may be used to endorse or promote products derived
14// from this software without specific prior written permission.
15//
16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28#ifndef V8_COMPILATION_CACHE_H_
29#define V8_COMPILATION_CACHE_H_
30
31namespace v8 {
32namespace internal {
33
34
Steve Block6ded16b2010-05-10 14:33:55 +010035// The compilation cache keeps shared function infos for compiled
36// scripts and evals. The shared function infos are looked up using
37// the source string as the key. For regular expressions the
38// compilation data is cached.
Steve Blocka7e24c12009-10-30 11:49:00 +000039class CompilationCache {
40 public:
Steve Block6ded16b2010-05-10 14:33:55 +010041 // Finds the script shared function info for a source
Steve Blocka7e24c12009-10-30 11:49:00 +000042 // string. Returns an empty handle if the cache doesn't contain a
43 // script for the given source string with the right origin.
Steve Block6ded16b2010-05-10 14:33:55 +010044 static Handle<SharedFunctionInfo> LookupScript(Handle<String> source,
45 Handle<Object> name,
46 int line_offset,
47 int column_offset);
Steve Blocka7e24c12009-10-30 11:49:00 +000048
Steve Block6ded16b2010-05-10 14:33:55 +010049 // Finds the shared function info for a source string for eval in a
Steve Blocka7e24c12009-10-30 11:49:00 +000050 // given context. Returns an empty handle if the cache doesn't
51 // contain a script for the given source string.
Steve Block6ded16b2010-05-10 14:33:55 +010052 static Handle<SharedFunctionInfo> LookupEval(Handle<String> source,
53 Handle<Context> context,
Steve Block1e0659c2011-05-24 12:43:12 +010054 bool is_global,
55 StrictModeFlag strict_mode);
Steve Blocka7e24c12009-10-30 11:49:00 +000056
57 // Returns the regexp data associated with the given regexp if it
58 // is in cache, otherwise an empty handle.
59 static Handle<FixedArray> LookupRegExp(Handle<String> source,
60 JSRegExp::Flags flags);
61
Steve Block6ded16b2010-05-10 14:33:55 +010062 // Associate the (source, kind) pair to the shared function
63 // info. This may overwrite an existing mapping.
Steve Blocka7e24c12009-10-30 11:49:00 +000064 static void PutScript(Handle<String> source,
Steve Block6ded16b2010-05-10 14:33:55 +010065 Handle<SharedFunctionInfo> function_info);
Steve Blocka7e24c12009-10-30 11:49:00 +000066
67 // Associate the (source, context->closure()->shared(), kind) triple
Steve Block6ded16b2010-05-10 14:33:55 +010068 // with the shared function info. This may overwrite an existing mapping.
Steve Blocka7e24c12009-10-30 11:49:00 +000069 static void PutEval(Handle<String> source,
70 Handle<Context> context,
71 bool is_global,
Steve Block6ded16b2010-05-10 14:33:55 +010072 Handle<SharedFunctionInfo> function_info);
Steve Blocka7e24c12009-10-30 11:49:00 +000073
74 // Associate the (source, flags) pair to the given regexp data.
75 // This may overwrite an existing mapping.
76 static void PutRegExp(Handle<String> source,
77 JSRegExp::Flags flags,
78 Handle<FixedArray> data);
79
Ben Murdochb0fe1622011-05-05 13:52:32 +010080 // Support for eager optimization tracking.
81 static bool ShouldOptimizeEagerly(Handle<JSFunction> function);
82 static void MarkForEagerOptimizing(Handle<JSFunction> function);
83 static void MarkForLazyOptimizing(Handle<JSFunction> function);
84
85 // Reset the eager optimization tracking data.
86 static void ResetEagerOptimizingData();
87
Steve Blocka7e24c12009-10-30 11:49:00 +000088 // Clear the cache - also used to initialize the cache at startup.
89 static void Clear();
90
Ben Murdochb0fe1622011-05-05 13:52:32 +010091 // Remove given shared function info from all caches.
92 static void Remove(Handle<SharedFunctionInfo> function_info);
93
Steve Blocka7e24c12009-10-30 11:49:00 +000094 // GC support.
95 static void Iterate(ObjectVisitor* v);
Iain Merrick75681382010-08-19 15:07:18 +010096 static void IterateFunctions(ObjectVisitor* v);
Steve Blocka7e24c12009-10-30 11:49:00 +000097
98 // Notify the cache that a mark-sweep garbage collection is about to
99 // take place. This is used to retire entries from the cache to
100 // avoid keeping them alive too long without using them.
101 static void MarkCompactPrologue();
102
103 // Enable/disable compilation cache. Used by debugger to disable compilation
104 // cache during debugging to make sure new scripts are always compiled.
105 static void Enable();
106 static void Disable();
107};
108
109
110} } // namespace v8::internal
111
112#endif // V8_COMPILATION_CACHE_H_