| 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 1409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1420 AccessorNameSetterCallback setter, | 1420 AccessorNameSetterCallback setter, |
| 1421 v8::Handle<Value> data, | 1421 v8::Handle<Value> data, |
| 1422 AccessControl settings, | 1422 AccessControl settings, |
| 1423 PropertyAttribute attribute, | 1423 PropertyAttribute attribute, |
| 1424 v8::Handle<AccessorSignature> signature) { | 1424 v8::Handle<AccessorSignature> signature) { |
| 1425 TemplateSetAccessor( | 1425 TemplateSetAccessor( |
| 1426 this, name, getter, setter, data, settings, attribute, signature); | 1426 this, name, getter, setter, data, settings, attribute, signature); |
| 1427 } | 1427 } |
| 1428 | 1428 |
| 1429 | 1429 |
| 1430 void ObjectTemplate::SetNamedPropertyHandler( | 1430 template<typename Getter, typename Setter, typename Query, typename Deleter, |
| 1431 NamedPropertyGetterCallback getter, | 1431 typename Enumerator> |
| 1432 NamedPropertySetterCallback setter, | 1432 static void ObjectTemplateSetNamedPropertyHandler( |
| 1433 NamedPropertyQueryCallback query, | 1433 ObjectTemplate *templ, |
| 1434 NamedPropertyDeleterCallback remover, | 1434 Getter getter, |
| 1435 NamedPropertyEnumeratorCallback enumerator, | 1435 Setter setter, |
| 1436 Handle<Value> data) { | 1436 Query query, |
| 1437 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 1437 Deleter remover, |
| 1438 Enumerator enumerator, |
| 1439 Handle<Value> data, |
| 1440 bool can_intercept_symbols) { |
| 1441 i::Isolate* isolate = Utils::OpenHandle(templ)->GetIsolate(); |
| 1438 ENTER_V8(isolate); | 1442 ENTER_V8(isolate); |
| 1439 i::HandleScope scope(isolate); | 1443 i::HandleScope scope(isolate); |
| 1440 EnsureConstructor(isolate, this); | 1444 EnsureConstructor(isolate, templ); |
| 1441 i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast( | 1445 i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast( |
| 1442 Utils::OpenHandle(this)->constructor()); | 1446 Utils::OpenHandle(templ)->constructor()); |
| 1443 i::Handle<i::FunctionTemplateInfo> cons(constructor); | 1447 i::Handle<i::FunctionTemplateInfo> cons(constructor); |
| 1444 i::Handle<i::Struct> struct_obj = | 1448 i::Handle<i::Struct> struct_obj = |
| 1445 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE); | 1449 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE); |
| 1446 i::Handle<i::InterceptorInfo> obj = | 1450 i::Handle<i::InterceptorInfo> obj = |
| 1447 i::Handle<i::InterceptorInfo>::cast(struct_obj); | 1451 i::Handle<i::InterceptorInfo>::cast(struct_obj); |
| 1448 | 1452 |
| 1449 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter); | 1453 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter); |
| 1450 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter); | 1454 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter); |
| 1451 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query); | 1455 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query); |
| 1452 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover); | 1456 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover); |
| 1453 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator); | 1457 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator); |
| 1458 obj->set_flags(0); |
| 1459 obj->set_can_intercept_symbols(can_intercept_symbols); |
| 1454 | 1460 |
| 1455 if (data.IsEmpty()) { | 1461 if (data.IsEmpty()) { |
| 1456 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); | 1462 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); |
| 1457 } | 1463 } |
| 1458 obj->set_data(*Utils::OpenHandle(*data)); | 1464 obj->set_data(*Utils::OpenHandle(*data)); |
| 1459 cons->set_named_property_handler(*obj); | 1465 cons->set_named_property_handler(*obj); |
| 1460 } | 1466 } |
| 1461 | 1467 |
| 1462 | 1468 |
| 1469 void ObjectTemplate::SetNamedPropertyHandler( |
| 1470 NamedPropertyGetterCallback getter, |
| 1471 NamedPropertySetterCallback setter, |
| 1472 NamedPropertyQueryCallback query, |
| 1473 NamedPropertyDeleterCallback remover, |
| 1474 NamedPropertyEnumeratorCallback enumerator, |
| 1475 Handle<Value> data) { |
| 1476 ObjectTemplateSetNamedPropertyHandler( |
| 1477 this, getter, setter, query, remover, enumerator, data, false); |
| 1478 } |
| 1479 |
| 1480 |
| 1481 void ObjectTemplate::SetNamedPropertyHandler( |
| 1482 GenericNamedPropertyGetterCallback getter, |
| 1483 GenericNamedPropertySetterCallback setter, |
| 1484 GenericNamedPropertyQueryCallback query, |
| 1485 GenericNamedPropertyDeleterCallback remover, |
| 1486 GenericNamedPropertyEnumeratorCallback enumerator, |
| 1487 Handle<Value> data) { |
| 1488 ObjectTemplateSetNamedPropertyHandler( |
| 1489 this, getter, setter, query, remover, enumerator, data, true); |
| 1490 } |
| 1491 |
| 1492 |
| 1463 void ObjectTemplate::MarkAsUndetectable() { | 1493 void ObjectTemplate::MarkAsUndetectable() { |
| 1464 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 1494 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 1465 ENTER_V8(isolate); | 1495 ENTER_V8(isolate); |
| 1466 i::HandleScope scope(isolate); | 1496 i::HandleScope scope(isolate); |
| 1467 EnsureConstructor(isolate, this); | 1497 EnsureConstructor(isolate, this); |
| 1468 i::FunctionTemplateInfo* constructor = | 1498 i::FunctionTemplateInfo* constructor = |
| 1469 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor()); | 1499 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor()); |
| 1470 i::Handle<i::FunctionTemplateInfo> cons(constructor); | 1500 i::Handle<i::FunctionTemplateInfo> cons(constructor); |
| 1471 cons->set_undetectable(true); | 1501 cons->set_undetectable(true); |
| 1472 } | 1502 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1520 i::Handle<i::Struct> struct_obj = | 1550 i::Handle<i::Struct> struct_obj = |
| 1521 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE); | 1551 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE); |
| 1522 i::Handle<i::InterceptorInfo> obj = | 1552 i::Handle<i::InterceptorInfo> obj = |
| 1523 i::Handle<i::InterceptorInfo>::cast(struct_obj); | 1553 i::Handle<i::InterceptorInfo>::cast(struct_obj); |
| 1524 | 1554 |
| 1525 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter); | 1555 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter); |
| 1526 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter); | 1556 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter); |
| 1527 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query); | 1557 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query); |
| 1528 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover); | 1558 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover); |
| 1529 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator); | 1559 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator); |
| 1560 obj->set_flags(0); |
| 1530 | 1561 |
| 1531 if (data.IsEmpty()) { | 1562 if (data.IsEmpty()) { |
| 1532 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); | 1563 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); |
| 1533 } | 1564 } |
| 1534 obj->set_data(*Utils::OpenHandle(*data)); | 1565 obj->set_data(*Utils::OpenHandle(*data)); |
| 1535 cons->set_indexed_property_handler(*obj); | 1566 cons->set_indexed_property_handler(*obj); |
| 1536 } | 1567 } |
| 1537 | 1568 |
| 1538 | 1569 |
| 1539 void ObjectTemplate::SetCallAsFunctionHandler(FunctionCallback callback, | 1570 void ObjectTemplate::SetCallAsFunctionHandler(FunctionCallback callback, |
| (...skipping 6137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7677 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7708 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
| 7678 Address callback_address = | 7709 Address callback_address = |
| 7679 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7710 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 7680 VMState<EXTERNAL> state(isolate); | 7711 VMState<EXTERNAL> state(isolate); |
| 7681 ExternalCallbackScope call_scope(isolate, callback_address); | 7712 ExternalCallbackScope call_scope(isolate, callback_address); |
| 7682 callback(info); | 7713 callback(info); |
| 7683 } | 7714 } |
| 7684 | 7715 |
| 7685 | 7716 |
| 7686 } } // namespace v8::internal | 7717 } } // namespace v8::internal |
| OLD | NEW |