| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/api.h" | 5 #include "src/api.h" |
| 6 | 6 |
| 7 #include <string.h> // For memcpy, strlen. | 7 #include <string.h> // For memcpy, strlen. |
| 8 #ifdef V8_USE_ADDRESS_SANITIZER | 8 #ifdef V8_USE_ADDRESS_SANITIZER |
| 9 #include <sanitizer/asan_interface.h> | 9 #include <sanitizer/asan_interface.h> |
| 10 #endif // V8_USE_ADDRESS_SANITIZER | 10 #endif // V8_USE_ADDRESS_SANITIZER |
| (...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 804 array.add(isolate->factory()->NewNumberFromInt(length)); | 804 array.add(isolate->factory()->NewNumberFromInt(length)); |
| 805 for (int i = 0; i < length; i++) { | 805 for (int i = 0; i < length; i++) { |
| 806 i::Handle<i::Object> value = data[i].IsEmpty() ? | 806 i::Handle<i::Object> value = data[i].IsEmpty() ? |
| 807 i::Handle<i::Object>(isolate->factory()->undefined_value()) : | 807 i::Handle<i::Object>(isolate->factory()->undefined_value()) : |
| 808 Utils::OpenHandle(*data[i]); | 808 Utils::OpenHandle(*data[i]); |
| 809 array.add(value); | 809 array.add(value); |
| 810 } | 810 } |
| 811 } | 811 } |
| 812 | 812 |
| 813 | 813 |
| 814 void Template::Set(v8::Handle<String> name, | 814 void Template::Set(v8::Handle<Name> name, |
| 815 v8::Handle<Data> value, | 815 v8::Handle<Data> value, |
| 816 v8::PropertyAttribute attribute) { | 816 v8::PropertyAttribute attribute) { |
| 817 i::Isolate* isolate = i::Isolate::Current(); | 817 i::Isolate* isolate = i::Isolate::Current(); |
| 818 ENTER_V8(isolate); | 818 ENTER_V8(isolate); |
| 819 i::HandleScope scope(isolate); | 819 i::HandleScope scope(isolate); |
| 820 const int kSize = 3; | 820 const int kSize = 3; |
| 821 v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); | 821 v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); |
| 822 v8::Handle<v8::Data> data[kSize] = { | 822 v8::Handle<v8::Data> data[kSize] = { |
| 823 name, | 823 name, |
| 824 value, | 824 value, |
| 825 v8::Integer::New(v8_isolate, attribute)}; | 825 v8::Integer::New(v8_isolate, attribute)}; |
| 826 TemplateSet(isolate, this, kSize, data); | 826 TemplateSet(isolate, this, kSize, data); |
| 827 } | 827 } |
| 828 | 828 |
| 829 | 829 |
| 830 void Template::SetAccessorProperty( | 830 void Template::SetAccessorProperty( |
| 831 v8::Local<v8::String> name, | 831 v8::Local<v8::Name> name, |
| 832 v8::Local<FunctionTemplate> getter, | 832 v8::Local<FunctionTemplate> getter, |
| 833 v8::Local<FunctionTemplate> setter, | 833 v8::Local<FunctionTemplate> setter, |
| 834 v8::PropertyAttribute attribute, | 834 v8::PropertyAttribute attribute, |
| 835 v8::AccessControl access_control) { | 835 v8::AccessControl access_control) { |
| 836 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 836 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 837 ENTER_V8(isolate); | 837 ENTER_V8(isolate); |
| 838 ASSERT(!name.IsEmpty()); | 838 ASSERT(!name.IsEmpty()); |
| 839 ASSERT(!getter.IsEmpty() || !setter.IsEmpty()); | 839 ASSERT(!getter.IsEmpty() || !setter.IsEmpty()); |
| 840 i::HandleScope scope(isolate); | 840 i::HandleScope scope(isolate); |
| 841 const int kSize = 5; | 841 const int kSize = 5; |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1131 if (data.IsEmpty()) { | 1131 if (data.IsEmpty()) { |
| 1132 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); | 1132 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); |
| 1133 } | 1133 } |
| 1134 obj->set_data(*Utils::OpenHandle(*data)); | 1134 obj->set_data(*Utils::OpenHandle(*data)); |
| 1135 Utils::OpenHandle(this)->set_call_code(*obj); | 1135 Utils::OpenHandle(this)->set_call_code(*obj); |
| 1136 } | 1136 } |
| 1137 | 1137 |
| 1138 | 1138 |
| 1139 static i::Handle<i::AccessorInfo> SetAccessorInfoProperties( | 1139 static i::Handle<i::AccessorInfo> SetAccessorInfoProperties( |
| 1140 i::Handle<i::AccessorInfo> obj, | 1140 i::Handle<i::AccessorInfo> obj, |
| 1141 v8::Handle<String> name, | 1141 v8::Handle<Name> name, |
| 1142 v8::AccessControl settings, | 1142 v8::AccessControl settings, |
| 1143 v8::PropertyAttribute attributes, | 1143 v8::PropertyAttribute attributes, |
| 1144 v8::Handle<AccessorSignature> signature) { | 1144 v8::Handle<AccessorSignature> signature) { |
| 1145 obj->set_name(*Utils::OpenHandle(*name)); | 1145 obj->set_name(*Utils::OpenHandle(*name)); |
| 1146 if (settings & ALL_CAN_READ) obj->set_all_can_read(true); | 1146 if (settings & ALL_CAN_READ) obj->set_all_can_read(true); |
| 1147 if (settings & ALL_CAN_WRITE) obj->set_all_can_write(true); | 1147 if (settings & ALL_CAN_WRITE) obj->set_all_can_write(true); |
| 1148 obj->set_property_attributes(static_cast<PropertyAttributes>(attributes)); | 1148 obj->set_property_attributes(static_cast<PropertyAttributes>(attributes)); |
| 1149 if (!signature.IsEmpty()) { | 1149 if (!signature.IsEmpty()) { |
| 1150 obj->set_expected_receiver_type(*Utils::OpenHandle(*signature)); | 1150 obj->set_expected_receiver_type(*Utils::OpenHandle(*signature)); |
| 1151 } | 1151 } |
| 1152 return obj; | 1152 return obj; |
| 1153 } | 1153 } |
| 1154 | 1154 |
| 1155 | 1155 |
| 1156 template<typename Getter, typename Setter> | 1156 template<typename Getter, typename Setter> |
| 1157 static i::Handle<i::AccessorInfo> MakeAccessorInfo( | 1157 static i::Handle<i::AccessorInfo> MakeAccessorInfo( |
| 1158 v8::Handle<String> name, | 1158 v8::Handle<Name> name, |
| 1159 Getter getter, | 1159 Getter getter, |
| 1160 Setter setter, | 1160 Setter setter, |
| 1161 v8::Handle<Value> data, | 1161 v8::Handle<Value> data, |
| 1162 v8::AccessControl settings, | 1162 v8::AccessControl settings, |
| 1163 v8::PropertyAttribute attributes, | 1163 v8::PropertyAttribute attributes, |
| 1164 v8::Handle<AccessorSignature> signature) { | 1164 v8::Handle<AccessorSignature> signature) { |
| 1165 i::Isolate* isolate = Utils::OpenHandle(*name)->GetIsolate(); | 1165 i::Isolate* isolate = Utils::OpenHandle(*name)->GetIsolate(); |
| 1166 i::Handle<i::ExecutableAccessorInfo> obj = | 1166 i::Handle<i::ExecutableAccessorInfo> obj = |
| 1167 isolate->factory()->NewExecutableAccessorInfo(); | 1167 isolate->factory()->NewExecutableAccessorInfo(); |
| 1168 SET_FIELD_WRAPPED(obj, set_getter, getter); | 1168 SET_FIELD_WRAPPED(obj, set_getter, getter); |
| 1169 SET_FIELD_WRAPPED(obj, set_setter, setter); | 1169 SET_FIELD_WRAPPED(obj, set_setter, setter); |
| 1170 if (data.IsEmpty()) { | 1170 if (data.IsEmpty()) { |
| 1171 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); | 1171 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); |
| 1172 } | 1172 } |
| 1173 obj->set_data(*Utils::OpenHandle(*data)); | 1173 obj->set_data(*Utils::OpenHandle(*data)); |
| 1174 return SetAccessorInfoProperties(obj, name, settings, attributes, signature); | 1174 return SetAccessorInfoProperties(obj, name, settings, attributes, signature); |
| 1175 } | 1175 } |
| 1176 | 1176 |
| 1177 | 1177 |
| 1178 static i::Handle<i::AccessorInfo> MakeAccessorInfo( | 1178 static i::Handle<i::AccessorInfo> MakeAccessorInfo( |
| 1179 v8::Handle<String> name, | 1179 v8::Handle<Name> name, |
| 1180 v8::Handle<v8::DeclaredAccessorDescriptor> descriptor, | 1180 v8::Handle<v8::DeclaredAccessorDescriptor> descriptor, |
| 1181 void* setter_ignored, | 1181 void* setter_ignored, |
| 1182 void* data_ignored, | 1182 void* data_ignored, |
| 1183 v8::AccessControl settings, | 1183 v8::AccessControl settings, |
| 1184 v8::PropertyAttribute attributes, | 1184 v8::PropertyAttribute attributes, |
| 1185 v8::Handle<AccessorSignature> signature) { | 1185 v8::Handle<AccessorSignature> signature) { |
| 1186 i::Isolate* isolate = Utils::OpenHandle(*name)->GetIsolate(); | 1186 i::Isolate* isolate = Utils::OpenHandle(*name)->GetIsolate(); |
| 1187 if (descriptor.IsEmpty()) return i::Handle<i::DeclaredAccessorInfo>(); | 1187 if (descriptor.IsEmpty()) return i::Handle<i::DeclaredAccessorInfo>(); |
| 1188 i::Handle<i::DeclaredAccessorInfo> obj = | 1188 i::Handle<i::DeclaredAccessorInfo> obj = |
| 1189 isolate->factory()->NewDeclaredAccessorInfo(); | 1189 isolate->factory()->NewDeclaredAccessorInfo(); |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1320 | 1320 |
| 1321 // TODO(dcarney): remove this with ObjectTemplate::SetAccessor | 1321 // TODO(dcarney): remove this with ObjectTemplate::SetAccessor |
| 1322 static inline i::Handle<i::TemplateInfo> GetTemplateInfo( | 1322 static inline i::Handle<i::TemplateInfo> GetTemplateInfo( |
| 1323 i::Isolate* isolate, | 1323 i::Isolate* isolate, |
| 1324 ObjectTemplate* object_template) { | 1324 ObjectTemplate* object_template) { |
| 1325 EnsureConstructor(isolate, object_template); | 1325 EnsureConstructor(isolate, object_template); |
| 1326 return Utils::OpenHandle(object_template); | 1326 return Utils::OpenHandle(object_template); |
| 1327 } | 1327 } |
| 1328 | 1328 |
| 1329 | 1329 |
| 1330 template<typename Setter, typename Getter, typename Data, typename Template> | 1330 template<typename Getter, typename Setter, typename Data, typename Template> |
| 1331 static bool TemplateSetAccessor( | 1331 static bool TemplateSetAccessor( |
| 1332 Template* template_obj, | 1332 Template* template_obj, |
| 1333 v8::Local<String> name, | 1333 v8::Local<Name> name, |
| 1334 Getter getter, | 1334 Getter getter, |
| 1335 Setter setter, | 1335 Setter setter, |
| 1336 Data data, | 1336 Data data, |
| 1337 AccessControl settings, | 1337 AccessControl settings, |
| 1338 PropertyAttribute attribute, | 1338 PropertyAttribute attribute, |
| 1339 v8::Local<AccessorSignature> signature) { | 1339 v8::Local<AccessorSignature> signature) { |
| 1340 i::Isolate* isolate = Utils::OpenHandle(template_obj)->GetIsolate(); | 1340 i::Isolate* isolate = Utils::OpenHandle(template_obj)->GetIsolate(); |
| 1341 ENTER_V8(isolate); | 1341 ENTER_V8(isolate); |
| 1342 i::HandleScope scope(isolate); | 1342 i::HandleScope scope(isolate); |
| 1343 i::Handle<i::AccessorInfo> obj = MakeAccessorInfo( | 1343 i::Handle<i::AccessorInfo> obj = MakeAccessorInfo( |
| 1344 name, getter, setter, data, settings, attribute, signature); | 1344 name, getter, setter, data, settings, attribute, signature); |
| 1345 if (obj.is_null()) return false; | 1345 if (obj.is_null()) return false; |
| 1346 i::Handle<i::TemplateInfo> info = GetTemplateInfo(isolate, template_obj); | 1346 i::Handle<i::TemplateInfo> info = GetTemplateInfo(isolate, template_obj); |
| 1347 AddPropertyToTemplate(info, obj); | 1347 AddPropertyToTemplate(info, obj); |
| 1348 return true; | 1348 return true; |
| 1349 } | 1349 } |
| 1350 | 1350 |
| 1351 | 1351 |
| 1352 bool Template::SetDeclaredAccessor( | 1352 bool Template::SetDeclaredAccessor( |
| 1353 Local<String> name, | 1353 Local<Name> name, |
| 1354 Local<DeclaredAccessorDescriptor> descriptor, | 1354 Local<DeclaredAccessorDescriptor> descriptor, |
| 1355 PropertyAttribute attribute, | 1355 PropertyAttribute attribute, |
| 1356 Local<AccessorSignature> signature, | 1356 Local<AccessorSignature> signature, |
| 1357 AccessControl settings) { | 1357 AccessControl settings) { |
| 1358 void* null = NULL; | 1358 void* null = NULL; |
| 1359 return TemplateSetAccessor( | 1359 return TemplateSetAccessor( |
| 1360 this, name, descriptor, null, null, settings, attribute, signature); | 1360 this, name, descriptor, null, null, settings, attribute, signature); |
| 1361 } | 1361 } |
| 1362 | 1362 |
| 1363 | 1363 |
| 1364 void Template::SetNativeDataProperty(v8::Local<String> name, | 1364 void Template::SetNativeDataProperty(v8::Local<String> name, |
| 1365 AccessorGetterCallback getter, | 1365 AccessorGetterCallback getter, |
| 1366 AccessorSetterCallback setter, | 1366 AccessorSetterCallback setter, |
| 1367 v8::Handle<Value> data, | 1367 v8::Handle<Value> data, |
| 1368 PropertyAttribute attribute, | 1368 PropertyAttribute attribute, |
| 1369 v8::Local<AccessorSignature> signature, | 1369 v8::Local<AccessorSignature> signature, |
| 1370 AccessControl settings) { | 1370 AccessControl settings) { |
| 1371 TemplateSetAccessor( | 1371 TemplateSetAccessor( |
| 1372 this, name, getter, setter, data, settings, attribute, signature); | 1372 this, name, getter, setter, data, settings, attribute, signature); |
| 1373 } | 1373 } |
| 1374 | 1374 |
| 1375 | 1375 |
| 1376 void Template::SetNativeDataProperty(v8::Local<Symbol> name, |
| 1377 AccessorSymbolGetterCallback getter, |
| 1378 AccessorSymbolSetterCallback setter, |
| 1379 v8::Handle<Value> data, |
| 1380 PropertyAttribute attribute, |
| 1381 v8::Local<AccessorSignature> signature, |
| 1382 AccessControl settings) { |
| 1383 TemplateSetAccessor( |
| 1384 this, name, getter, setter, data, settings, attribute, signature); |
| 1385 } |
| 1386 |
| 1387 |
| 1376 void ObjectTemplate::SetAccessor(v8::Handle<String> name, | 1388 void ObjectTemplate::SetAccessor(v8::Handle<String> name, |
| 1377 AccessorGetterCallback getter, | 1389 AccessorGetterCallback getter, |
| 1378 AccessorSetterCallback setter, | 1390 AccessorSetterCallback setter, |
| 1379 v8::Handle<Value> data, | 1391 v8::Handle<Value> data, |
| 1380 AccessControl settings, | 1392 AccessControl settings, |
| 1381 PropertyAttribute attribute, | 1393 PropertyAttribute attribute, |
| 1382 v8::Handle<AccessorSignature> signature) { | 1394 v8::Handle<AccessorSignature> signature) { |
| 1383 TemplateSetAccessor( | 1395 TemplateSetAccessor( |
| 1384 this, name, getter, setter, data, settings, attribute, signature); | 1396 this, name, getter, setter, data, settings, attribute, signature); |
| 1385 } | 1397 } |
| 1386 | 1398 |
| 1387 | 1399 |
| 1388 void ObjectTemplate::SetNamedPropertyHandler( | 1400 void ObjectTemplate::SetAccessor(v8::Handle<Symbol> name, |
| 1389 NamedPropertyGetterCallback getter, | 1401 AccessorSymbolGetterCallback getter, |
| 1390 NamedPropertySetterCallback setter, | 1402 AccessorSymbolSetterCallback setter, |
| 1391 NamedPropertyQueryCallback query, | 1403 v8::Handle<Value> data, |
| 1392 NamedPropertyDeleterCallback remover, | 1404 AccessControl settings, |
| 1393 NamedPropertyEnumeratorCallback enumerator, | 1405 PropertyAttribute attribute, |
| 1394 Handle<Value> data) { | 1406 v8::Handle<AccessorSignature> signature) { |
| 1395 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 1407 TemplateSetAccessor( |
| 1408 this, name, getter, setter, data, settings, attribute, signature); |
| 1409 } |
| 1410 |
| 1411 |
| 1412 template<typename Getter, typename Setter, typename Query, typename Deleter, |
| 1413 typename Enumerator> |
| 1414 static void ObjectTemplateSetNamedPropertyHandler( |
| 1415 ObjectTemplate *templ, |
| 1416 Getter getter, |
| 1417 Setter setter, |
| 1418 Query query, |
| 1419 Deleter remover, |
| 1420 Enumerator enumerator, |
| 1421 Handle<Value> data, |
| 1422 bool can_intercept_symbols) { |
| 1423 i::Isolate* isolate = Utils::OpenHandle(templ)->GetIsolate(); |
| 1396 ENTER_V8(isolate); | 1424 ENTER_V8(isolate); |
| 1397 i::HandleScope scope(isolate); | 1425 i::HandleScope scope(isolate); |
| 1398 EnsureConstructor(isolate, this); | 1426 EnsureConstructor(isolate, templ); |
| 1399 i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast( | 1427 i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast( |
| 1400 Utils::OpenHandle(this)->constructor()); | 1428 Utils::OpenHandle(templ)->constructor()); |
| 1401 i::Handle<i::FunctionTemplateInfo> cons(constructor); | 1429 i::Handle<i::FunctionTemplateInfo> cons(constructor); |
| 1402 i::Handle<i::Struct> struct_obj = | 1430 i::Handle<i::Struct> struct_obj = |
| 1403 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE); | 1431 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE); |
| 1404 i::Handle<i::InterceptorInfo> obj = | 1432 i::Handle<i::InterceptorInfo> obj = |
| 1405 i::Handle<i::InterceptorInfo>::cast(struct_obj); | 1433 i::Handle<i::InterceptorInfo>::cast(struct_obj); |
| 1406 | 1434 |
| 1407 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter); | 1435 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter); |
| 1408 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter); | 1436 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter); |
| 1409 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query); | 1437 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query); |
| 1410 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover); | 1438 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover); |
| 1411 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator); | 1439 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator); |
| 1440 obj->set_flags(0); |
| 1441 obj->set_can_intercept_symbols(can_intercept_symbols); |
| 1412 | 1442 |
| 1413 if (data.IsEmpty()) { | 1443 if (data.IsEmpty()) { |
| 1414 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); | 1444 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); |
| 1415 } | 1445 } |
| 1416 obj->set_data(*Utils::OpenHandle(*data)); | 1446 obj->set_data(*Utils::OpenHandle(*data)); |
| 1417 cons->set_named_property_handler(*obj); | 1447 cons->set_named_property_handler(*obj); |
| 1418 } | 1448 } |
| 1419 | 1449 |
| 1420 | 1450 |
| 1451 void ObjectTemplate::SetNamedPropertyHandler( |
| 1452 NamedPropertyGetterCallback getter, |
| 1453 NamedPropertySetterCallback setter, |
| 1454 NamedPropertyQueryCallback query, |
| 1455 NamedPropertyDeleterCallback remover, |
| 1456 NamedPropertyEnumeratorCallback enumerator, |
| 1457 Handle<Value> data) { |
| 1458 ObjectTemplateSetNamedPropertyHandler( |
| 1459 this, getter, setter, query, remover, enumerator, data, false); |
| 1460 } |
| 1461 |
| 1462 |
| 1463 void ObjectTemplate::SetGenericNamedPropertyHandler( |
| 1464 GenericNamedPropertyGetterCallback getter, |
| 1465 GenericNamedPropertySetterCallback setter, |
| 1466 GenericNamedPropertyQueryCallback query, |
| 1467 GenericNamedPropertyDeleterCallback remover, |
| 1468 GenericNamedPropertyEnumeratorCallback enumerator, |
| 1469 Handle<Value> data) { |
| 1470 ObjectTemplateSetNamedPropertyHandler( |
| 1471 this, getter, setter, query, remover, enumerator, data, true); |
| 1472 } |
| 1473 |
| 1474 |
| 1421 void ObjectTemplate::MarkAsUndetectable() { | 1475 void ObjectTemplate::MarkAsUndetectable() { |
| 1422 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 1476 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 1423 ENTER_V8(isolate); | 1477 ENTER_V8(isolate); |
| 1424 i::HandleScope scope(isolate); | 1478 i::HandleScope scope(isolate); |
| 1425 EnsureConstructor(isolate, this); | 1479 EnsureConstructor(isolate, this); |
| 1426 i::FunctionTemplateInfo* constructor = | 1480 i::FunctionTemplateInfo* constructor = |
| 1427 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor()); | 1481 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor()); |
| 1428 i::Handle<i::FunctionTemplateInfo> cons(constructor); | 1482 i::Handle<i::FunctionTemplateInfo> cons(constructor); |
| 1429 cons->set_undetectable(true); | 1483 cons->set_undetectable(true); |
| 1430 } | 1484 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1478 i::Handle<i::Struct> struct_obj = | 1532 i::Handle<i::Struct> struct_obj = |
| 1479 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE); | 1533 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE); |
| 1480 i::Handle<i::InterceptorInfo> obj = | 1534 i::Handle<i::InterceptorInfo> obj = |
| 1481 i::Handle<i::InterceptorInfo>::cast(struct_obj); | 1535 i::Handle<i::InterceptorInfo>::cast(struct_obj); |
| 1482 | 1536 |
| 1483 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter); | 1537 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter); |
| 1484 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter); | 1538 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter); |
| 1485 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query); | 1539 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query); |
| 1486 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover); | 1540 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover); |
| 1487 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator); | 1541 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator); |
| 1542 obj->set_flags(0); |
| 1488 | 1543 |
| 1489 if (data.IsEmpty()) { | 1544 if (data.IsEmpty()) { |
| 1490 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); | 1545 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); |
| 1491 } | 1546 } |
| 1492 obj->set_data(*Utils::OpenHandle(*data)); | 1547 obj->set_data(*Utils::OpenHandle(*data)); |
| 1493 cons->set_indexed_property_handler(*obj); | 1548 cons->set_indexed_property_handler(*obj); |
| 1494 } | 1549 } |
| 1495 | 1550 |
| 1496 | 1551 |
| 1497 void ObjectTemplate::SetCallAsFunctionHandler(FunctionCallback callback, | 1552 void ObjectTemplate::SetCallAsFunctionHandler(FunctionCallback callback, |
| (...skipping 802 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2300 bool Value::IsFalse() const { | 2355 bool Value::IsFalse() const { |
| 2301 return Utils::OpenHandle(this)->IsFalse(); | 2356 return Utils::OpenHandle(this)->IsFalse(); |
| 2302 } | 2357 } |
| 2303 | 2358 |
| 2304 | 2359 |
| 2305 bool Value::IsFunction() const { | 2360 bool Value::IsFunction() const { |
| 2306 return Utils::OpenHandle(this)->IsJSFunction(); | 2361 return Utils::OpenHandle(this)->IsJSFunction(); |
| 2307 } | 2362 } |
| 2308 | 2363 |
| 2309 | 2364 |
| 2365 bool Value::IsName() const { |
| 2366 return Utils::OpenHandle(this)->IsName(); |
| 2367 } |
| 2368 |
| 2369 |
| 2310 bool Value::FullIsString() const { | 2370 bool Value::FullIsString() const { |
| 2311 bool result = Utils::OpenHandle(this)->IsString(); | 2371 bool result = Utils::OpenHandle(this)->IsString(); |
| 2312 ASSERT_EQ(result, QuickIsString()); | 2372 ASSERT_EQ(result, QuickIsString()); |
| 2313 return result; | 2373 return result; |
| 2314 } | 2374 } |
| 2315 | 2375 |
| 2316 | 2376 |
| 2317 bool Value::IsSymbol() const { | 2377 bool Value::IsSymbol() const { |
| 2318 return Utils::OpenHandle(this)->IsSymbol(); | 2378 return Utils::OpenHandle(this)->IsSymbol(); |
| 2319 } | 2379 } |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2608 | 2668 |
| 2609 | 2669 |
| 2610 void v8::Function::CheckCast(Value* that) { | 2670 void v8::Function::CheckCast(Value* that) { |
| 2611 i::Handle<i::Object> obj = Utils::OpenHandle(that); | 2671 i::Handle<i::Object> obj = Utils::OpenHandle(that); |
| 2612 Utils::ApiCheck(obj->IsJSFunction(), | 2672 Utils::ApiCheck(obj->IsJSFunction(), |
| 2613 "v8::Function::Cast()", | 2673 "v8::Function::Cast()", |
| 2614 "Could not convert to function"); | 2674 "Could not convert to function"); |
| 2615 } | 2675 } |
| 2616 | 2676 |
| 2617 | 2677 |
| 2678 void v8::Name::CheckCast(v8::Value* that) { |
| 2679 i::Handle<i::Object> obj = Utils::OpenHandle(that); |
| 2680 Utils::ApiCheck(obj->IsName(), |
| 2681 "v8::Name::Cast()", |
| 2682 "Could not convert to name"); |
| 2683 } |
| 2684 |
| 2685 |
| 2618 void v8::String::CheckCast(v8::Value* that) { | 2686 void v8::String::CheckCast(v8::Value* that) { |
| 2619 i::Handle<i::Object> obj = Utils::OpenHandle(that); | 2687 i::Handle<i::Object> obj = Utils::OpenHandle(that); |
| 2620 Utils::ApiCheck(obj->IsString(), | 2688 Utils::ApiCheck(obj->IsString(), |
| 2621 "v8::String::Cast()", | 2689 "v8::String::Cast()", |
| 2622 "Could not convert to string"); | 2690 "Could not convert to string"); |
| 2623 } | 2691 } |
| 2624 | 2692 |
| 2625 | 2693 |
| 2626 void v8::Symbol::CheckCast(v8::Value* that) { | 2694 void v8::Symbol::CheckCast(v8::Value* that) { |
| 2627 i::Handle<i::Object> obj = Utils::OpenHandle(that); | 2695 i::Handle<i::Object> obj = Utils::OpenHandle(that); |
| (...skipping 748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3376 | 3444 |
| 3377 | 3445 |
| 3378 bool v8::Object::Has(uint32_t index) { | 3446 bool v8::Object::Has(uint32_t index) { |
| 3379 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3447 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 3380 ON_BAILOUT(isolate, "v8::Object::HasProperty()", return false); | 3448 ON_BAILOUT(isolate, "v8::Object::HasProperty()", return false); |
| 3381 i::Handle<i::JSObject> self = Utils::OpenHandle(this); | 3449 i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
| 3382 return i::JSReceiver::HasElement(self, index); | 3450 return i::JSReceiver::HasElement(self, index); |
| 3383 } | 3451 } |
| 3384 | 3452 |
| 3385 | 3453 |
| 3386 template<typename Setter, typename Getter, typename Data> | 3454 template<typename Getter, typename Setter, typename Data> |
| 3387 static inline bool ObjectSetAccessor(Object* obj, | 3455 static inline bool ObjectSetAccessor(Object* obj, |
| 3388 Handle<String> name, | 3456 Handle<Name> name, |
| 3389 Setter getter, | 3457 Getter getter, |
| 3390 Getter setter, | 3458 Setter setter, |
| 3391 Data data, | 3459 Data data, |
| 3392 AccessControl settings, | 3460 AccessControl settings, |
| 3393 PropertyAttribute attributes) { | 3461 PropertyAttribute attributes) { |
| 3394 i::Isolate* isolate = Utils::OpenHandle(obj)->GetIsolate(); | 3462 i::Isolate* isolate = Utils::OpenHandle(obj)->GetIsolate(); |
| 3395 ON_BAILOUT(isolate, "v8::Object::SetAccessor()", return false); | 3463 ON_BAILOUT(isolate, "v8::Object::SetAccessor()", return false); |
| 3396 ENTER_V8(isolate); | 3464 ENTER_V8(isolate); |
| 3397 i::HandleScope scope(isolate); | 3465 i::HandleScope scope(isolate); |
| 3398 v8::Handle<AccessorSignature> signature; | 3466 v8::Handle<AccessorSignature> signature; |
| 3399 i::Handle<i::AccessorInfo> info = MakeAccessorInfo( | 3467 i::Handle<i::AccessorInfo> info = MakeAccessorInfo( |
| 3400 name, getter, setter, data, settings, attributes, signature); | 3468 name, getter, setter, data, settings, attributes, signature); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 3415 AccessorGetterCallback getter, | 3483 AccessorGetterCallback getter, |
| 3416 AccessorSetterCallback setter, | 3484 AccessorSetterCallback setter, |
| 3417 v8::Handle<Value> data, | 3485 v8::Handle<Value> data, |
| 3418 AccessControl settings, | 3486 AccessControl settings, |
| 3419 PropertyAttribute attributes) { | 3487 PropertyAttribute attributes) { |
| 3420 return ObjectSetAccessor( | 3488 return ObjectSetAccessor( |
| 3421 this, name, getter, setter, data, settings, attributes); | 3489 this, name, getter, setter, data, settings, attributes); |
| 3422 } | 3490 } |
| 3423 | 3491 |
| 3424 | 3492 |
| 3425 bool Object::SetDeclaredAccessor(Local<String> name, | 3493 bool Object::SetAccessor(Handle<Symbol> name, |
| 3494 AccessorSymbolGetterCallback getter, |
| 3495 AccessorSymbolSetterCallback setter, |
| 3496 v8::Handle<Value> data, |
| 3497 AccessControl settings, |
| 3498 PropertyAttribute attributes) { |
| 3499 return ObjectSetAccessor( |
| 3500 this, name, getter, setter, data, settings, attributes); |
| 3501 } |
| 3502 |
| 3503 |
| 3504 bool Object::SetDeclaredAccessor(Local<Name> name, |
| 3426 Local<DeclaredAccessorDescriptor> descriptor, | 3505 Local<DeclaredAccessorDescriptor> descriptor, |
| 3427 PropertyAttribute attributes, | 3506 PropertyAttribute attributes, |
| 3428 AccessControl settings) { | 3507 AccessControl settings) { |
| 3429 void* null = NULL; | 3508 void* null = NULL; |
| 3430 return ObjectSetAccessor( | 3509 return ObjectSetAccessor( |
| 3431 this, name, descriptor, null, null, settings, attributes); | 3510 this, name, descriptor, null, null, settings, attributes); |
| 3432 } | 3511 } |
| 3433 | 3512 |
| 3434 | 3513 |
| 3435 void Object::SetAccessorProperty(Local<String> name, | 3514 void Object::SetAccessorProperty(Local<Name> name, |
| 3436 Local<Function> getter, | 3515 Local<Function> getter, |
| 3437 Handle<Function> setter, | 3516 Handle<Function> setter, |
| 3438 PropertyAttribute attribute, | 3517 PropertyAttribute attribute, |
| 3439 AccessControl settings) { | 3518 AccessControl settings) { |
| 3440 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3519 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 3441 ON_BAILOUT(isolate, "v8::Object::SetAccessorProperty()", return); | 3520 ON_BAILOUT(isolate, "v8::Object::SetAccessorProperty()", return); |
| 3442 ENTER_V8(isolate); | 3521 ENTER_V8(isolate); |
| 3443 i::HandleScope scope(isolate); | 3522 i::HandleScope scope(isolate); |
| 3444 i::Handle<i::Object> getter_i = v8::Utils::OpenHandle(*getter); | 3523 i::Handle<i::Object> getter_i = v8::Utils::OpenHandle(*getter); |
| 3445 i::Handle<i::Object> setter_i = v8::Utils::OpenHandle(*setter, true); | 3524 i::Handle<i::Object> setter_i = v8::Utils::OpenHandle(*setter, true); |
| (...skipping 4153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7599 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7678 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
| 7600 Address callback_address = | 7679 Address callback_address = |
| 7601 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7680 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 7602 VMState<EXTERNAL> state(isolate); | 7681 VMState<EXTERNAL> state(isolate); |
| 7603 ExternalCallbackScope call_scope(isolate, callback_address); | 7682 ExternalCallbackScope call_scope(isolate, callback_address); |
| 7604 callback(info); | 7683 callback(info); |
| 7605 } | 7684 } |
| 7606 | 7685 |
| 7607 | 7686 |
| 7608 } } // namespace v8::internal | 7687 } } // namespace v8::internal |
| OLD | NEW |