OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |