Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(157)

Side by Side Diff: src/api.cc

Issue 467013003: Add interceptor support for symbols (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Updated to filter out non-symbol keys from for-in enumeration Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « samples/process.cc ('k') | src/arguments.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « samples/process.cc ('k') | src/arguments.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698