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

Side by Side Diff: src/api.cc

Issue 341453003: Support symbol-named properties in API (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/api.h ('k') | src/arguments.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/api.h" 5 #include "src/api.h"
6 6
7 #include <string.h> // For memcpy, strlen. 7 #include <string.h> // For memcpy, strlen.
8 #ifdef V8_USE_ADDRESS_SANITIZER 8 #ifdef V8_USE_ADDRESS_SANITIZER
9 #include <sanitizer/asan_interface.h> 9 #include <sanitizer/asan_interface.h>
10 #endif // V8_USE_ADDRESS_SANITIZER 10 #endif // V8_USE_ADDRESS_SANITIZER
(...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « src/api.h ('k') | src/arguments.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698