| 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 1279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1290 AccessControl settings, | 1290 AccessControl settings, |
| 1291 PropertyAttribute attribute, | 1291 PropertyAttribute attribute, |
| 1292 v8::Handle<AccessorSignature> signature) { | 1292 v8::Handle<AccessorSignature> signature) { |
| 1293 TemplateSetAccessor( | 1293 TemplateSetAccessor( |
| 1294 this, name, getter, setter, data, settings, attribute, signature); | 1294 this, name, getter, setter, data, settings, attribute, signature); |
| 1295 } | 1295 } |
| 1296 | 1296 |
| 1297 | 1297 |
| 1298 template <typename Getter, typename Setter, typename Query, typename Deleter, | 1298 template <typename Getter, typename Setter, typename Query, typename Deleter, |
| 1299 typename Enumerator> | 1299 typename Enumerator> |
| 1300 static void ObjectTemplateSetNamedPropertyHandler( | 1300 static void ObjectTemplateSetNamedPropertyHandler(ObjectTemplate* templ, |
| 1301 ObjectTemplate* templ, Getter getter, Setter setter, Query query, | 1301 Getter getter, Setter setter, |
| 1302 Deleter remover, Enumerator enumerator, Handle<Value> data, | 1302 Query query, Deleter remover, |
| 1303 bool can_intercept_symbols, PropertyHandlerFlags flags) { | 1303 Enumerator enumerator, |
| 1304 Handle<Value> data, |
| 1305 PropertyHandlerFlags flags) { |
| 1304 i::Isolate* isolate = Utils::OpenHandle(templ)->GetIsolate(); | 1306 i::Isolate* isolate = Utils::OpenHandle(templ)->GetIsolate(); |
| 1305 ENTER_V8(isolate); | 1307 ENTER_V8(isolate); |
| 1306 i::HandleScope scope(isolate); | 1308 i::HandleScope scope(isolate); |
| 1307 auto cons = EnsureConstructor(isolate, templ); | 1309 auto cons = EnsureConstructor(isolate, templ); |
| 1308 EnsureNotInstantiated(cons, "ObjectTemplateSetNamedPropertyHandler"); | 1310 EnsureNotInstantiated(cons, "ObjectTemplateSetNamedPropertyHandler"); |
| 1309 auto obj = i::Handle<i::InterceptorInfo>::cast( | 1311 auto obj = i::Handle<i::InterceptorInfo>::cast( |
| 1310 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE)); | 1312 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE)); |
| 1311 | 1313 |
| 1312 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter); | 1314 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter); |
| 1313 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter); | 1315 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter); |
| 1314 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query); | 1316 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query); |
| 1315 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover); | 1317 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover); |
| 1316 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator); | 1318 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator); |
| 1317 obj->set_flags(0); | 1319 obj->set_flags(0); |
| 1318 obj->set_can_intercept_symbols(can_intercept_symbols); | 1320 obj->set_can_intercept_symbols( |
| 1321 !(static_cast<int>(flags) & |
| 1322 static_cast<int>(PropertyHandlerFlags::kOnlyInterceptStrings))); |
| 1319 obj->set_all_can_read(static_cast<int>(flags) & | 1323 obj->set_all_can_read(static_cast<int>(flags) & |
| 1320 static_cast<int>(PropertyHandlerFlags::kAllCanRead)); | 1324 static_cast<int>(PropertyHandlerFlags::kAllCanRead)); |
| 1325 obj->set_non_masking(static_cast<int>(flags) & |
| 1326 static_cast<int>(PropertyHandlerFlags::kNonMasking)); |
| 1321 | 1327 |
| 1322 if (data.IsEmpty()) { | 1328 if (data.IsEmpty()) { |
| 1323 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); | 1329 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); |
| 1324 } | 1330 } |
| 1325 obj->set_data(*Utils::OpenHandle(*data)); | 1331 obj->set_data(*Utils::OpenHandle(*data)); |
| 1326 cons->set_named_property_handler(*obj); | 1332 cons->set_named_property_handler(*obj); |
| 1327 } | 1333 } |
| 1328 | 1334 |
| 1329 | 1335 |
| 1330 void ObjectTemplate::SetNamedPropertyHandler( | 1336 void ObjectTemplate::SetNamedPropertyHandler( |
| 1331 NamedPropertyGetterCallback getter, NamedPropertySetterCallback setter, | 1337 NamedPropertyGetterCallback getter, NamedPropertySetterCallback setter, |
| 1332 NamedPropertyQueryCallback query, NamedPropertyDeleterCallback remover, | 1338 NamedPropertyQueryCallback query, NamedPropertyDeleterCallback remover, |
| 1333 NamedPropertyEnumeratorCallback enumerator, Handle<Value> data) { | 1339 NamedPropertyEnumeratorCallback enumerator, Handle<Value> data) { |
| 1334 ObjectTemplateSetNamedPropertyHandler(this, getter, setter, query, remover, | 1340 ObjectTemplateSetNamedPropertyHandler( |
| 1335 enumerator, data, false, | 1341 this, getter, setter, query, remover, enumerator, data, |
| 1336 PropertyHandlerFlags::kNone); | 1342 PropertyHandlerFlags::kOnlyInterceptStrings); |
| 1337 } | 1343 } |
| 1338 | 1344 |
| 1339 | 1345 |
| 1340 void ObjectTemplate::SetHandler( | 1346 void ObjectTemplate::SetHandler( |
| 1341 const NamedPropertyHandlerConfiguration& config) { | 1347 const NamedPropertyHandlerConfiguration& config) { |
| 1342 ObjectTemplateSetNamedPropertyHandler( | 1348 ObjectTemplateSetNamedPropertyHandler( |
| 1343 this, config.getter, config.setter, config.query, config.deleter, | 1349 this, config.getter, config.setter, config.query, config.deleter, |
| 1344 config.enumerator, config.data, true, config.flags); | 1350 config.enumerator, config.data, config.flags); |
| 1345 } | 1351 } |
| 1346 | 1352 |
| 1347 | 1353 |
| 1348 void ObjectTemplate::MarkAsUndetectable() { | 1354 void ObjectTemplate::MarkAsUndetectable() { |
| 1349 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 1355 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 1350 ENTER_V8(isolate); | 1356 ENTER_V8(isolate); |
| 1351 i::HandleScope scope(isolate); | 1357 i::HandleScope scope(isolate); |
| 1352 auto cons = EnsureConstructor(isolate, this); | 1358 auto cons = EnsureConstructor(isolate, this); |
| 1353 EnsureNotInstantiated(cons, "v8::ObjectTemplate::MarkAsUndetectable"); | 1359 EnsureNotInstantiated(cons, "v8::ObjectTemplate::MarkAsUndetectable"); |
| 1354 cons->set_undetectable(true); | 1360 cons->set_undetectable(true); |
| (...skipping 6671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8026 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 8032 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
| 8027 Address callback_address = | 8033 Address callback_address = |
| 8028 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 8034 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 8029 VMState<EXTERNAL> state(isolate); | 8035 VMState<EXTERNAL> state(isolate); |
| 8030 ExternalCallbackScope call_scope(isolate, callback_address); | 8036 ExternalCallbackScope call_scope(isolate, callback_address); |
| 8031 callback(info); | 8037 callback(info); |
| 8032 } | 8038 } |
| 8033 | 8039 |
| 8034 | 8040 |
| 8035 } } // namespace v8::internal | 8041 } } // namespace v8::internal |
| OLD | NEW |