| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // modification, are permitted provided that the following conditions are | 3 // found in the LICENSE file. |
| 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 | 4 |
| 29 #ifndef V8_BOOTSTRAPPER_H_ | 5 #ifndef V8_BOOTSTRAPPER_H_ |
| 30 #define V8_BOOTSTRAPPER_H_ | 6 #define V8_BOOTSTRAPPER_H_ |
| 31 | 7 |
| 32 #include "allocation.h" | 8 #include "factory.h" |
| 33 | 9 |
| 34 namespace v8 { | 10 namespace v8 { |
| 35 namespace internal { | 11 namespace internal { |
| 36 | 12 |
| 37 | |
| 38 // A SourceCodeCache uses a FixedArray to store pairs of | 13 // A SourceCodeCache uses a FixedArray to store pairs of |
| 39 // (AsciiString*, JSFunction*), mapping names of native code files | 14 // (AsciiString*, JSFunction*), mapping names of native code files |
| 40 // (runtime.js, etc.) to precompiled functions. Instead of mapping | 15 // (runtime.js, etc.) to precompiled functions. Instead of mapping |
| 41 // names to functions it might make sense to let the JS2C tool | 16 // names to functions it might make sense to let the JS2C tool |
| 42 // generate an index for each native JS file. | 17 // generate an index for each native JS file. |
| 43 class SourceCodeCache BASE_EMBEDDED { | 18 class SourceCodeCache V8_FINAL BASE_EMBEDDED { |
| 44 public: | 19 public: |
| 45 explicit SourceCodeCache(Script::Type type): type_(type), cache_(NULL) { } | 20 explicit SourceCodeCache(Script::Type type): type_(type), cache_(NULL) { } |
| 46 | 21 |
| 47 void Initialize(Isolate* isolate, bool create_heap_objects) { | 22 void Initialize(Isolate* isolate, bool create_heap_objects) { |
| 48 cache_ = create_heap_objects ? isolate->heap()->empty_fixed_array() : NULL; | 23 cache_ = create_heap_objects ? isolate->heap()->empty_fixed_array() : NULL; |
| 49 } | 24 } |
| 50 | 25 |
| 51 void Iterate(ObjectVisitor* v) { | 26 void Iterate(ObjectVisitor* v) { |
| 52 v->VisitPointer(BitCast<Object**, FixedArray**>(&cache_)); | 27 v->VisitPointer(BitCast<Object**, FixedArray**>(&cache_)); |
| 53 } | 28 } |
| (...skipping 27 matching lines...) Expand all Loading... |
| 81 | 56 |
| 82 private: | 57 private: |
| 83 Script::Type type_; | 58 Script::Type type_; |
| 84 FixedArray* cache_; | 59 FixedArray* cache_; |
| 85 DISALLOW_COPY_AND_ASSIGN(SourceCodeCache); | 60 DISALLOW_COPY_AND_ASSIGN(SourceCodeCache); |
| 86 }; | 61 }; |
| 87 | 62 |
| 88 | 63 |
| 89 // The Boostrapper is the public interface for creating a JavaScript global | 64 // The Boostrapper is the public interface for creating a JavaScript global |
| 90 // context. | 65 // context. |
| 91 class Bootstrapper { | 66 class Bootstrapper V8_FINAL { |
| 92 public: | 67 public: |
| 93 static void InitializeOncePerProcess(); | 68 static void InitializeOncePerProcess(); |
| 94 static void TearDownExtensions(); | 69 static void TearDownExtensions(); |
| 95 | 70 |
| 96 // Requires: Heap::SetUp has been called. | 71 // Requires: Heap::SetUp has been called. |
| 97 void Initialize(bool create_heap_objects); | 72 void Initialize(bool create_heap_objects); |
| 98 void TearDown(); | 73 void TearDown(); |
| 99 | 74 |
| 100 // Creates a JavaScript Global Context with initial object graph. | 75 // Creates a JavaScript Global Context with initial object graph. |
| 101 // The returned value is a global handle casted to V8Environment*. | 76 // The returned value is a global handle casted to V8Environment*. |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 static v8::Extension* free_buffer_extension_; | 126 static v8::Extension* free_buffer_extension_; |
| 152 static v8::Extension* gc_extension_; | 127 static v8::Extension* gc_extension_; |
| 153 static v8::Extension* externalize_string_extension_; | 128 static v8::Extension* externalize_string_extension_; |
| 154 static v8::Extension* statistics_extension_; | 129 static v8::Extension* statistics_extension_; |
| 155 static v8::Extension* trigger_failure_extension_; | 130 static v8::Extension* trigger_failure_extension_; |
| 156 | 131 |
| 157 DISALLOW_COPY_AND_ASSIGN(Bootstrapper); | 132 DISALLOW_COPY_AND_ASSIGN(Bootstrapper); |
| 158 }; | 133 }; |
| 159 | 134 |
| 160 | 135 |
| 161 class BootstrapperActive BASE_EMBEDDED { | 136 class BootstrapperActive V8_FINAL BASE_EMBEDDED { |
| 162 public: | 137 public: |
| 163 explicit BootstrapperActive(Bootstrapper* bootstrapper) | 138 explicit BootstrapperActive(Bootstrapper* bootstrapper) |
| 164 : bootstrapper_(bootstrapper) { | 139 : bootstrapper_(bootstrapper) { |
| 165 ++bootstrapper_->nesting_; | 140 ++bootstrapper_->nesting_; |
| 166 } | 141 } |
| 167 | 142 |
| 168 ~BootstrapperActive() { | 143 ~BootstrapperActive() { |
| 169 --bootstrapper_->nesting_; | 144 --bootstrapper_->nesting_; |
| 170 } | 145 } |
| 171 | 146 |
| 172 private: | 147 private: |
| 173 Bootstrapper* bootstrapper_; | 148 Bootstrapper* bootstrapper_; |
| 174 | 149 |
| 175 DISALLOW_COPY_AND_ASSIGN(BootstrapperActive); | 150 DISALLOW_COPY_AND_ASSIGN(BootstrapperActive); |
| 176 }; | 151 }; |
| 177 | 152 |
| 178 | 153 |
| 179 class NativesExternalStringResource | 154 class NativesExternalStringResource V8_FINAL |
| 180 : public v8::String::ExternalAsciiStringResource { | 155 : public v8::String::ExternalAsciiStringResource { |
| 181 public: | 156 public: |
| 182 NativesExternalStringResource(Bootstrapper* bootstrapper, | 157 NativesExternalStringResource(Bootstrapper* bootstrapper, |
| 183 const char* source, | 158 const char* source, |
| 184 size_t length); | 159 size_t length); |
| 160 virtual const char* data() const V8_OVERRIDE { return data_; } |
| 161 virtual size_t length() const V8_OVERRIDE { return length_; } |
| 185 | 162 |
| 186 const char* data() const { | |
| 187 return data_; | |
| 188 } | |
| 189 | |
| 190 size_t length() const { | |
| 191 return length_; | |
| 192 } | |
| 193 private: | 163 private: |
| 194 const char* data_; | 164 const char* data_; |
| 195 size_t length_; | 165 size_t length_; |
| 196 }; | 166 }; |
| 197 | 167 |
| 198 }} // namespace v8::internal | 168 }} // namespace v8::internal |
| 199 | 169 |
| 200 #endif // V8_BOOTSTRAPPER_H_ | 170 #endif // V8_BOOTSTRAPPER_H_ |
| OLD | NEW |