| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/natives.h" | 5 #include "src/natives.h" |
| 6 | 6 |
| 7 #include "src/base/logging.h" | 7 #include "src/base/logging.h" |
| 8 #include "src/list.h" | 8 #include "src/list.h" |
| 9 #include "src/list-inl.h" | 9 #include "src/list-inl.h" |
| 10 #include "src/snapshot-source-sink.h" | 10 #include "src/snapshot-source-sink.h" |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 class NativesHolder { | 125 class NativesHolder { |
| 126 public: | 126 public: |
| 127 static NativesStore* get() { | 127 static NativesStore* get() { |
| 128 DCHECK(holder_); | 128 DCHECK(holder_); |
| 129 return holder_; | 129 return holder_; |
| 130 } | 130 } |
| 131 static void set(NativesStore* store) { | 131 static void set(NativesStore* store) { |
| 132 DCHECK(store); | 132 DCHECK(store); |
| 133 holder_ = store; | 133 holder_ = store; |
| 134 } | 134 } |
| 135 static void Dispose() { |
| 136 DCHECK(holder_); |
| 137 delete holder_; |
| 138 } |
| 135 | 139 |
| 136 private: | 140 private: |
| 137 static NativesStore* holder_; | 141 static NativesStore* holder_; |
| 138 }; | 142 }; |
| 139 | 143 |
| 140 template<NativeType type> | 144 template<NativeType type> |
| 141 NativesStore* NativesHolder<type>::holder_ = NULL; | 145 NativesStore* NativesHolder<type>::holder_ = NULL; |
| 142 | 146 |
| 143 | 147 |
| 144 /** | 148 /** |
| 145 * Read the Natives (library sources) blob, as generated by js2c + the build | 149 * Read the Natives (library sources) blob, as generated by js2c + the build |
| 146 * system. | 150 * system. |
| 147 */ | 151 */ |
| 148 void SetNativesFromFile(StartupData* natives_blob) { | 152 void SetNativesFromFile(StartupData* natives_blob) { |
| 149 DCHECK(natives_blob); | 153 DCHECK(natives_blob); |
| 150 DCHECK(natives_blob->data); | 154 DCHECK(natives_blob->data); |
| 151 DCHECK(natives_blob->raw_size > 0); | 155 DCHECK(natives_blob->raw_size > 0); |
| 152 | 156 |
| 153 SnapshotByteSource bytes(natives_blob->data, natives_blob->raw_size); | 157 SnapshotByteSource bytes(natives_blob->data, natives_blob->raw_size); |
| 154 NativesHolder<CORE>::set(NativesStore::MakeFromScriptsSource(&bytes)); | 158 NativesHolder<CORE>::set(NativesStore::MakeFromScriptsSource(&bytes)); |
| 155 NativesHolder<EXPERIMENTAL>::set(NativesStore::MakeFromScriptsSource(&bytes)); | 159 NativesHolder<EXPERIMENTAL>::set(NativesStore::MakeFromScriptsSource(&bytes)); |
| 156 DCHECK(!bytes.HasMore()); | 160 DCHECK(!bytes.HasMore()); |
| 157 } | 161 } |
| 158 | 162 |
| 159 | 163 |
| 164 /** |
| 165 * Release memory allocated by SetNativesFromFile. |
| 166 */ |
| 167 void DisposeNatives() { |
| 168 NativesHolder<CORE>::Dispose(); |
| 169 NativesHolder<EXPERIMENTAL>::Dispose(); |
| 170 } |
| 171 |
| 172 |
| 160 // Implement NativesCollection<T> bsaed on NativesHolder + NativesStore. | 173 // Implement NativesCollection<T> bsaed on NativesHolder + NativesStore. |
| 161 // | 174 // |
| 162 // (The callers expect a purely static interface, since this is how the | 175 // (The callers expect a purely static interface, since this is how the |
| 163 // natives are usually compiled in. Since we implement them based on | 176 // natives are usually compiled in. Since we implement them based on |
| 164 // runtime content, we have to implement this indirection to offer | 177 // runtime content, we have to implement this indirection to offer |
| 165 // a static interface.) | 178 // a static interface.) |
| 166 template<NativeType type> | 179 template<NativeType type> |
| 167 int NativesCollection<type>::GetBuiltinsCount() { | 180 int NativesCollection<type>::GetBuiltinsCount() { |
| 168 return NativesHolder<type>::get()->GetBuiltinsCount(); | 181 return NativesHolder<type>::get()->GetBuiltinsCount(); |
| 169 } | 182 } |
| (...skipping 24 matching lines...) Expand all Loading... |
| 194 } | 207 } |
| 195 | 208 |
| 196 | 209 |
| 197 // The compiler can't 'see' all uses of the static methods and hence | 210 // The compiler can't 'see' all uses of the static methods and hence |
| 198 // my choice to elide them. This we'll explicitly instantiate these. | 211 // my choice to elide them. This we'll explicitly instantiate these. |
| 199 template class NativesCollection<CORE>; | 212 template class NativesCollection<CORE>; |
| 200 template class NativesCollection<EXPERIMENTAL>; | 213 template class NativesCollection<EXPERIMENTAL>; |
| 201 | 214 |
| 202 } // namespace v8::internal | 215 } // namespace v8::internal |
| 203 } // namespace v8 | 216 } // namespace v8 |
| OLD | NEW |