blob: 37e21be99d4ac471a8f865320d7be4c74f810f8b [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,
54 bool is_global);
Steve Blocka7e24c12009-10-30 11:49:00 +000055
56 // Returns the regexp data associated with the given regexp if it
57 // is in cache, otherwise an empty handle.
58 static Handle<FixedArray> LookupRegExp(Handle<String> source,
59 JSRegExp::Flags flags);
60
Steve Block6ded16b2010-05-10 14:33:55 +010061 // Associate the (source, kind) pair to the shared function
62 // info. This may overwrite an existing mapping.
Steve Blocka7e24c12009-10-30 11:49:00 +000063 static void PutScript(Handle<String> source,
Steve Block6ded16b2010-05-10 14:33:55 +010064 Handle<SharedFunctionInfo> function_info);
Steve Blocka7e24c12009-10-30 11:49:00 +000065
66 // Associate the (source, context->closure()->shared(), kind) triple
Steve Block6ded16b2010-05-10 14:33:55 +010067 // with the shared function info. This may overwrite an existing mapping.
Steve Blocka7e24c12009-10-30 11:49:00 +000068 static void PutEval(Handle<String> source,
69 Handle<Context> context,
70 bool is_global,
Steve Block6ded16b2010-05-10 14:33:55 +010071 Handle<SharedFunctionInfo> function_info);
Steve Blocka7e24c12009-10-30 11:49:00 +000072
73 // Associate the (source, flags) pair to the given regexp data.
74 // This may overwrite an existing mapping.
75 static void PutRegExp(Handle<String> source,
76 JSRegExp::Flags flags,
77 Handle<FixedArray> data);
78
Ben Murdochb0fe1622011-05-05 13:52:32 +010079 // Support for eager optimization tracking.
80 static bool ShouldOptimizeEagerly(Handle<JSFunction> function);
81 static void MarkForEagerOptimizing(Handle<JSFunction> function);
82 static void MarkForLazyOptimizing(Handle<JSFunction> function);
83
84 // Reset the eager optimization tracking data.
85 static void ResetEagerOptimizingData();
86
Steve Blocka7e24c12009-10-30 11:49:00 +000087 // Clear the cache - also used to initialize the cache at startup.
88 static void Clear();
89
Ben Murdochb0fe1622011-05-05 13:52:32 +010090 // Remove given shared function info from all caches.
91 static void Remove(Handle<SharedFunctionInfo> function_info);
92
Steve Blocka7e24c12009-10-30 11:49:00 +000093 // GC support.
94 static void Iterate(ObjectVisitor* v);
Iain Merrick75681382010-08-19 15:07:18 +010095 static void IterateFunctions(ObjectVisitor* v);
Steve Blocka7e24c12009-10-30 11:49:00 +000096
97 // Notify the cache that a mark-sweep garbage collection is about to
98 // take place. This is used to retire entries from the cache to
99 // avoid keeping them alive too long without using them.
100 static void MarkCompactPrologue();
101
102 // Enable/disable compilation cache. Used by debugger to disable compilation
103 // cache during debugging to make sure new scripts are always compiled.
104 static void Enable();
105 static void Disable();
106};
107
108
109} } // namespace v8::internal
110
111#endif // V8_COMPILATION_CACHE_H_