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

Side by Side Diff: src/api.cc

Issue 23513004: remove old style callbacks (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: inlined a function used once Created 7 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
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1031 matching lines...) Expand 10 before | Expand all | Expand 10 after
1042 1042
1043 1043
1044 void FunctionTemplate::Inherit(v8::Handle<FunctionTemplate> value) { 1044 void FunctionTemplate::Inherit(v8::Handle<FunctionTemplate> value) {
1045 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1045 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1046 if (IsDeadCheck(isolate, "v8::FunctionTemplate::Inherit()")) return; 1046 if (IsDeadCheck(isolate, "v8::FunctionTemplate::Inherit()")) return;
1047 ENTER_V8(isolate); 1047 ENTER_V8(isolate);
1048 Utils::OpenHandle(this)->set_parent_template(*Utils::OpenHandle(*value)); 1048 Utils::OpenHandle(this)->set_parent_template(*Utils::OpenHandle(*value));
1049 } 1049 }
1050 1050
1051 1051
1052 // TODO(dcarney): Remove this abstraction when old callbacks are removed. 1052 Local<FunctionTemplate> FunctionTemplate::New(
1053 class CallHandlerHelper { 1053 FunctionCallback callback,
1054 public:
1055 static inline void Set(Local<FunctionTemplate> function_template,
1056 InvocationCallback callback,
1057 v8::Handle<Value> data) {
1058 function_template->SetCallHandlerInternal(callback, data);
1059 }
1060 static inline void Set(Local<FunctionTemplate> function_template,
1061 FunctionCallback callback,
1062 v8::Handle<Value> data) {
1063 function_template->SetCallHandler(callback, data);
1064 }
1065 };
1066
1067
1068 template<typename Callback>
1069 static Local<FunctionTemplate> FunctionTemplateNew(
1070 Callback callback,
1071 v8::Handle<Value> data, 1054 v8::Handle<Value> data,
1072 v8::Handle<Signature> signature, 1055 v8::Handle<Signature> signature,
1073 int length) { 1056 int length) {
1074 i::Isolate* isolate = i::Isolate::Current(); 1057 i::Isolate* isolate = i::Isolate::Current();
1075 EnsureInitializedForIsolate(isolate, "v8::FunctionTemplate::New()"); 1058 EnsureInitializedForIsolate(isolate, "v8::FunctionTemplate::New()");
1076 LOG_API(isolate, "FunctionTemplate::New"); 1059 LOG_API(isolate, "FunctionTemplate::New");
1077 ENTER_V8(isolate); 1060 ENTER_V8(isolate);
1078 i::Handle<i::Struct> struct_obj = 1061 i::Handle<i::Struct> struct_obj =
1079 isolate->factory()->NewStruct(i::FUNCTION_TEMPLATE_INFO_TYPE); 1062 isolate->factory()->NewStruct(i::FUNCTION_TEMPLATE_INFO_TYPE);
1080 i::Handle<i::FunctionTemplateInfo> obj = 1063 i::Handle<i::FunctionTemplateInfo> obj =
1081 i::Handle<i::FunctionTemplateInfo>::cast(struct_obj); 1064 i::Handle<i::FunctionTemplateInfo>::cast(struct_obj);
1082 InitializeFunctionTemplate(obj); 1065 InitializeFunctionTemplate(obj);
1083 int next_serial_number = isolate->next_serial_number(); 1066 int next_serial_number = isolate->next_serial_number();
1084 isolate->set_next_serial_number(next_serial_number + 1); 1067 isolate->set_next_serial_number(next_serial_number + 1);
1085 obj->set_serial_number(i::Smi::FromInt(next_serial_number)); 1068 obj->set_serial_number(i::Smi::FromInt(next_serial_number));
1086 if (callback != 0) { 1069 if (callback != 0) {
1087 if (data.IsEmpty()) data = v8::Undefined(); 1070 if (data.IsEmpty()) data = v8::Undefined();
1088 CallHandlerHelper::Set(Utils::ToLocal(obj), callback, data); 1071 Utils::ToLocal(obj)->SetCallHandler(callback, data);
1089 } 1072 }
1090 obj->set_length(length); 1073 obj->set_length(length);
1091 obj->set_undetectable(false); 1074 obj->set_undetectable(false);
1092 obj->set_needs_access_check(false); 1075 obj->set_needs_access_check(false);
1093 1076
1094 if (!signature.IsEmpty()) 1077 if (!signature.IsEmpty())
1095 obj->set_signature(*Utils::OpenHandle(*signature)); 1078 obj->set_signature(*Utils::OpenHandle(*signature));
1096 return Utils::ToLocal(obj); 1079 return Utils::ToLocal(obj);
1097 } 1080 }
1098 1081
1099 1082
1100 Local<FunctionTemplate> FunctionTemplate::New(
1101 InvocationCallback callback,
1102 v8::Handle<Value> data,
1103 v8::Handle<Signature> signature,
1104 int length) {
1105 return FunctionTemplateNew(callback, data, signature, length);
1106 }
1107
1108
1109 Local<FunctionTemplate> FunctionTemplate::New(
1110 FunctionCallback callback,
1111 v8::Handle<Value> data,
1112 v8::Handle<Signature> signature,
1113 int length) {
1114 return FunctionTemplateNew(callback, data, signature, length);
1115 }
1116
1117
1118 Local<Signature> Signature::New(Handle<FunctionTemplate> receiver, 1083 Local<Signature> Signature::New(Handle<FunctionTemplate> receiver,
1119 int argc, Handle<FunctionTemplate> argv[]) { 1084 int argc, Handle<FunctionTemplate> argv[]) {
1120 i::Isolate* isolate = i::Isolate::Current(); 1085 i::Isolate* isolate = i::Isolate::Current();
1121 EnsureInitializedForIsolate(isolate, "v8::Signature::New()"); 1086 EnsureInitializedForIsolate(isolate, "v8::Signature::New()");
1122 LOG_API(isolate, "Signature::New"); 1087 LOG_API(isolate, "Signature::New");
1123 ENTER_V8(isolate); 1088 ENTER_V8(isolate);
1124 i::Handle<i::Struct> struct_obj = 1089 i::Handle<i::Struct> struct_obj =
1125 isolate->factory()->NewStruct(i::SIGNATURE_INFO_TYPE); 1090 isolate->factory()->NewStruct(i::SIGNATURE_INFO_TYPE);
1126 i::Handle<i::SignatureInfo> obj = 1091 i::Handle<i::SignatureInfo> obj =
1127 i::Handle<i::SignatureInfo>::cast(struct_obj); 1092 i::Handle<i::SignatureInfo>::cast(struct_obj);
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
1297 return 0; 1262 return 0;
1298 } 1263 }
1299 1264
1300 1265
1301 #define SET_FIELD_WRAPPED(obj, setter, cdata) do { \ 1266 #define SET_FIELD_WRAPPED(obj, setter, cdata) do { \
1302 i::Handle<i::Object> foreign = FromCData(cdata); \ 1267 i::Handle<i::Object> foreign = FromCData(cdata); \
1303 (obj)->setter(*foreign); \ 1268 (obj)->setter(*foreign); \
1304 } while (false) 1269 } while (false)
1305 1270
1306 1271
1307 template<typename Callback> 1272 void FunctionTemplate::SetCallHandler(FunctionCallback callback,
1308 static void FunctionTemplateSetCallHandler(FunctionTemplate* function_template, 1273 v8::Handle<Value> data) {
1309 Callback callback_in, 1274 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1310 v8::Handle<Value> data) {
1311 i::Isolate* isolate = Utils::OpenHandle(function_template)->GetIsolate();
1312 if (IsDeadCheck(isolate, "v8::FunctionTemplate::SetCallHandler()")) return; 1275 if (IsDeadCheck(isolate, "v8::FunctionTemplate::SetCallHandler()")) return;
1313 ENTER_V8(isolate); 1276 ENTER_V8(isolate);
1314 i::HandleScope scope(isolate); 1277 i::HandleScope scope(isolate);
1315 i::Handle<i::Struct> struct_obj = 1278 i::Handle<i::Struct> struct_obj =
1316 isolate->factory()->NewStruct(i::CALL_HANDLER_INFO_TYPE); 1279 isolate->factory()->NewStruct(i::CALL_HANDLER_INFO_TYPE);
1317 i::Handle<i::CallHandlerInfo> obj = 1280 i::Handle<i::CallHandlerInfo> obj =
1318 i::Handle<i::CallHandlerInfo>::cast(struct_obj); 1281 i::Handle<i::CallHandlerInfo>::cast(struct_obj);
1319 FunctionCallback callback =
1320 i::CallbackTable::Register(isolate, callback_in);
1321 SET_FIELD_WRAPPED(obj, set_callback, callback); 1282 SET_FIELD_WRAPPED(obj, set_callback, callback);
1322 if (data.IsEmpty()) data = v8::Undefined(); 1283 if (data.IsEmpty()) data = v8::Undefined();
1323 obj->set_data(*Utils::OpenHandle(*data)); 1284 obj->set_data(*Utils::OpenHandle(*data));
1324 Utils::OpenHandle(function_template)->set_call_code(*obj); 1285 Utils::OpenHandle(this)->set_call_code(*obj);
1325 } 1286 }
1326 1287
1327 void FunctionTemplate::SetCallHandler(InvocationCallback callback,
1328 v8::Handle<Value> data) {
1329 FunctionTemplateSetCallHandler(this, callback, data);
1330 }
1331
1332 void FunctionTemplate::SetCallHandlerInternal(InvocationCallback callback,
1333 v8::Handle<Value> data) {
1334 FunctionTemplateSetCallHandler(this, callback, data);
1335 }
1336
1337 void FunctionTemplate::SetCallHandler(FunctionCallback callback,
1338 v8::Handle<Value> data) {
1339 FunctionTemplateSetCallHandler(this, callback, data);
1340 }
1341 1288
1342 static i::Handle<i::AccessorInfo> SetAccessorInfoProperties( 1289 static i::Handle<i::AccessorInfo> SetAccessorInfoProperties(
1343 i::Handle<i::AccessorInfo> obj, 1290 i::Handle<i::AccessorInfo> obj,
1344 v8::Handle<String> name, 1291 v8::Handle<String> name,
1345 v8::AccessControl settings, 1292 v8::AccessControl settings,
1346 v8::PropertyAttribute attributes, 1293 v8::PropertyAttribute attributes,
1347 v8::Handle<AccessorSignature> signature) { 1294 v8::Handle<AccessorSignature> signature) {
1348 obj->set_name(*Utils::OpenHandle(*name)); 1295 obj->set_name(*Utils::OpenHandle(*name));
1349 if (settings & ALL_CAN_READ) obj->set_all_can_read(true); 1296 if (settings & ALL_CAN_READ) obj->set_all_can_read(true);
1350 if (settings & ALL_CAN_WRITE) obj->set_all_can_write(true); 1297 if (settings & ALL_CAN_WRITE) obj->set_all_can_write(true);
1351 if (settings & PROHIBITS_OVERWRITING) obj->set_prohibits_overwriting(true); 1298 if (settings & PROHIBITS_OVERWRITING) obj->set_prohibits_overwriting(true);
1352 obj->set_property_attributes(static_cast<PropertyAttributes>(attributes)); 1299 obj->set_property_attributes(static_cast<PropertyAttributes>(attributes));
1353 if (!signature.IsEmpty()) { 1300 if (!signature.IsEmpty()) {
1354 obj->set_expected_receiver_type(*Utils::OpenHandle(*signature)); 1301 obj->set_expected_receiver_type(*Utils::OpenHandle(*signature));
1355 } 1302 }
1356 return obj; 1303 return obj;
1357 } 1304 }
1358 1305
1359 1306
1360 template<typename Getter, typename Setter> 1307 template<typename Getter, typename Setter>
1361 static i::Handle<i::AccessorInfo> MakeAccessorInfo( 1308 static i::Handle<i::AccessorInfo> MakeAccessorInfo(
1362 v8::Handle<String> name, 1309 v8::Handle<String> name,
1363 Getter getter_in, 1310 Getter getter,
1364 Setter setter_in, 1311 Setter setter,
1365 v8::Handle<Value> data, 1312 v8::Handle<Value> data,
1366 v8::AccessControl settings, 1313 v8::AccessControl settings,
1367 v8::PropertyAttribute attributes, 1314 v8::PropertyAttribute attributes,
1368 v8::Handle<AccessorSignature> signature) { 1315 v8::Handle<AccessorSignature> signature) {
1369 i::Isolate* isolate = Utils::OpenHandle(*name)->GetIsolate(); 1316 i::Isolate* isolate = Utils::OpenHandle(*name)->GetIsolate();
1370 i::Handle<i::ExecutableAccessorInfo> obj = 1317 i::Handle<i::ExecutableAccessorInfo> obj =
1371 isolate->factory()->NewExecutableAccessorInfo(); 1318 isolate->factory()->NewExecutableAccessorInfo();
1372 AccessorGetterCallback getter =
1373 i::CallbackTable::Register(isolate, getter_in);
1374 SET_FIELD_WRAPPED(obj, set_getter, getter); 1319 SET_FIELD_WRAPPED(obj, set_getter, getter);
1375 AccessorSetterCallback setter =
1376 i::CallbackTable::Register(isolate, setter_in);
1377 SET_FIELD_WRAPPED(obj, set_setter, setter); 1320 SET_FIELD_WRAPPED(obj, set_setter, setter);
1378 if (data.IsEmpty()) data = v8::Undefined(); 1321 if (data.IsEmpty()) data = v8::Undefined();
1379 obj->set_data(*Utils::OpenHandle(*data)); 1322 obj->set_data(*Utils::OpenHandle(*data));
1380 return SetAccessorInfoProperties(obj, name, settings, attributes, signature); 1323 return SetAccessorInfoProperties(obj, name, settings, attributes, signature);
1381 } 1324 }
1382 1325
1383 1326
1384 static i::Handle<i::AccessorInfo> MakeAccessorInfo( 1327 static i::Handle<i::AccessorInfo> MakeAccessorInfo(
1385 v8::Handle<String> name, 1328 v8::Handle<String> name,
1386 v8::Handle<v8::DeclaredAccessorDescriptor> descriptor, 1329 v8::Handle<v8::DeclaredAccessorDescriptor> descriptor,
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1455 void FunctionTemplate::RemovePrototype() { 1398 void FunctionTemplate::RemovePrototype() {
1456 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1399 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1457 if (IsDeadCheck(isolate, "v8::FunctionTemplate::RemovePrototype()")) { 1400 if (IsDeadCheck(isolate, "v8::FunctionTemplate::RemovePrototype()")) {
1458 return; 1401 return;
1459 } 1402 }
1460 ENTER_V8(isolate); 1403 ENTER_V8(isolate);
1461 Utils::OpenHandle(this)->set_remove_prototype(true); 1404 Utils::OpenHandle(this)->set_remove_prototype(true);
1462 } 1405 }
1463 1406
1464 1407
1465 template<
1466 typename Getter,
1467 typename Setter,
1468 typename Query,
1469 typename Deleter,
1470 typename Enumerator>
1471 static void SetNamedInstancePropertyHandler(
1472 i::Handle<i::FunctionTemplateInfo> function_template,
1473 Getter getter_in,
1474 Setter setter_in,
1475 Query query_in,
1476 Deleter remover_in,
1477 Enumerator enumerator_in,
1478 Handle<Value> data) {
1479 i::Isolate* isolate = function_template->GetIsolate();
1480 if (IsDeadCheck(isolate,
1481 "v8::FunctionTemplate::SetNamedInstancePropertyHandler()")) {
1482 return;
1483 }
1484 ENTER_V8(isolate);
1485 i::HandleScope scope(isolate);
1486 i::Handle<i::Struct> struct_obj =
1487 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE);
1488 i::Handle<i::InterceptorInfo> obj =
1489 i::Handle<i::InterceptorInfo>::cast(struct_obj);
1490
1491 NamedPropertyGetterCallback getter =
1492 i::CallbackTable::Register(isolate, getter_in);
1493 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter);
1494 NamedPropertySetterCallback setter =
1495 i::CallbackTable::Register(isolate, setter_in);
1496 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter);
1497 NamedPropertyQueryCallback query =
1498 i::CallbackTable::Register(isolate, query_in);
1499 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query);
1500 NamedPropertyDeleterCallback remover =
1501 i::CallbackTable::Register(isolate, remover_in);
1502 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover);
1503 NamedPropertyEnumeratorCallback enumerator =
1504 i::CallbackTable::Register(isolate, enumerator_in);
1505 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator);
1506
1507 if (data.IsEmpty()) data = v8::Undefined();
1508 obj->set_data(*Utils::OpenHandle(*data));
1509 function_template->set_named_property_handler(*obj);
1510 }
1511
1512
1513 template<
1514 typename Getter,
1515 typename Setter,
1516 typename Query,
1517 typename Deleter,
1518 typename Enumerator>
1519 static void SetIndexedInstancePropertyHandler(
1520 i::Handle<i::FunctionTemplateInfo> function_template,
1521 Getter getter_in,
1522 Setter setter_in,
1523 Query query_in,
1524 Deleter remover_in,
1525 Enumerator enumerator_in,
1526 Handle<Value> data) {
1527 i::Isolate* isolate = function_template->GetIsolate();
1528 if (IsDeadCheck(isolate,
1529 "v8::FunctionTemplate::SetIndexedInstancePropertyHandler()")) {
1530 return;
1531 }
1532 ENTER_V8(isolate);
1533 i::HandleScope scope(isolate);
1534 i::Handle<i::Struct> struct_obj =
1535 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE);
1536 i::Handle<i::InterceptorInfo> obj =
1537 i::Handle<i::InterceptorInfo>::cast(struct_obj);
1538
1539 IndexedPropertyGetterCallback getter =
1540 i::CallbackTable::Register(isolate, getter_in);
1541 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter);
1542 IndexedPropertySetterCallback setter =
1543 i::CallbackTable::Register(isolate, setter_in);
1544 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter);
1545 IndexedPropertyQueryCallback query =
1546 i::CallbackTable::Register(isolate, query_in);
1547 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query);
1548 IndexedPropertyDeleterCallback remover =
1549 i::CallbackTable::Register(isolate, remover_in);
1550 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover);
1551 IndexedPropertyEnumeratorCallback enumerator =
1552 i::CallbackTable::Register(isolate, enumerator_in);
1553 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator);
1554
1555 if (data.IsEmpty()) data = v8::Undefined();
1556 obj->set_data(*Utils::OpenHandle(*data));
1557 function_template->set_indexed_property_handler(*obj);
1558 }
1559
1560
1561 template<typename Callback>
1562 static void SetInstanceCallAsFunctionHandler(
1563 i::Handle<i::FunctionTemplateInfo> function_template,
1564 Callback callback_in,
1565 Handle<Value> data) {
1566 i::Isolate* isolate = function_template->GetIsolate();
1567 if (IsDeadCheck(isolate,
1568 "v8::FunctionTemplate::SetInstanceCallAsFunctionHandler()")) {
1569 return;
1570 }
1571 ENTER_V8(isolate);
1572 i::HandleScope scope(isolate);
1573 i::Handle<i::Struct> struct_obj =
1574 isolate->factory()->NewStruct(i::CALL_HANDLER_INFO_TYPE);
1575 i::Handle<i::CallHandlerInfo> obj =
1576 i::Handle<i::CallHandlerInfo>::cast(struct_obj);
1577 FunctionCallback callback =
1578 i::CallbackTable::Register(isolate, callback_in);
1579 SET_FIELD_WRAPPED(obj, set_callback, callback);
1580 if (data.IsEmpty()) data = v8::Undefined();
1581 obj->set_data(*Utils::OpenHandle(*data));
1582 function_template->set_instance_call_handler(*obj);
1583 }
1584
1585
1586 // --- O b j e c t T e m p l a t e --- 1408 // --- O b j e c t T e m p l a t e ---
1587 1409
1588 1410
1589 Local<ObjectTemplate> ObjectTemplate::New() { 1411 Local<ObjectTemplate> ObjectTemplate::New() {
1590 return New(Local<FunctionTemplate>()); 1412 return New(Local<FunctionTemplate>());
1591 } 1413 }
1592 1414
1593 1415
1594 Local<ObjectTemplate> ObjectTemplate::New( 1416 Local<ObjectTemplate> ObjectTemplate::New(
1595 v8::Handle<FunctionTemplate> constructor) { 1417 v8::Handle<FunctionTemplate> constructor) {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1657 i::Handle<i::FunctionTemplateInfo> cons(constructor); 1479 i::Handle<i::FunctionTemplateInfo> cons(constructor);
1658 i::Handle<i::AccessorInfo> obj = MakeAccessorInfo( 1480 i::Handle<i::AccessorInfo> obj = MakeAccessorInfo(
1659 name, getter, setter, data, settings, attribute, signature); 1481 name, getter, setter, data, settings, attribute, signature);
1660 if (obj.is_null()) return false; 1482 if (obj.is_null()) return false;
1661 AddPropertyToFunctionTemplate(cons, obj); 1483 AddPropertyToFunctionTemplate(cons, obj);
1662 return true; 1484 return true;
1663 } 1485 }
1664 1486
1665 1487
1666 void ObjectTemplate::SetAccessor(v8::Handle<String> name, 1488 void ObjectTemplate::SetAccessor(v8::Handle<String> name,
1667 AccessorGetter getter,
1668 AccessorSetter setter,
1669 v8::Handle<Value> data,
1670 AccessControl settings,
1671 PropertyAttribute attribute,
1672 v8::Handle<AccessorSignature> signature) {
1673 ObjectTemplateSetAccessor(
1674 this, name, getter, setter, data, settings, attribute, signature);
1675 }
1676
1677
1678 void ObjectTemplate::SetAccessor(v8::Handle<String> name,
1679 AccessorGetterCallback getter, 1489 AccessorGetterCallback getter,
1680 AccessorSetterCallback setter, 1490 AccessorSetterCallback setter,
1681 v8::Handle<Value> data, 1491 v8::Handle<Value> data,
1682 AccessControl settings, 1492 AccessControl settings,
1683 PropertyAttribute attribute, 1493 PropertyAttribute attribute,
1684 v8::Handle<AccessorSignature> signature) { 1494 v8::Handle<AccessorSignature> signature) {
1685 ObjectTemplateSetAccessor( 1495 ObjectTemplateSetAccessor(
1686 this, name, getter, setter, data, settings, attribute, signature); 1496 this, name, getter, setter, data, settings, attribute, signature);
1687 } 1497 }
1688 1498
1689 1499
1690 bool ObjectTemplate::SetAccessor(Handle<String> name, 1500 bool ObjectTemplate::SetAccessor(Handle<String> name,
1691 Handle<DeclaredAccessorDescriptor> descriptor, 1501 Handle<DeclaredAccessorDescriptor> descriptor,
1692 AccessControl settings, 1502 AccessControl settings,
1693 PropertyAttribute attribute, 1503 PropertyAttribute attribute,
1694 Handle<AccessorSignature> signature) { 1504 Handle<AccessorSignature> signature) {
1695 void* null = NULL; 1505 void* null = NULL;
1696 return ObjectTemplateSetAccessor( 1506 return ObjectTemplateSetAccessor(
1697 this, name, descriptor, null, null, settings, attribute, signature); 1507 this, name, descriptor, null, null, settings, attribute, signature);
1698 } 1508 }
1699 1509
1700 1510
1701 template<
1702 typename Getter,
1703 typename Setter,
1704 typename Query,
1705 typename Deleter,
1706 typename Enumerator>
1707 static void ObjectTemplateSetNamedPropertyHandler(
1708 ObjectTemplate* object_template,
1709 Getter getter,
1710 Setter setter,
1711 Query query,
1712 Deleter remover,
1713 Enumerator enumerator,
1714 Handle<Value> data) {
1715 i::Isolate* isolate = Utils::OpenHandle(object_template)->GetIsolate();
1716 if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetNamedPropertyHandler()")) {
1717 return;
1718 }
1719 ENTER_V8(isolate);
1720 i::HandleScope scope(isolate);
1721 EnsureConstructor(object_template);
1722 i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast(
1723 Utils::OpenHandle(object_template)->constructor());
1724 i::Handle<i::FunctionTemplateInfo> cons(constructor);
1725 SetNamedInstancePropertyHandler(cons,
1726 getter,
1727 setter,
1728 query,
1729 remover,
1730 enumerator,
1731 data);
1732 }
1733
1734
1735 void ObjectTemplate::SetNamedPropertyHandler(
1736 NamedPropertyGetter getter,
1737 NamedPropertySetter setter,
1738 NamedPropertyQuery query,
1739 NamedPropertyDeleter remover,
1740 NamedPropertyEnumerator enumerator,
1741 Handle<Value> data) {
1742 ObjectTemplateSetNamedPropertyHandler(
1743 this, getter, setter, query, remover, enumerator, data);
1744 }
1745
1746
1747 void ObjectTemplate::SetNamedPropertyHandler( 1511 void ObjectTemplate::SetNamedPropertyHandler(
1748 NamedPropertyGetterCallback getter, 1512 NamedPropertyGetterCallback getter,
1749 NamedPropertySetterCallback setter, 1513 NamedPropertySetterCallback setter,
1750 NamedPropertyQueryCallback query, 1514 NamedPropertyQueryCallback query,
1751 NamedPropertyDeleterCallback remover, 1515 NamedPropertyDeleterCallback remover,
1752 NamedPropertyEnumeratorCallback enumerator, 1516 NamedPropertyEnumeratorCallback enumerator,
1753 Handle<Value> data) { 1517 Handle<Value> data) {
1754 ObjectTemplateSetNamedPropertyHandler( 1518 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1755 this, getter, setter, query, remover, enumerator, data); 1519 if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetNamedPropertyHandler()")) {
1520 return;
1521 }
1522 ENTER_V8(isolate);
1523 i::HandleScope scope(isolate);
1524 EnsureConstructor(this);
1525 i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast(
1526 Utils::OpenHandle(this)->constructor());
1527 i::Handle<i::FunctionTemplateInfo> cons(constructor);
1528 i::Handle<i::Struct> struct_obj =
1529 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE);
1530 i::Handle<i::InterceptorInfo> obj =
1531 i::Handle<i::InterceptorInfo>::cast(struct_obj);
1532
1533 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter);
1534 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter);
1535 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query);
1536 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover);
1537 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator);
1538
1539 if (data.IsEmpty()) data = v8::Undefined();
1540 obj->set_data(*Utils::OpenHandle(*data));
1541 cons->set_named_property_handler(*obj);
1756 } 1542 }
1757 1543
1758 1544
1759 void ObjectTemplate::MarkAsUndetectable() { 1545 void ObjectTemplate::MarkAsUndetectable() {
1760 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1546 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1761 if (IsDeadCheck(isolate, "v8::ObjectTemplate::MarkAsUndetectable()")) return; 1547 if (IsDeadCheck(isolate, "v8::ObjectTemplate::MarkAsUndetectable()")) return;
1762 ENTER_V8(isolate); 1548 ENTER_V8(isolate);
1763 i::HandleScope scope(isolate); 1549 i::HandleScope scope(isolate);
1764 EnsureConstructor(this); 1550 EnsureConstructor(this);
1765 i::FunctionTemplateInfo* constructor = 1551 i::FunctionTemplateInfo* constructor =
(...skipping 28 matching lines...) Expand all
1794 info->set_data(*Utils::OpenHandle(*data)); 1580 info->set_data(*Utils::OpenHandle(*data));
1795 1581
1796 i::FunctionTemplateInfo* constructor = 1582 i::FunctionTemplateInfo* constructor =
1797 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor()); 1583 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor());
1798 i::Handle<i::FunctionTemplateInfo> cons(constructor); 1584 i::Handle<i::FunctionTemplateInfo> cons(constructor);
1799 cons->set_access_check_info(*info); 1585 cons->set_access_check_info(*info);
1800 cons->set_needs_access_check(turned_on_by_default); 1586 cons->set_needs_access_check(turned_on_by_default);
1801 } 1587 }
1802 1588
1803 1589
1804 template<
1805 typename Getter,
1806 typename Setter,
1807 typename Query,
1808 typename Deleter,
1809 typename Enumerator>
1810 void ObjectTemplateSetIndexedPropertyHandler(
1811 ObjectTemplate* object_template,
1812 Getter getter,
1813 Setter setter,
1814 Query query,
1815 Deleter remover,
1816 Enumerator enumerator,
1817 Handle<Value> data) {
1818 i::Isolate* isolate = Utils::OpenHandle(object_template)->GetIsolate();
1819 if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetIndexedPropertyHandler()")) {
1820 return;
1821 }
1822 ENTER_V8(isolate);
1823 i::HandleScope scope(isolate);
1824 EnsureConstructor(object_template);
1825 i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast(
1826 Utils::OpenHandle(object_template)->constructor());
1827 i::Handle<i::FunctionTemplateInfo> cons(constructor);
1828 SetIndexedInstancePropertyHandler(cons,
1829 getter,
1830 setter,
1831 query,
1832 remover,
1833 enumerator,
1834 data);
1835 }
1836
1837
1838 void ObjectTemplate::SetIndexedPropertyHandler(
1839 IndexedPropertyGetter getter,
1840 IndexedPropertySetter setter,
1841 IndexedPropertyQuery query,
1842 IndexedPropertyDeleter remover,
1843 IndexedPropertyEnumerator enumerator,
1844 Handle<Value> data) {
1845 ObjectTemplateSetIndexedPropertyHandler(
1846 this, getter, setter, query, remover, enumerator, data);
1847 }
1848
1849
1850 void ObjectTemplate::SetIndexedPropertyHandler( 1590 void ObjectTemplate::SetIndexedPropertyHandler(
1851 IndexedPropertyGetterCallback getter, 1591 IndexedPropertyGetterCallback getter,
1852 IndexedPropertySetterCallback setter, 1592 IndexedPropertySetterCallback setter,
1853 IndexedPropertyQueryCallback query, 1593 IndexedPropertyQueryCallback query,
1854 IndexedPropertyDeleterCallback remover, 1594 IndexedPropertyDeleterCallback remover,
1855 IndexedPropertyEnumeratorCallback enumerator, 1595 IndexedPropertyEnumeratorCallback enumerator,
1856 Handle<Value> data) { 1596 Handle<Value> data) {
1857 ObjectTemplateSetIndexedPropertyHandler( 1597 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1858 this, getter, setter, query, remover, enumerator, data); 1598 if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetIndexedPropertyHandler()")) {
1599 return;
1600 }
1601 ENTER_V8(isolate);
1602 i::HandleScope scope(isolate);
1603 EnsureConstructor(this);
1604 i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast(
1605 Utils::OpenHandle(this)->constructor());
1606 i::Handle<i::FunctionTemplateInfo> cons(constructor);
1607 i::Handle<i::Struct> struct_obj =
1608 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE);
1609 i::Handle<i::InterceptorInfo> obj =
1610 i::Handle<i::InterceptorInfo>::cast(struct_obj);
1611
1612 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter);
1613 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter);
1614 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query);
1615 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover);
1616 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator);
1617
1618 if (data.IsEmpty()) data = v8::Undefined();
1619 obj->set_data(*Utils::OpenHandle(*data));
1620 cons->set_indexed_property_handler(*obj);
1859 } 1621 }
1860 1622
1861 1623
1862 template<typename Callback> 1624 void ObjectTemplate::SetCallAsFunctionHandler(FunctionCallback callback,
1863 static void ObjectTemplateSetCallAsFunctionHandler( 1625 Handle<Value> data) {
1864 ObjectTemplate* object_template, 1626 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1865 Callback callback,
1866 Handle<Value> data) {
1867 i::Isolate* isolate = Utils::OpenHandle(object_template)->GetIsolate();
1868 if (IsDeadCheck(isolate, 1627 if (IsDeadCheck(isolate,
1869 "v8::ObjectTemplate::SetCallAsFunctionHandler()")) { 1628 "v8::ObjectTemplate::SetCallAsFunctionHandler()")) {
1870 return; 1629 return;
1871 } 1630 }
1872 ENTER_V8(isolate); 1631 ENTER_V8(isolate);
1873 i::HandleScope scope(isolate); 1632 i::HandleScope scope(isolate);
1874 EnsureConstructor(object_template); 1633 EnsureConstructor(this);
1875 i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast( 1634 i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast(
1876 Utils::OpenHandle(object_template)->constructor()); 1635 Utils::OpenHandle(this)->constructor());
1877 i::Handle<i::FunctionTemplateInfo> cons(constructor); 1636 i::Handle<i::FunctionTemplateInfo> cons(constructor);
1878 SetInstanceCallAsFunctionHandler(cons, callback, data); 1637 i::Handle<i::Struct> struct_obj =
1638 isolate->factory()->NewStruct(i::CALL_HANDLER_INFO_TYPE);
1639 i::Handle<i::CallHandlerInfo> obj =
1640 i::Handle<i::CallHandlerInfo>::cast(struct_obj);
1641 SET_FIELD_WRAPPED(obj, set_callback, callback);
1642 if (data.IsEmpty()) data = v8::Undefined();
1643 obj->set_data(*Utils::OpenHandle(*data));
1644 cons->set_instance_call_handler(*obj);
1879 } 1645 }
1880 1646
1881 1647
1882 void ObjectTemplate::SetCallAsFunctionHandler(InvocationCallback callback,
1883 Handle<Value> data) {
1884 return ObjectTemplateSetCallAsFunctionHandler(this, callback, data);
1885 }
1886
1887
1888 void ObjectTemplate::SetCallAsFunctionHandler(FunctionCallback callback,
1889 Handle<Value> data) {
1890 return ObjectTemplateSetCallAsFunctionHandler(this, callback, data);
1891 }
1892
1893
1894 int ObjectTemplate::InternalFieldCount() { 1648 int ObjectTemplate::InternalFieldCount() {
1895 if (IsDeadCheck(Utils::OpenHandle(this)->GetIsolate(), 1649 if (IsDeadCheck(Utils::OpenHandle(this)->GetIsolate(),
1896 "v8::ObjectTemplate::InternalFieldCount()")) { 1650 "v8::ObjectTemplate::InternalFieldCount()")) {
1897 return 0; 1651 return 0;
1898 } 1652 }
1899 return i::Smi::cast(Utils::OpenHandle(this)->internal_field_count())->value(); 1653 return i::Smi::cast(Utils::OpenHandle(this)->internal_field_count())->value();
1900 } 1654 }
1901 1655
1902 1656
1903 void ObjectTemplate::SetInternalFieldCount(int value) { 1657 void ObjectTemplate::SetInternalFieldCount(int value) {
(...skipping 1943 matching lines...) Expand 10 before | Expand all | Expand 10 after
3847 if (info.is_null()) return false; 3601 if (info.is_null()) return false;
3848 bool fast = Utils::OpenHandle(obj)->HasFastProperties(); 3602 bool fast = Utils::OpenHandle(obj)->HasFastProperties();
3849 i::Handle<i::Object> result = i::SetAccessor(Utils::OpenHandle(obj), info); 3603 i::Handle<i::Object> result = i::SetAccessor(Utils::OpenHandle(obj), info);
3850 if (result.is_null() || result->IsUndefined()) return false; 3604 if (result.is_null() || result->IsUndefined()) return false;
3851 if (fast) i::JSObject::TransformToFastProperties(Utils::OpenHandle(obj), 0); 3605 if (fast) i::JSObject::TransformToFastProperties(Utils::OpenHandle(obj), 0);
3852 return true; 3606 return true;
3853 } 3607 }
3854 3608
3855 3609
3856 bool Object::SetAccessor(Handle<String> name, 3610 bool Object::SetAccessor(Handle<String> name,
3857 AccessorGetter getter,
3858 AccessorSetter setter,
3859 v8::Handle<Value> data,
3860 AccessControl settings,
3861 PropertyAttribute attributes) {
3862 return ObjectSetAccessor(
3863 this, name, getter, setter, data, settings, attributes);
3864 }
3865
3866
3867 bool Object::SetAccessor(Handle<String> name,
3868 AccessorGetterCallback getter, 3611 AccessorGetterCallback getter,
3869 AccessorSetterCallback setter, 3612 AccessorSetterCallback setter,
3870 v8::Handle<Value> data, 3613 v8::Handle<Value> data,
3871 AccessControl settings, 3614 AccessControl settings,
3872 PropertyAttribute attributes) { 3615 PropertyAttribute attributes) {
3873 return ObjectSetAccessor( 3616 return ObjectSetAccessor(
3874 this, name, getter, setter, data, settings, attributes); 3617 this, name, getter, setter, data, settings, attributes);
3875 } 3618 }
3876 3619
3877 3620
(...skipping 4298 matching lines...) Expand 10 before | Expand all | Expand 10 after
8176 (first_block_limit_ <= &(blocks_.first())[kHandleBlockSize])); 7919 (first_block_limit_ <= &(blocks_.first())[kHandleBlockSize]));
8177 7920
8178 v->VisitPointers(blocks_.first(), first_block_limit_); 7921 v->VisitPointers(blocks_.first(), first_block_limit_);
8179 7922
8180 for (int i = 1; i < blocks_.length(); i++) { 7923 for (int i = 1; i < blocks_.length(); i++) {
8181 v->VisitPointers(blocks_[i], &blocks_[i][kHandleBlockSize]); 7924 v->VisitPointers(blocks_[i], &blocks_[i][kHandleBlockSize]);
8182 } 7925 }
8183 } 7926 }
8184 7927
8185 7928
8186 v8::Handle<v8::Value> InvokeAccessorGetter(
8187 v8::Local<v8::String> property,
8188 const v8::AccessorInfo& info,
8189 v8::AccessorGetter getter) {
8190 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate());
8191 Address getter_address = reinterpret_cast<Address>(reinterpret_cast<intptr_t>(
8192 getter));
8193 // Leaving JavaScript.
8194 VMState<EXTERNAL> state(isolate);
8195 ExternalCallbackScope call_scope(isolate, getter_address);
8196 return getter(property, info);
8197 }
8198
8199
8200 void InvokeAccessorGetterCallback( 7929 void InvokeAccessorGetterCallback(
8201 v8::Local<v8::String> property, 7930 v8::Local<v8::String> property,
8202 const v8::PropertyCallbackInfo<v8::Value>& info, 7931 const v8::PropertyCallbackInfo<v8::Value>& info,
8203 v8::AccessorGetterCallback getter) { 7932 v8::AccessorGetterCallback getter) {
8204 // Leaving JavaScript. 7933 // Leaving JavaScript.
8205 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); 7934 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate());
8206 Address getter_address = reinterpret_cast<Address>(reinterpret_cast<intptr_t>( 7935 Address getter_address = reinterpret_cast<Address>(reinterpret_cast<intptr_t>(
8207 getter)); 7936 getter));
8208 VMState<EXTERNAL> state(isolate); 7937 VMState<EXTERNAL> state(isolate);
8209 ExternalCallbackScope call_scope(isolate, getter_address); 7938 ExternalCallbackScope call_scope(isolate, getter_address);
8210 return getter(property, info); 7939 return getter(property, info);
8211 } 7940 }
8212 7941
8213 7942
8214 v8::Handle<v8::Value> InvokeInvocationCallback(
8215 const v8::Arguments& args,
8216 v8::InvocationCallback callback) {
8217 Isolate* isolate = reinterpret_cast<Isolate*>(args.GetIsolate());
8218 Address callback_address =
8219 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
8220 VMState<EXTERNAL> state(isolate);
8221 ExternalCallbackScope call_scope(isolate, callback_address);
8222 return callback(args);
8223 }
8224
8225
8226 void InvokeFunctionCallback(const v8::FunctionCallbackInfo<v8::Value>& info, 7943 void InvokeFunctionCallback(const v8::FunctionCallbackInfo<v8::Value>& info,
8227 v8::FunctionCallback callback) { 7944 v8::FunctionCallback callback) {
8228 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); 7945 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate());
8229 Address callback_address = 7946 Address callback_address =
8230 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); 7947 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
8231 VMState<EXTERNAL> state(isolate); 7948 VMState<EXTERNAL> state(isolate);
8232 ExternalCallbackScope call_scope(isolate, callback_address); 7949 ExternalCallbackScope call_scope(isolate, callback_address);
8233 return callback(info); 7950 return callback(info);
8234 } 7951 }
8235 7952
8236 7953
8237 } } // namespace v8::internal 7954 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/api.h ('k') | src/arguments.h » ('j') | src/arm/stub-cache-arm.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698