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 20 matching lines...) Expand all Loading... |
31 Vector<const char> GetRawScriptSource(int index) { | 31 Vector<const char> GetRawScriptSource(int index) { |
32 return native_source_[index]; | 32 return native_source_[index]; |
33 } | 33 } |
34 | 34 |
35 int GetIndex(const char* name) { | 35 int GetIndex(const char* name) { |
36 for (int i = 0; i < native_names_.length(); ++i) { | 36 for (int i = 0; i < native_names_.length(); ++i) { |
37 if (strcmp(name, native_names_[i].start()) == 0) { | 37 if (strcmp(name, native_names_[i].start()) == 0) { |
38 return i; | 38 return i; |
39 } | 39 } |
40 } | 40 } |
41 ASSERT(false); | 41 DCHECK(false); |
42 return -1; | 42 return -1; |
43 } | 43 } |
44 | 44 |
45 int GetRawScriptsSize() { | 45 int GetRawScriptsSize() { |
46 ASSERT(false); // Used for compression. Doesn't really make sense here. | 46 DCHECK(false); // Used for compression. Doesn't really make sense here. |
47 return 0; | 47 return 0; |
48 } | 48 } |
49 | 49 |
50 Vector<const byte> GetScriptsSource() { | 50 Vector<const byte> GetScriptsSource() { |
51 ASSERT(false); // Used for compression. Doesn't really make sense here. | 51 DCHECK(false); // Used for compression. Doesn't really make sense here. |
52 return Vector<const byte>(); | 52 return Vector<const byte>(); |
53 } | 53 } |
54 | 54 |
55 static NativesStore* MakeFromScriptsSource(SnapshotByteSource* source) { | 55 static NativesStore* MakeFromScriptsSource(SnapshotByteSource* source) { |
56 NativesStore* store = new NativesStore; | 56 NativesStore* store = new NativesStore; |
57 | 57 |
58 // We expect the libraries in the following format: | 58 // We expect the libraries in the following format: |
59 // int: # of debugger sources. | 59 // int: # of debugger sources. |
60 // 2N blobs: N pairs of source name + actual source. | 60 // 2N blobs: N pairs of source name + actual source. |
61 // then, repeat for non-debugger sources. | 61 // then, repeat for non-debugger sources. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 int debugger_count_; | 96 int debugger_count_; |
97 | 97 |
98 DISALLOW_COPY_AND_ASSIGN(NativesStore); | 98 DISALLOW_COPY_AND_ASSIGN(NativesStore); |
99 }; | 99 }; |
100 | 100 |
101 | 101 |
102 template<NativeType type> | 102 template<NativeType type> |
103 class NativesHolder { | 103 class NativesHolder { |
104 public: | 104 public: |
105 static NativesStore* get() { | 105 static NativesStore* get() { |
106 ASSERT(holder_); | 106 DCHECK(holder_); |
107 return holder_; | 107 return holder_; |
108 } | 108 } |
109 static void set(NativesStore* store) { | 109 static void set(NativesStore* store) { |
110 ASSERT(store); | 110 DCHECK(store); |
111 holder_ = store; | 111 holder_ = store; |
112 } | 112 } |
113 | 113 |
114 private: | 114 private: |
115 static NativesStore* holder_; | 115 static NativesStore* holder_; |
116 }; | 116 }; |
117 | 117 |
118 template<NativeType type> | 118 template<NativeType type> |
119 NativesStore* NativesHolder<type>::holder_ = NULL; | 119 NativesStore* NativesHolder<type>::holder_ = NULL; |
120 | 120 |
121 | 121 |
122 /** | 122 /** |
123 * Read the Natives (library sources) blob, as generated by js2c + the build | 123 * Read the Natives (library sources) blob, as generated by js2c + the build |
124 * system. | 124 * system. |
125 */ | 125 */ |
126 void SetNativesFromFile(StartupData* natives_blob) { | 126 void SetNativesFromFile(StartupData* natives_blob) { |
127 ASSERT(natives_blob); | 127 DCHECK(natives_blob); |
128 ASSERT(natives_blob->data); | 128 DCHECK(natives_blob->data); |
129 ASSERT(natives_blob->raw_size > 0); | 129 DCHECK(natives_blob->raw_size > 0); |
130 | 130 |
131 SnapshotByteSource bytes( | 131 SnapshotByteSource bytes( |
132 reinterpret_cast<const byte*>(natives_blob->data), | 132 reinterpret_cast<const byte*>(natives_blob->data), |
133 natives_blob->raw_size); | 133 natives_blob->raw_size); |
134 NativesHolder<CORE>::set(NativesStore::MakeFromScriptsSource(&bytes)); | 134 NativesHolder<CORE>::set(NativesStore::MakeFromScriptsSource(&bytes)); |
135 NativesHolder<EXPERIMENTAL>::set(NativesStore::MakeFromScriptsSource(&bytes)); | 135 NativesHolder<EXPERIMENTAL>::set(NativesStore::MakeFromScriptsSource(&bytes)); |
136 ASSERT(!bytes.HasMore()); | 136 DCHECK(!bytes.HasMore()); |
137 } | 137 } |
138 | 138 |
139 | 139 |
140 // Implement NativesCollection<T> bsaed on NativesHolder + NativesStore. | 140 // Implement NativesCollection<T> bsaed on NativesHolder + NativesStore. |
141 // | 141 // |
142 // (The callers expect a purely static interface, since this is how the | 142 // (The callers expect a purely static interface, since this is how the |
143 // natives are usually compiled in. Since we implement them based on | 143 // natives are usually compiled in. Since we implement them based on |
144 // runtime content, we have to implement this indirection to offer | 144 // runtime content, we have to implement this indirection to offer |
145 // a static interface.) | 145 // a static interface.) |
146 template<NativeType type> | 146 template<NativeType type> |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 | 187 |
188 // The compiler can't 'see' all uses of the static methods and hence | 188 // The compiler can't 'see' all uses of the static methods and hence |
189 // my chose to elide them. This we'll explicitly instantiate these. | 189 // my chose to elide them. This we'll explicitly instantiate these. |
190 template class NativesCollection<CORE>; | 190 template class NativesCollection<CORE>; |
191 template class NativesCollection<EXPERIMENTAL>; | 191 template class NativesCollection<EXPERIMENTAL>; |
192 template class NativesCollection<D8>; | 192 template class NativesCollection<D8>; |
193 template class NativesCollection<TEST>; | 193 template class NativesCollection<TEST>; |
194 | 194 |
195 } // namespace v8::internal | 195 } // namespace v8::internal |
196 } // namespace v8 | 196 } // namespace v8 |
OLD | NEW |