OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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/api.h" | 5 #include "src/api.h" |
6 | 6 |
7 #include <string.h> // For memcpy, strlen. | 7 #include <string.h> // For memcpy, strlen. |
8 #ifdef V8_USE_ADDRESS_SANITIZER | 8 #ifdef V8_USE_ADDRESS_SANITIZER |
9 #include <sanitizer/asan_interface.h> | 9 #include <sanitizer/asan_interface.h> |
10 #endif // V8_USE_ADDRESS_SANITIZER | 10 #endif // V8_USE_ADDRESS_SANITIZER |
(...skipping 6113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6124 return Utils::ToLocal(obj); | 6124 return Utils::ToLocal(obj); |
6125 } | 6125 } |
6126 | 6126 |
6127 | 6127 |
6128 size_t v8::Map::Size() const { | 6128 size_t v8::Map::Size() const { |
6129 i::Handle<i::JSMap> obj = Utils::OpenHandle(this); | 6129 i::Handle<i::JSMap> obj = Utils::OpenHandle(this); |
6130 return i::OrderedHashMap::cast(obj->table())->NumberOfElements(); | 6130 return i::OrderedHashMap::cast(obj->table())->NumberOfElements(); |
6131 } | 6131 } |
6132 | 6132 |
6133 | 6133 |
| 6134 Local<Array> Map::AsArray() const { |
| 6135 i::Handle<i::JSMap> obj = Utils::OpenHandle(this); |
| 6136 i::Isolate* isolate = obj->GetIsolate(); |
| 6137 i::Factory* factory = isolate->factory(); |
| 6138 LOG_API(isolate, "Map::AsArray"); |
| 6139 ENTER_V8(isolate); |
| 6140 i::Handle<i::OrderedHashMap> table(i::OrderedHashMap::cast(obj->table())); |
| 6141 int length = table->NumberOfElements(); |
| 6142 i::Handle<i::FixedArray> result = factory->NewFixedArray(length); |
| 6143 for (int i = 0; i < length; ++i) { |
| 6144 if (table->KeyAt(i)->IsTheHole()) continue; |
| 6145 i::HandleScope handle_scope(isolate); |
| 6146 i::Handle<i::FixedArray> entry = factory->NewFixedArray(2); |
| 6147 entry->set(0, table->KeyAt(i)); |
| 6148 entry->set(1, table->ValueAt(i)); |
| 6149 i::Handle<i::JSArray> entry_array = |
| 6150 factory->NewJSArrayWithElements(entry, i::FAST_ELEMENTS, 2); |
| 6151 result->set(i, *entry_array); |
| 6152 } |
| 6153 i::Handle<i::JSArray> result_array = |
| 6154 factory->NewJSArrayWithElements(result, i::FAST_ELEMENTS, length); |
| 6155 return Utils::ToLocal(result_array); |
| 6156 } |
| 6157 |
| 6158 |
6134 Local<v8::Set> v8::Set::New(Isolate* isolate) { | 6159 Local<v8::Set> v8::Set::New(Isolate* isolate) { |
6135 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 6160 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
6136 LOG_API(i_isolate, "Set::New"); | 6161 LOG_API(i_isolate, "Set::New"); |
6137 ENTER_V8(i_isolate); | 6162 ENTER_V8(i_isolate); |
6138 i::Handle<i::JSSet> obj = i_isolate->factory()->NewJSSet(); | 6163 i::Handle<i::JSSet> obj = i_isolate->factory()->NewJSSet(); |
6139 return Utils::ToLocal(obj); | 6164 return Utils::ToLocal(obj); |
6140 } | 6165 } |
6141 | 6166 |
6142 | 6167 |
6143 size_t v8::Set::Size() const { | 6168 size_t v8::Set::Size() const { |
6144 i::Handle<i::JSSet> obj = Utils::OpenHandle(this); | 6169 i::Handle<i::JSSet> obj = Utils::OpenHandle(this); |
6145 return i::OrderedHashSet::cast(obj->table())->NumberOfElements(); | 6170 return i::OrderedHashSet::cast(obj->table())->NumberOfElements(); |
6146 } | 6171 } |
6147 | 6172 |
6148 | 6173 |
| 6174 Local<Array> Set::AsArray() const { |
| 6175 i::Handle<i::JSSet> obj = Utils::OpenHandle(this); |
| 6176 i::Isolate* isolate = obj->GetIsolate(); |
| 6177 i::Factory* factory = isolate->factory(); |
| 6178 LOG_API(isolate, "Set::AsArray"); |
| 6179 ENTER_V8(isolate); |
| 6180 i::Handle<i::OrderedHashSet> table(i::OrderedHashSet::cast(obj->table())); |
| 6181 int length = table->NumberOfElements(); |
| 6182 i::Handle<i::FixedArray> result = factory->NewFixedArray(length); |
| 6183 for (int i = 0; i < length; ++i) { |
| 6184 i::Object* key = table->KeyAt(i); |
| 6185 if (!key->IsTheHole()) { |
| 6186 result->set(i, key); |
| 6187 } |
| 6188 } |
| 6189 i::Handle<i::JSArray> result_array = |
| 6190 factory->NewJSArrayWithElements(result, i::FAST_ELEMENTS, length); |
| 6191 return Utils::ToLocal(result_array); |
| 6192 } |
| 6193 |
| 6194 |
6149 bool Value::IsPromise() const { | 6195 bool Value::IsPromise() const { |
6150 auto self = Utils::OpenHandle(this); | 6196 auto self = Utils::OpenHandle(this); |
6151 return i::Object::IsPromise(self); | 6197 return i::Object::IsPromise(self); |
6152 } | 6198 } |
6153 | 6199 |
6154 | 6200 |
6155 MaybeLocal<Promise::Resolver> Promise::Resolver::New(Local<Context> context) { | 6201 MaybeLocal<Promise::Resolver> Promise::Resolver::New(Local<Context> context) { |
6156 PREPARE_FOR_EXECUTION(context, "Promise::Resolver::New", Resolver); | 6202 PREPARE_FOR_EXECUTION(context, "Promise::Resolver::New", Resolver); |
6157 i::Handle<i::Object> result; | 6203 i::Handle<i::Object> result; |
6158 has_pending_exception = !i::Execution::Call( | 6204 has_pending_exception = !i::Execution::Call( |
(...skipping 1994 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8153 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 8199 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
8154 Address callback_address = | 8200 Address callback_address = |
8155 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 8201 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
8156 VMState<EXTERNAL> state(isolate); | 8202 VMState<EXTERNAL> state(isolate); |
8157 ExternalCallbackScope call_scope(isolate, callback_address); | 8203 ExternalCallbackScope call_scope(isolate, callback_address); |
8158 callback(info); | 8204 callback(info); |
8159 } | 8205 } |
8160 | 8206 |
8161 | 8207 |
8162 } } // namespace v8::internal | 8208 } } // namespace v8::internal |
OLD | NEW |