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

Side by Side Diff: src/api.cc

Issue 12494012: new style of property/function callbacks (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: rebase Created 7 years, 8 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 961 matching lines...) Expand 10 before | Expand all | Expand 10 after
972 972
973 973
974 void FunctionTemplate::Inherit(v8::Handle<FunctionTemplate> value) { 974 void FunctionTemplate::Inherit(v8::Handle<FunctionTemplate> value) {
975 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 975 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
976 if (IsDeadCheck(isolate, "v8::FunctionTemplate::Inherit()")) return; 976 if (IsDeadCheck(isolate, "v8::FunctionTemplate::Inherit()")) return;
977 ENTER_V8(isolate); 977 ENTER_V8(isolate);
978 Utils::OpenHandle(this)->set_parent_template(*Utils::OpenHandle(*value)); 978 Utils::OpenHandle(this)->set_parent_template(*Utils::OpenHandle(*value));
979 } 979 }
980 980
981 981
982 Local<FunctionTemplate> FunctionTemplate::New(InvocationCallback callback, 982 template<typename Callback>
983 v8::Handle<Value> data, v8::Handle<Signature> signature, int length) { 983 static Local<FunctionTemplate> FunctionTemplateNew(
984 Callback callback_in,
985 v8::Handle<Value> data,
986 v8::Handle<Signature> signature,
987 int length) {
984 i::Isolate* isolate = i::Isolate::Current(); 988 i::Isolate* isolate = i::Isolate::Current();
985 EnsureInitializedForIsolate(isolate, "v8::FunctionTemplate::New()"); 989 EnsureInitializedForIsolate(isolate, "v8::FunctionTemplate::New()");
986 LOG_API(isolate, "FunctionTemplate::New"); 990 LOG_API(isolate, "FunctionTemplate::New");
987 ENTER_V8(isolate); 991 ENTER_V8(isolate);
988 i::Handle<i::Struct> struct_obj = 992 i::Handle<i::Struct> struct_obj =
989 isolate->factory()->NewStruct(i::FUNCTION_TEMPLATE_INFO_TYPE); 993 isolate->factory()->NewStruct(i::FUNCTION_TEMPLATE_INFO_TYPE);
990 i::Handle<i::FunctionTemplateInfo> obj = 994 i::Handle<i::FunctionTemplateInfo> obj =
991 i::Handle<i::FunctionTemplateInfo>::cast(struct_obj); 995 i::Handle<i::FunctionTemplateInfo>::cast(struct_obj);
992 InitializeFunctionTemplate(obj); 996 InitializeFunctionTemplate(obj);
993 int next_serial_number = isolate->next_serial_number(); 997 int next_serial_number = isolate->next_serial_number();
994 isolate->set_next_serial_number(next_serial_number + 1); 998 isolate->set_next_serial_number(next_serial_number + 1);
995 obj->set_serial_number(i::Smi::FromInt(next_serial_number)); 999 obj->set_serial_number(i::Smi::FromInt(next_serial_number));
996 if (callback != 0) { 1000 if (callback_in != 0) {
997 if (data.IsEmpty()) data = v8::Undefined(); 1001 if (data.IsEmpty()) data = v8::Undefined();
1002 InvocationCallback callback =
1003 i::CallbackTable::Register(isolate, callback_in);
998 Utils::ToLocal(obj)->SetCallHandler(callback, data); 1004 Utils::ToLocal(obj)->SetCallHandler(callback, data);
999 } 1005 }
1000 obj->set_length(length); 1006 obj->set_length(length);
1001 obj->set_undetectable(false); 1007 obj->set_undetectable(false);
1002 obj->set_needs_access_check(false); 1008 obj->set_needs_access_check(false);
1003 1009
1004 if (!signature.IsEmpty()) 1010 if (!signature.IsEmpty())
1005 obj->set_signature(*Utils::OpenHandle(*signature)); 1011 obj->set_signature(*Utils::OpenHandle(*signature));
1006 return Utils::ToLocal(obj); 1012 return Utils::ToLocal(obj);
1007 } 1013 }
1008 1014
1009 1015
1016 Local<FunctionTemplate> FunctionTemplate::New(
1017 InvocationCallback callback,
1018 v8::Handle<Value> data,
1019 v8::Handle<Signature> signature,
1020 int length) {
1021 return FunctionTemplateNew(callback, data, signature, length);
1022 }
1023
1024
1025 Local<FunctionTemplate> FunctionTemplate::New(
1026 FunctionCallback callback,
1027 v8::Handle<Value> data,
1028 v8::Handle<Signature> signature,
1029 int length) {
1030 return FunctionTemplateNew(callback, data, signature, length);
1031 }
1032
1033
1010 Local<Signature> Signature::New(Handle<FunctionTemplate> receiver, 1034 Local<Signature> Signature::New(Handle<FunctionTemplate> receiver,
1011 int argc, Handle<FunctionTemplate> argv[]) { 1035 int argc, Handle<FunctionTemplate> argv[]) {
1012 i::Isolate* isolate = i::Isolate::Current(); 1036 i::Isolate* isolate = i::Isolate::Current();
1013 EnsureInitializedForIsolate(isolate, "v8::Signature::New()"); 1037 EnsureInitializedForIsolate(isolate, "v8::Signature::New()");
1014 LOG_API(isolate, "Signature::New"); 1038 LOG_API(isolate, "Signature::New");
1015 ENTER_V8(isolate); 1039 ENTER_V8(isolate);
1016 i::Handle<i::Struct> struct_obj = 1040 i::Handle<i::Struct> struct_obj =
1017 isolate->factory()->NewStruct(i::SIGNATURE_INFO_TYPE); 1041 isolate->factory()->NewStruct(i::SIGNATURE_INFO_TYPE);
1018 i::Handle<i::SignatureInfo> obj = 1042 i::Handle<i::SignatureInfo> obj =
1019 i::Handle<i::SignatureInfo>::cast(struct_obj); 1043 i::Handle<i::SignatureInfo>::cast(struct_obj);
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
1191 return 0; 1215 return 0;
1192 } 1216 }
1193 1217
1194 1218
1195 #define SET_FIELD_WRAPPED(obj, setter, cdata) do { \ 1219 #define SET_FIELD_WRAPPED(obj, setter, cdata) do { \
1196 i::Handle<i::Object> foreign = FromCData(cdata); \ 1220 i::Handle<i::Object> foreign = FromCData(cdata); \
1197 (obj)->setter(*foreign); \ 1221 (obj)->setter(*foreign); \
1198 } while (false) 1222 } while (false)
1199 1223
1200 1224
1201 void FunctionTemplate::SetCallHandler(InvocationCallback callback, 1225 template<typename Callback>
1202 v8::Handle<Value> data) { 1226 static void FunctionTemplateSetCallHandler(FunctionTemplate* function_template,
1203 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1227 Callback callback,
1228 v8::Handle<Value> data) {
1229 i::Isolate* isolate = Utils::OpenHandle(function_template)->GetIsolate();
1204 if (IsDeadCheck(isolate, "v8::FunctionTemplate::SetCallHandler()")) return; 1230 if (IsDeadCheck(isolate, "v8::FunctionTemplate::SetCallHandler()")) return;
1205 ENTER_V8(isolate); 1231 ENTER_V8(isolate);
1206 i::HandleScope scope(isolate); 1232 i::HandleScope scope(isolate);
1207 i::Handle<i::Struct> struct_obj = 1233 i::Handle<i::Struct> struct_obj =
1208 isolate->factory()->NewStruct(i::CALL_HANDLER_INFO_TYPE); 1234 isolate->factory()->NewStruct(i::CALL_HANDLER_INFO_TYPE);
1209 i::Handle<i::CallHandlerInfo> obj = 1235 i::Handle<i::CallHandlerInfo> obj =
1210 i::Handle<i::CallHandlerInfo>::cast(struct_obj); 1236 i::Handle<i::CallHandlerInfo>::cast(struct_obj);
1211 SET_FIELD_WRAPPED(obj, set_callback, callback); 1237 SET_FIELD_WRAPPED(obj, set_callback, callback);
1212 if (data.IsEmpty()) data = v8::Undefined(); 1238 if (data.IsEmpty()) data = v8::Undefined();
1213 obj->set_data(*Utils::OpenHandle(*data)); 1239 obj->set_data(*Utils::OpenHandle(*data));
1214 Utils::OpenHandle(this)->set_call_code(*obj); 1240 Utils::OpenHandle(function_template)->set_call_code(*obj);
1215 } 1241 }
1216 1242
1243 void FunctionTemplate::SetCallHandler(InvocationCallback callback,
1244 v8::Handle<Value> data) {
1245 FunctionTemplateSetCallHandler(this, callback, data);
1246 }
1247
1248 void FunctionTemplate::SetCallHandler(FunctionCallback callback,
1249 v8::Handle<Value> data) {
1250 FunctionTemplateSetCallHandler(this, callback, data);
1251 }
1217 1252
1218 static i::Handle<i::AccessorInfo> SetAccessorInfoProperties( 1253 static i::Handle<i::AccessorInfo> SetAccessorInfoProperties(
1219 i::Handle<i::AccessorInfo> obj, 1254 i::Handle<i::AccessorInfo> obj,
1220 v8::Handle<String> name, 1255 v8::Handle<String> name,
1221 v8::AccessControl settings, 1256 v8::AccessControl settings,
1222 v8::PropertyAttribute attributes, 1257 v8::PropertyAttribute attributes,
1223 v8::Handle<AccessorSignature> signature) { 1258 v8::Handle<AccessorSignature> signature) {
1224 obj->set_name(*Utils::OpenHandle(*name)); 1259 obj->set_name(*Utils::OpenHandle(*name));
1225 if (settings & ALL_CAN_READ) obj->set_all_can_read(true); 1260 if (settings & ALL_CAN_READ) obj->set_all_can_read(true);
1226 if (settings & ALL_CAN_WRITE) obj->set_all_can_write(true); 1261 if (settings & ALL_CAN_WRITE) obj->set_all_can_write(true);
1227 if (settings & PROHIBITS_OVERWRITING) obj->set_prohibits_overwriting(true); 1262 if (settings & PROHIBITS_OVERWRITING) obj->set_prohibits_overwriting(true);
1228 obj->set_property_attributes(static_cast<PropertyAttributes>(attributes)); 1263 obj->set_property_attributes(static_cast<PropertyAttributes>(attributes));
1229 if (!signature.IsEmpty()) { 1264 if (!signature.IsEmpty()) {
1230 obj->set_expected_receiver_type(*Utils::OpenHandle(*signature)); 1265 obj->set_expected_receiver_type(*Utils::OpenHandle(*signature));
1231 } 1266 }
1232 return obj; 1267 return obj;
1233 } 1268 }
1234 1269
1235 1270
1271 template<typename Getter, typename Setter>
1236 static i::Handle<i::AccessorInfo> MakeAccessorInfo( 1272 static i::Handle<i::AccessorInfo> MakeAccessorInfo(
1237 v8::Handle<String> name, 1273 v8::Handle<String> name,
1238 AccessorGetter getter, 1274 Getter getter_in,
1239 AccessorSetter setter, 1275 Setter setter_in,
1240 v8::Handle<Value> data, 1276 v8::Handle<Value> data,
1241 v8::AccessControl settings, 1277 v8::AccessControl settings,
1242 v8::PropertyAttribute attributes, 1278 v8::PropertyAttribute attributes,
1243 v8::Handle<AccessorSignature> signature) { 1279 v8::Handle<AccessorSignature> signature) {
1244 i::Isolate* isolate = Utils::OpenHandle(*name)->GetIsolate(); 1280 i::Isolate* isolate = Utils::OpenHandle(*name)->GetIsolate();
1245 i::Handle<i::ExecutableAccessorInfo> obj = 1281 i::Handle<i::ExecutableAccessorInfo> obj =
1246 isolate->factory()->NewExecutableAccessorInfo(); 1282 isolate->factory()->NewExecutableAccessorInfo();
1283 AccessorGetter getter = i::CallbackTable::Register(isolate, getter_in);
1247 SET_FIELD_WRAPPED(obj, set_getter, getter); 1284 SET_FIELD_WRAPPED(obj, set_getter, getter);
1285 AccessorSetter setter = i::CallbackTable::Register(isolate, setter_in);
1248 SET_FIELD_WRAPPED(obj, set_setter, setter); 1286 SET_FIELD_WRAPPED(obj, set_setter, setter);
1249 if (data.IsEmpty()) data = v8::Undefined(); 1287 if (data.IsEmpty()) data = v8::Undefined();
1250 obj->set_data(*Utils::OpenHandle(*data)); 1288 obj->set_data(*Utils::OpenHandle(*data));
1251 return SetAccessorInfoProperties(obj, name, settings, attributes, signature); 1289 return SetAccessorInfoProperties(obj, name, settings, attributes, signature);
1252 } 1290 }
1253 1291
1254 1292
1255 static i::Handle<i::AccessorInfo> MakeAccessorInfo( 1293 static i::Handle<i::AccessorInfo> MakeAccessorInfo(
1256 v8::Handle<String> name, 1294 v8::Handle<String> name,
1257 v8::Handle<v8::DeclaredAccessorDescriptor> descriptor, 1295 v8::Handle<v8::DeclaredAccessorDescriptor> descriptor,
1296 void* setter_ignored,
1297 void* data_ignored,
1258 v8::AccessControl settings, 1298 v8::AccessControl settings,
1259 v8::PropertyAttribute attributes, 1299 v8::PropertyAttribute attributes,
1260 v8::Handle<AccessorSignature> signature) { 1300 v8::Handle<AccessorSignature> signature) {
1261 i::Isolate* isolate = Utils::OpenHandle(*name)->GetIsolate(); 1301 i::Isolate* isolate = Utils::OpenHandle(*name)->GetIsolate();
1262 if (descriptor.IsEmpty()) return i::Handle<i::DeclaredAccessorInfo>(); 1302 if (descriptor.IsEmpty()) return i::Handle<i::DeclaredAccessorInfo>();
1263 i::Handle<i::DeclaredAccessorInfo> obj = 1303 i::Handle<i::DeclaredAccessorInfo> obj =
1264 isolate->factory()->NewDeclaredAccessorInfo(); 1304 isolate->factory()->NewDeclaredAccessorInfo();
1265 obj->set_descriptor(*Utils::OpenHandle(*descriptor)); 1305 obj->set_descriptor(*Utils::OpenHandle(*descriptor));
1266 return SetAccessorInfoProperties(obj, name, settings, attributes, signature); 1306 return SetAccessorInfoProperties(obj, name, settings, attributes, signature);
1267 } 1307 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1312 1352
1313 void FunctionTemplate::ReadOnlyPrototype() { 1353 void FunctionTemplate::ReadOnlyPrototype() {
1314 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1354 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1315 if (IsDeadCheck(isolate, "v8::FunctionTemplate::ReadOnlyPrototype()")) { 1355 if (IsDeadCheck(isolate, "v8::FunctionTemplate::ReadOnlyPrototype()")) {
1316 return; 1356 return;
1317 } 1357 }
1318 ENTER_V8(isolate); 1358 ENTER_V8(isolate);
1319 Utils::OpenHandle(this)->set_read_only_prototype(true); 1359 Utils::OpenHandle(this)->set_read_only_prototype(true);
1320 } 1360 }
1321 1361
1322 1362 template<
1323 void FunctionTemplate::SetNamedInstancePropertyHandler( 1363 typename Getter,
1324 NamedPropertyGetter getter, 1364 typename Setter,
1325 NamedPropertySetter setter, 1365 typename Query,
1326 NamedPropertyQuery query, 1366 typename Deleter,
1327 NamedPropertyDeleter remover, 1367 typename Enumerator>
1328 NamedPropertyEnumerator enumerator, 1368 static void SetNamedInstancePropertyHandler(
1369 i::Handle<i::FunctionTemplateInfo> function_template,
1370 Getter getter_in,
1371 Setter setter_in,
1372 Query query_in,
1373 Deleter remover_in,
1374 Enumerator enumerator_in,
1329 Handle<Value> data) { 1375 Handle<Value> data) {
1330 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1376 i::Isolate* isolate = function_template->GetIsolate();
1331 if (IsDeadCheck(isolate, 1377 if (IsDeadCheck(isolate,
1332 "v8::FunctionTemplate::SetNamedInstancePropertyHandler()")) { 1378 "v8::FunctionTemplate::SetNamedInstancePropertyHandler()")) {
1333 return; 1379 return;
1334 } 1380 }
1335 ENTER_V8(isolate); 1381 ENTER_V8(isolate);
1336 i::HandleScope scope(isolate); 1382 i::HandleScope scope(isolate);
1337 i::Handle<i::Struct> struct_obj = 1383 i::Handle<i::Struct> struct_obj =
1338 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE); 1384 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE);
1339 i::Handle<i::InterceptorInfo> obj = 1385 i::Handle<i::InterceptorInfo> obj =
1340 i::Handle<i::InterceptorInfo>::cast(struct_obj); 1386 i::Handle<i::InterceptorInfo>::cast(struct_obj);
1341 1387
1388 NamedPropertyGetter getter = i::CallbackTable::Register(isolate, getter_in);
1342 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter); 1389 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter);
1390 NamedPropertySetter setter = i::CallbackTable::Register(isolate, setter_in);
1343 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter); 1391 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter);
1392 NamedPropertyQuery query = i::CallbackTable::Register(isolate, query_in);
1344 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query); 1393 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query);
1394 NamedPropertyDeleter remover =
1395 i::CallbackTable::Register(isolate, remover_in);
1345 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover); 1396 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover);
1397 NamedPropertyEnumerator enumerator =
1398 i::CallbackTable::Register(isolate, enumerator_in);
1346 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator); 1399 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator);
1347 1400
1348 if (data.IsEmpty()) data = v8::Undefined(); 1401 if (data.IsEmpty()) data = v8::Undefined();
1349 obj->set_data(*Utils::OpenHandle(*data)); 1402 obj->set_data(*Utils::OpenHandle(*data));
1350 Utils::OpenHandle(this)->set_named_property_handler(*obj); 1403 function_template->set_named_property_handler(*obj);
1351 } 1404 }
1352 1405
1353 1406
1354 void FunctionTemplate::SetIndexedInstancePropertyHandler( 1407 template<
1355 IndexedPropertyGetter getter, 1408 typename Getter,
1356 IndexedPropertySetter setter, 1409 typename Setter,
1357 IndexedPropertyQuery query, 1410 typename Query,
1358 IndexedPropertyDeleter remover, 1411 typename Deleter,
1359 IndexedPropertyEnumerator enumerator, 1412 typename Enumerator>
1413 static void SetIndexedInstancePropertyHandler(
1414 i::Handle<i::FunctionTemplateInfo> function_template,
1415 Getter getter_in,
1416 Setter setter_in,
1417 Query query_in,
1418 Deleter remover_in,
1419 Enumerator enumerator_in,
1360 Handle<Value> data) { 1420 Handle<Value> data) {
1361 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1421 i::Isolate* isolate = function_template->GetIsolate();
1362 if (IsDeadCheck(isolate, 1422 if (IsDeadCheck(isolate,
1363 "v8::FunctionTemplate::SetIndexedInstancePropertyHandler()")) { 1423 "v8::FunctionTemplate::SetIndexedInstancePropertyHandler()")) {
1364 return; 1424 return;
1365 } 1425 }
1366 ENTER_V8(isolate); 1426 ENTER_V8(isolate);
1367 i::HandleScope scope(isolate); 1427 i::HandleScope scope(isolate);
1368 i::Handle<i::Struct> struct_obj = 1428 i::Handle<i::Struct> struct_obj =
1369 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE); 1429 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE);
1370 i::Handle<i::InterceptorInfo> obj = 1430 i::Handle<i::InterceptorInfo> obj =
1371 i::Handle<i::InterceptorInfo>::cast(struct_obj); 1431 i::Handle<i::InterceptorInfo>::cast(struct_obj);
1372 1432
1433 IndexedPropertyGetter getter =
1434 i::CallbackTable::Register(isolate, getter_in);
1373 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter); 1435 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter);
1436 IndexedPropertySetter setter =
1437 i::CallbackTable::Register(isolate, setter_in);
1374 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter); 1438 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter);
1439 IndexedPropertyQuery query = i::CallbackTable::Register(isolate, query_in);
1375 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query); 1440 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query);
1441 IndexedPropertyDeleter remover =
1442 i::CallbackTable::Register(isolate, remover_in);
1376 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover); 1443 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover);
1444 IndexedPropertyEnumerator enumerator =
1445 i::CallbackTable::Register(isolate, enumerator_in);
1377 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator); 1446 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator);
1378 1447
1379 if (data.IsEmpty()) data = v8::Undefined(); 1448 if (data.IsEmpty()) data = v8::Undefined();
1380 obj->set_data(*Utils::OpenHandle(*data)); 1449 obj->set_data(*Utils::OpenHandle(*data));
1381 Utils::OpenHandle(this)->set_indexed_property_handler(*obj); 1450 function_template->set_indexed_property_handler(*obj);
1382 } 1451 }
1383 1452
1384 1453
1385 void FunctionTemplate::SetInstanceCallAsFunctionHandler( 1454 template<typename Callback>
1386 InvocationCallback callback, 1455 static void SetInstanceCallAsFunctionHandler(
1456 i::Handle<i::FunctionTemplateInfo> function_template,
1457 Callback callback_in,
1387 Handle<Value> data) { 1458 Handle<Value> data) {
1388 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1459 i::Isolate* isolate = function_template->GetIsolate();
1389 if (IsDeadCheck(isolate, 1460 if (IsDeadCheck(isolate,
1390 "v8::FunctionTemplate::SetInstanceCallAsFunctionHandler()")) { 1461 "v8::FunctionTemplate::SetInstanceCallAsFunctionHandler()")) {
1391 return; 1462 return;
1392 } 1463 }
1393 ENTER_V8(isolate); 1464 ENTER_V8(isolate);
1394 i::HandleScope scope(isolate); 1465 i::HandleScope scope(isolate);
1395 i::Handle<i::Struct> struct_obj = 1466 i::Handle<i::Struct> struct_obj =
1396 isolate->factory()->NewStruct(i::CALL_HANDLER_INFO_TYPE); 1467 isolate->factory()->NewStruct(i::CALL_HANDLER_INFO_TYPE);
1397 i::Handle<i::CallHandlerInfo> obj = 1468 i::Handle<i::CallHandlerInfo> obj =
1398 i::Handle<i::CallHandlerInfo>::cast(struct_obj); 1469 i::Handle<i::CallHandlerInfo>::cast(struct_obj);
1470 InvocationCallback callback =
1471 i::CallbackTable::Register(isolate, callback_in);
1399 SET_FIELD_WRAPPED(obj, set_callback, callback); 1472 SET_FIELD_WRAPPED(obj, set_callback, callback);
1400 if (data.IsEmpty()) data = v8::Undefined(); 1473 if (data.IsEmpty()) data = v8::Undefined();
1401 obj->set_data(*Utils::OpenHandle(*data)); 1474 obj->set_data(*Utils::OpenHandle(*data));
1402 Utils::OpenHandle(this)->set_instance_call_handler(*obj); 1475 function_template->set_instance_call_handler(*obj);
1403 } 1476 }
1404 1477
1405 1478
1406 // --- O b j e c t T e m p l a t e --- 1479 // --- O b j e c t T e m p l a t e ---
1407 1480
1408 1481
1409 Local<ObjectTemplate> ObjectTemplate::New() { 1482 Local<ObjectTemplate> ObjectTemplate::New() {
1410 return New(Local<FunctionTemplate>()); 1483 return New(Local<FunctionTemplate>());
1411 } 1484 }
1412 1485
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1450 i::Handle<i::Object> list(cons->property_accessors(), cons->GetIsolate()); 1523 i::Handle<i::Object> list(cons->property_accessors(), cons->GetIsolate());
1451 if (list->IsUndefined()) { 1524 if (list->IsUndefined()) {
1452 list = NeanderArray().value(); 1525 list = NeanderArray().value();
1453 cons->set_property_accessors(*list); 1526 cons->set_property_accessors(*list);
1454 } 1527 }
1455 NeanderArray array(list); 1528 NeanderArray array(list);
1456 array.add(obj); 1529 array.add(obj);
1457 } 1530 }
1458 1531
1459 1532
1533 template<typename Setter, typename Getter, typename Data>
1534 static bool ObjectTemplateSetAccessor(
1535 ObjectTemplate* object_template,
1536 v8::Handle<String> name,
1537 Getter getter,
1538 Setter setter,
1539 Data data,
1540 AccessControl settings,
1541 PropertyAttribute attribute,
1542 v8::Handle<AccessorSignature> signature) {
1543 i::Isolate* isolate = Utils::OpenHandle(object_template)->GetIsolate();
1544 if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetAccessor()")) return false;
1545 ENTER_V8(isolate);
1546 i::HandleScope scope(isolate);
1547 EnsureConstructor(object_template);
1548 i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast(
1549 Utils::OpenHandle(object_template)->constructor());
1550 i::Handle<i::FunctionTemplateInfo> cons(constructor);
1551 i::Handle<i::AccessorInfo> obj = MakeAccessorInfo(
1552 name, getter, setter, data, settings, attribute, signature);
1553 if (obj.is_null()) return false;
1554 AddPropertyToFunctionTemplate(cons, obj);
1555 return true;
1556 }
1557
1558
1460 void ObjectTemplate::SetAccessor(v8::Handle<String> name, 1559 void ObjectTemplate::SetAccessor(v8::Handle<String> name,
1461 AccessorGetter getter, 1560 AccessorGetter getter,
1462 AccessorSetter setter, 1561 AccessorSetter setter,
1463 v8::Handle<Value> data, 1562 v8::Handle<Value> data,
1464 AccessControl settings, 1563 AccessControl settings,
1465 PropertyAttribute attribute, 1564 PropertyAttribute attribute,
1466 v8::Handle<AccessorSignature> signature) { 1565 v8::Handle<AccessorSignature> signature) {
1467 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1566 ObjectTemplateSetAccessor(
1468 if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetAccessor()")) return; 1567 this, name, getter, setter, data, settings, attribute, signature);
1469 ENTER_V8(isolate); 1568 }
1470 i::HandleScope scope(isolate); 1569
1471 EnsureConstructor(this); 1570
1472 i::FunctionTemplateInfo* constructor = 1571 void ObjectTemplate::SetAccessor(v8::Handle<String> name,
1473 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor()); 1572 AccessorGetterCallback getter,
1474 i::Handle<i::FunctionTemplateInfo> cons(constructor); 1573 AccessorSetterCallback setter,
1475 i::Handle<i::AccessorInfo> obj = MakeAccessorInfo(name, getter, setter, data, 1574 v8::Handle<Value> data,
1476 settings, attribute, 1575 AccessControl settings,
1477 signature); 1576 PropertyAttribute attribute,
1478 AddPropertyToFunctionTemplate(cons, obj); 1577 v8::Handle<AccessorSignature> signature) {
1578 ObjectTemplateSetAccessor(
1579 this, name, getter, setter, data, settings, attribute, signature);
1479 } 1580 }
1480 1581
1481 1582
1482 bool ObjectTemplate::SetAccessor(Handle<String> name, 1583 bool ObjectTemplate::SetAccessor(Handle<String> name,
1483 Handle<DeclaredAccessorDescriptor> descriptor, 1584 Handle<DeclaredAccessorDescriptor> descriptor,
1484 AccessControl settings, 1585 AccessControl settings,
1485 PropertyAttribute attribute, 1586 PropertyAttribute attribute,
1486 Handle<AccessorSignature> signature) { 1587 Handle<AccessorSignature> signature) {
1487 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1588 void* null = NULL;
1488 if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetAccessor()")) return false; 1589 return ObjectTemplateSetAccessor(
1489 ENTER_V8(isolate); 1590 this, name, descriptor, null, null, settings, attribute, signature);
1490 i::HandleScope scope(isolate);
1491 EnsureConstructor(this);
1492 i::FunctionTemplateInfo* constructor =
1493 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor());
1494 i::Handle<i::FunctionTemplateInfo> cons(constructor);
1495 i::Handle<i::AccessorInfo> obj = MakeAccessorInfo(
1496 name, descriptor, settings, attribute, signature);
1497 if (obj.is_null()) return false;
1498 AddPropertyToFunctionTemplate(cons, obj);
1499 return true;
1500 } 1591 }
1501 1592
1502 1593
1503 void ObjectTemplate::SetNamedPropertyHandler(NamedPropertyGetter getter, 1594 template<
1504 NamedPropertySetter setter, 1595 typename Getter,
1505 NamedPropertyQuery query, 1596 typename Setter,
1506 NamedPropertyDeleter remover, 1597 typename Query,
1507 NamedPropertyEnumerator enumerator, 1598 typename Deleter,
1508 Handle<Value> data) { 1599 typename Enumerator>
1509 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1600 static void ObjectTemplateSetNamedPropertyHandler(
1601 ObjectTemplate* object_template,
1602 Getter getter,
1603 Setter setter,
1604 Query query,
1605 Deleter remover,
1606 Enumerator enumerator,
1607 Handle<Value> data) {
1608 i::Isolate* isolate = Utils::OpenHandle(object_template)->GetIsolate();
1510 if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetNamedPropertyHandler()")) { 1609 if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetNamedPropertyHandler()")) {
1511 return; 1610 return;
1512 } 1611 }
1513 ENTER_V8(isolate); 1612 ENTER_V8(isolate);
1514 i::HandleScope scope(isolate); 1613 i::HandleScope scope(isolate);
1515 EnsureConstructor(this); 1614 EnsureConstructor(object_template);
1516 i::FunctionTemplateInfo* constructor = 1615 i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast(
1517 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor()); 1616 Utils::OpenHandle(object_template)->constructor());
1518 i::Handle<i::FunctionTemplateInfo> cons(constructor); 1617 i::Handle<i::FunctionTemplateInfo> cons(constructor);
1519 Utils::ToLocal(cons)->SetNamedInstancePropertyHandler(getter, 1618 SetNamedInstancePropertyHandler(cons,
1520 setter, 1619 getter,
1521 query, 1620 setter,
1522 remover, 1621 query,
1523 enumerator, 1622 remover,
1524 data); 1623 enumerator,
1624 data);
1525 } 1625 }
1526 1626
1527 1627
1628 void ObjectTemplate::SetNamedPropertyHandler(
1629 NamedPropertyGetter getter,
1630 NamedPropertySetter setter,
1631 NamedPropertyQuery query,
1632 NamedPropertyDeleter remover,
1633 NamedPropertyEnumerator enumerator,
1634 Handle<Value> data) {
1635 ObjectTemplateSetNamedPropertyHandler(
1636 this, getter, setter, query, remover, enumerator, data);
1637 }
1638
1639
1640 void ObjectTemplate::SetNamedPropertyHandler(
1641 NamedPropertyGetterCallback getter,
1642 NamedPropertySetterCallback setter,
1643 NamedPropertyQueryCallback query,
1644 NamedPropertyDeleterCallback remover,
1645 NamedPropertyEnumeratorCallback enumerator,
1646 Handle<Value> data) {
1647 ObjectTemplateSetNamedPropertyHandler(
1648 this, getter, setter, query, remover, enumerator, data);
1649 }
1650
1651
1528 void ObjectTemplate::MarkAsUndetectable() { 1652 void ObjectTemplate::MarkAsUndetectable() {
1529 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1653 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1530 if (IsDeadCheck(isolate, "v8::ObjectTemplate::MarkAsUndetectable()")) return; 1654 if (IsDeadCheck(isolate, "v8::ObjectTemplate::MarkAsUndetectable()")) return;
1531 ENTER_V8(isolate); 1655 ENTER_V8(isolate);
1532 i::HandleScope scope(isolate); 1656 i::HandleScope scope(isolate);
1533 EnsureConstructor(this); 1657 EnsureConstructor(this);
1534 i::FunctionTemplateInfo* constructor = 1658 i::FunctionTemplateInfo* constructor =
1535 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor()); 1659 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor());
1536 i::Handle<i::FunctionTemplateInfo> cons(constructor); 1660 i::Handle<i::FunctionTemplateInfo> cons(constructor);
1537 cons->set_undetectable(true); 1661 cons->set_undetectable(true);
(...skipping 25 matching lines...) Expand all
1563 info->set_data(*Utils::OpenHandle(*data)); 1687 info->set_data(*Utils::OpenHandle(*data));
1564 1688
1565 i::FunctionTemplateInfo* constructor = 1689 i::FunctionTemplateInfo* constructor =
1566 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor()); 1690 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor());
1567 i::Handle<i::FunctionTemplateInfo> cons(constructor); 1691 i::Handle<i::FunctionTemplateInfo> cons(constructor);
1568 cons->set_access_check_info(*info); 1692 cons->set_access_check_info(*info);
1569 cons->set_needs_access_check(turned_on_by_default); 1693 cons->set_needs_access_check(turned_on_by_default);
1570 } 1694 }
1571 1695
1572 1696
1697 template<
1698 typename Getter,
1699 typename Setter,
1700 typename Query,
1701 typename Deleter,
1702 typename Enumerator>
1703 void ObjectTemplateSetIndexedPropertyHandler(
1704 ObjectTemplate* object_template,
1705 Getter getter,
1706 Setter setter,
1707 Query query,
1708 Deleter remover,
1709 Enumerator enumerator,
1710 Handle<Value> data) {
1711 i::Isolate* isolate = Utils::OpenHandle(object_template)->GetIsolate();
1712 if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetIndexedPropertyHandler()")) {
1713 return;
1714 }
1715 ENTER_V8(isolate);
1716 i::HandleScope scope(isolate);
1717 EnsureConstructor(object_template);
1718 i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast(
1719 Utils::OpenHandle(object_template)->constructor());
1720 i::Handle<i::FunctionTemplateInfo> cons(constructor);
1721 SetIndexedInstancePropertyHandler(cons,
1722 getter,
1723 setter,
1724 query,
1725 remover,
1726 enumerator,
1727 data);
1728 }
1729
1730
1573 void ObjectTemplate::SetIndexedPropertyHandler( 1731 void ObjectTemplate::SetIndexedPropertyHandler(
1574 IndexedPropertyGetter getter, 1732 IndexedPropertyGetter getter,
1575 IndexedPropertySetter setter, 1733 IndexedPropertySetter setter,
1576 IndexedPropertyQuery query, 1734 IndexedPropertyQuery query,
1577 IndexedPropertyDeleter remover, 1735 IndexedPropertyDeleter remover,
1578 IndexedPropertyEnumerator enumerator, 1736 IndexedPropertyEnumerator enumerator,
1579 Handle<Value> data) { 1737 Handle<Value> data) {
1580 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1738 ObjectTemplateSetIndexedPropertyHandler(
1581 if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetIndexedPropertyHandler()")) { 1739 this, getter, setter, query, remover, enumerator, data);
1582 return;
1583 }
1584 ENTER_V8(isolate);
1585 i::HandleScope scope(isolate);
1586 EnsureConstructor(this);
1587 i::FunctionTemplateInfo* constructor =
1588 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor());
1589 i::Handle<i::FunctionTemplateInfo> cons(constructor);
1590 Utils::ToLocal(cons)->SetIndexedInstancePropertyHandler(getter,
1591 setter,
1592 query,
1593 remover,
1594 enumerator,
1595 data);
1596 } 1740 }
1597 1741
1598 1742
1599 void ObjectTemplate::SetCallAsFunctionHandler(InvocationCallback callback, 1743 void ObjectTemplate::SetIndexedPropertyHandler(
1600 Handle<Value> data) { 1744 IndexedPropertyGetterCallback getter,
1601 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1745 IndexedPropertySetterCallback setter,
1746 IndexedPropertyQueryCallback query,
1747 IndexedPropertyDeleterCallback remover,
1748 IndexedPropertyEnumeratorCallback enumerator,
1749 Handle<Value> data) {
1750 ObjectTemplateSetIndexedPropertyHandler(
1751 this, getter, setter, query, remover, enumerator, data);
1752 }
1753
1754
1755 template<typename Callback>
1756 static void ObjectTemplateSetCallAsFunctionHandler(
1757 ObjectTemplate* object_template,
1758 Callback callback,
1759 Handle<Value> data) {
1760 i::Isolate* isolate = Utils::OpenHandle(object_template)->GetIsolate();
1602 if (IsDeadCheck(isolate, 1761 if (IsDeadCheck(isolate,
1603 "v8::ObjectTemplate::SetCallAsFunctionHandler()")) { 1762 "v8::ObjectTemplate::SetCallAsFunctionHandler()")) {
1604 return; 1763 return;
1605 } 1764 }
1606 ENTER_V8(isolate); 1765 ENTER_V8(isolate);
1607 i::HandleScope scope(isolate); 1766 i::HandleScope scope(isolate);
1608 EnsureConstructor(this); 1767 EnsureConstructor(object_template);
1609 i::FunctionTemplateInfo* constructor = 1768 i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast(
1610 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor()); 1769 Utils::OpenHandle(object_template)->constructor());
1611 i::Handle<i::FunctionTemplateInfo> cons(constructor); 1770 i::Handle<i::FunctionTemplateInfo> cons(constructor);
1612 Utils::ToLocal(cons)->SetInstanceCallAsFunctionHandler(callback, data); 1771 SetInstanceCallAsFunctionHandler(cons, callback, data);
1613 } 1772 }
1614 1773
1615 1774
1775 void ObjectTemplate::SetCallAsFunctionHandler(InvocationCallback callback,
1776 Handle<Value> data) {
1777 return ObjectTemplateSetCallAsFunctionHandler(this, callback, data);
1778 }
1779
1780
1781 void ObjectTemplate::SetCallAsFunctionHandler(FunctionCallback callback,
1782 Handle<Value> data) {
1783 return ObjectTemplateSetCallAsFunctionHandler(this, callback, data);
1784 }
1785
1786
1616 int ObjectTemplate::InternalFieldCount() { 1787 int ObjectTemplate::InternalFieldCount() {
1617 if (IsDeadCheck(Utils::OpenHandle(this)->GetIsolate(), 1788 if (IsDeadCheck(Utils::OpenHandle(this)->GetIsolate(),
1618 "v8::ObjectTemplate::InternalFieldCount()")) { 1789 "v8::ObjectTemplate::InternalFieldCount()")) {
1619 return 0; 1790 return 0;
1620 } 1791 }
1621 return i::Smi::cast(Utils::OpenHandle(this)->internal_field_count())->value(); 1792 return i::Smi::cast(Utils::OpenHandle(this)->internal_field_count())->value();
1622 } 1793 }
1623 1794
1624 1795
1625 void ObjectTemplate::SetInternalFieldCount(int value) { 1796 void ObjectTemplate::SetInternalFieldCount(int value) {
(...skipping 1734 matching lines...) Expand 10 before | Expand all | Expand 10 after
3360 3531
3361 3532
3362 bool v8::Object::Has(uint32_t index) { 3533 bool v8::Object::Has(uint32_t index) {
3363 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 3534 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
3364 ON_BAILOUT(isolate, "v8::Object::HasProperty()", return false); 3535 ON_BAILOUT(isolate, "v8::Object::HasProperty()", return false);
3365 i::Handle<i::JSObject> self = Utils::OpenHandle(this); 3536 i::Handle<i::JSObject> self = Utils::OpenHandle(this);
3366 return self->HasElement(index); 3537 return self->HasElement(index);
3367 } 3538 }
3368 3539
3369 3540
3370 static inline bool SetAccessor(Object* obj, i::Handle<i::AccessorInfo> info) { 3541 template<typename Setter, typename Getter, typename Data>
3542 static inline bool ObjectSetAccessor(Object* obj,
3543 Handle<String> name,
3544 Setter getter,
3545 Getter setter,
3546 Data data,
3547 AccessControl settings,
3548 PropertyAttribute attributes) {
3549 i::Isolate* isolate = Utils::OpenHandle(obj)->GetIsolate();
3550 ON_BAILOUT(isolate, "v8::Object::SetAccessor()", return false);
3551 ENTER_V8(isolate);
3552 i::HandleScope scope(isolate);
3553 v8::Handle<AccessorSignature> signature;
3554 i::Handle<i::AccessorInfo> info = MakeAccessorInfo(
3555 name, getter, setter, data, settings, attributes, signature);
3371 if (info.is_null()) return false; 3556 if (info.is_null()) return false;
3372 bool fast = Utils::OpenHandle(obj)->HasFastProperties(); 3557 bool fast = Utils::OpenHandle(obj)->HasFastProperties();
3373 i::Handle<i::Object> result = i::SetAccessor(Utils::OpenHandle(obj), info); 3558 i::Handle<i::Object> result = i::SetAccessor(Utils::OpenHandle(obj), info);
3374 if (result.is_null() || result->IsUndefined()) return false; 3559 if (result.is_null() || result->IsUndefined()) return false;
3375 if (fast) i::JSObject::TransformToFastProperties(Utils::OpenHandle(obj), 0); 3560 if (fast) i::JSObject::TransformToFastProperties(Utils::OpenHandle(obj), 0);
3376 return true; 3561 return true;
3377 } 3562 }
3378 3563
3379 3564
3380 bool Object::SetAccessor(Handle<String> name, 3565 bool Object::SetAccessor(Handle<String> name,
3381 AccessorGetter getter, 3566 AccessorGetter getter,
3382 AccessorSetter setter, 3567 AccessorSetter setter,
3383 v8::Handle<Value> data, 3568 v8::Handle<Value> data,
3384 AccessControl settings, 3569 AccessControl settings,
3385 PropertyAttribute attributes) { 3570 PropertyAttribute attributes) {
3386 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 3571 return ObjectSetAccessor(
3387 ON_BAILOUT(isolate, "v8::Object::SetAccessor()", return false); 3572 this, name, getter, setter, data, settings, attributes);
3388 ENTER_V8(isolate);
3389 i::HandleScope scope(isolate);
3390 v8::Handle<AccessorSignature> signature;
3391 i::Handle<i::AccessorInfo> info = MakeAccessorInfo(name, getter, setter, data,
3392 settings, attributes,
3393 signature);
3394 return v8::SetAccessor(this, info);
3395 } 3573 }
3396 3574
3397 3575
3576 bool Object::SetAccessor(Handle<String> name,
3577 AccessorGetterCallback getter,
3578 AccessorSetterCallback setter,
3579 v8::Handle<Value> data,
3580 AccessControl settings,
3581 PropertyAttribute attributes) {
3582 return ObjectSetAccessor(
3583 this, name, getter, setter, data, settings, attributes);
3584 }
3585
3586
3398 bool Object::SetAccessor(Handle<String> name, 3587 bool Object::SetAccessor(Handle<String> name,
3399 Handle<DeclaredAccessorDescriptor> descriptor, 3588 Handle<DeclaredAccessorDescriptor> descriptor,
3400 AccessControl settings, 3589 AccessControl settings,
3401 PropertyAttribute attributes) { 3590 PropertyAttribute attributes) {
3402 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 3591 void* null = NULL;
3403 ON_BAILOUT(isolate, "v8::Object::SetAccessor()", return false); 3592 return ObjectSetAccessor(
3404 ENTER_V8(isolate); 3593 this, name, descriptor, null, null, settings, attributes);
3405 i::HandleScope scope(isolate);
3406 v8::Handle<AccessorSignature> signature;
3407 i::Handle<i::AccessorInfo> info = MakeAccessorInfo(
3408 name, descriptor, settings, attributes, signature);
3409 return v8::SetAccessor(this, info);
3410 } 3594 }
3411 3595
3412 3596
3413 bool v8::Object::HasOwnProperty(Handle<String> key) { 3597 bool v8::Object::HasOwnProperty(Handle<String> key) {
3414 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 3598 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
3415 ON_BAILOUT(isolate, "v8::Object::HasOwnProperty()", 3599 ON_BAILOUT(isolate, "v8::Object::HasOwnProperty()",
3416 return false); 3600 return false);
3417 return Utils::OpenHandle(this)->HasLocalProperty( 3601 return Utils::OpenHandle(this)->HasLocalProperty(
3418 *Utils::OpenHandle(*key)); 3602 *Utils::OpenHandle(*key));
3419 } 3603 }
(...skipping 4005 matching lines...) Expand 10 before | Expand all | Expand 10 after
7425 7609
7426 v->VisitPointers(blocks_.first(), first_block_limit_); 7610 v->VisitPointers(blocks_.first(), first_block_limit_);
7427 7611
7428 for (int i = 1; i < blocks_.length(); i++) { 7612 for (int i = 1; i < blocks_.length(); i++) {
7429 v->VisitPointers(blocks_[i], &blocks_[i][kHandleBlockSize]); 7613 v->VisitPointers(blocks_[i], &blocks_[i][kHandleBlockSize]);
7430 } 7614 }
7431 } 7615 }
7432 7616
7433 7617
7434 } } // namespace v8::internal 7618 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « include/v8.h ('k') | src/apiutils.h » ('j') | src/x64/macro-assembler-x64.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698