| 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 907 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 918 } | 918 } |
| 919 | 919 |
| 920 | 920 |
| 921 Local<AccessorSignature> AccessorSignature::New( | 921 Local<AccessorSignature> AccessorSignature::New( |
| 922 Isolate* isolate, | 922 Isolate* isolate, |
| 923 Handle<FunctionTemplate> receiver) { | 923 Handle<FunctionTemplate> receiver) { |
| 924 return Utils::AccessorSignatureToLocal(Utils::OpenHandle(*receiver)); | 924 return Utils::AccessorSignatureToLocal(Utils::OpenHandle(*receiver)); |
| 925 } | 925 } |
| 926 | 926 |
| 927 | 927 |
| 928 void Accessor::setOptimizeLevel(AccessorOptimizeLevel jit) { |
| 929 Utils::OpenHandle(this)->set_can_fast_call(jit != kOptimizeNone); |
| 930 } |
| 931 |
| 932 |
| 928 template<typename Operation> | 933 template<typename Operation> |
| 929 static Local<Operation> NewDescriptor( | 934 static Local<Operation> NewDescriptor( |
| 930 Isolate* isolate, | 935 Isolate* isolate, |
| 931 const i::DeclaredAccessorDescriptorData& data, | 936 const i::DeclaredAccessorDescriptorData& data, |
| 932 Data* previous_descriptor) { | 937 Data* previous_descriptor) { |
| 933 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); | 938 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 934 i::Handle<i::DeclaredAccessorDescriptor> previous = | 939 i::Handle<i::DeclaredAccessorDescriptor> previous = |
| 935 i::Handle<i::DeclaredAccessorDescriptor>(); | 940 i::Handle<i::DeclaredAccessorDescriptor>(); |
| 936 if (previous_descriptor != NULL) { | 941 if (previous_descriptor != NULL) { |
| 937 previous = Utils::OpenHandle( | 942 previous = Utils::OpenHandle( |
| (...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1286 // TODO(dcarney): remove this with ObjectTemplate::SetAccessor | 1291 // TODO(dcarney): remove this with ObjectTemplate::SetAccessor |
| 1287 static inline i::Handle<i::TemplateInfo> GetTemplateInfo( | 1292 static inline i::Handle<i::TemplateInfo> GetTemplateInfo( |
| 1288 i::Isolate* isolate, | 1293 i::Isolate* isolate, |
| 1289 ObjectTemplate* object_template) { | 1294 ObjectTemplate* object_template) { |
| 1290 EnsureConstructor(isolate, object_template); | 1295 EnsureConstructor(isolate, object_template); |
| 1291 return Utils::OpenHandle(object_template); | 1296 return Utils::OpenHandle(object_template); |
| 1292 } | 1297 } |
| 1293 | 1298 |
| 1294 | 1299 |
| 1295 template<typename Getter, typename Setter, typename Data, typename Template> | 1300 template<typename Getter, typename Setter, typename Data, typename Template> |
| 1296 static bool TemplateSetAccessor( | 1301 static inline Local<Accessor> TemplateSetAccessorEx( |
| 1297 Template* template_obj, | 1302 Template* template_obj, |
| 1298 v8::Local<Name> name, | 1303 v8::Local<Name> name, |
| 1299 Getter getter, | 1304 Getter getter, |
| 1300 Setter setter, | 1305 Setter setter, |
| 1301 Data data, | 1306 Data data, |
| 1302 AccessControl settings, | 1307 AccessControl settings, |
| 1303 PropertyAttribute attribute, | 1308 PropertyAttribute attribute, |
| 1304 v8::Local<AccessorSignature> signature) { | 1309 v8::Local<AccessorSignature> signature) { |
| 1305 i::Isolate* isolate = Utils::OpenHandle(template_obj)->GetIsolate(); | 1310 i::Isolate* isolate = Utils::OpenHandle(template_obj)->GetIsolate(); |
| 1306 ENTER_V8(isolate); | 1311 ENTER_V8(isolate); |
| 1307 i::HandleScope scope(isolate); | 1312 i::HandleScope scope(isolate); |
| 1308 i::Handle<i::AccessorInfo> obj = MakeAccessorInfo( | 1313 i::Handle<i::AccessorInfo> obj = MakeAccessorInfo( |
| 1309 name, getter, setter, data, settings, attribute, signature); | 1314 name, getter, setter, data, settings, attribute, signature); |
| 1310 if (obj.is_null()) return false; | 1315 if (obj.is_null()) return Local<Accessor>(); |
| 1316 obj->set_can_fast_call(false); |
| 1311 i::Handle<i::TemplateInfo> info = GetTemplateInfo(isolate, template_obj); | 1317 i::Handle<i::TemplateInfo> info = GetTemplateInfo(isolate, template_obj); |
| 1312 AddPropertyToTemplate(info, obj); | 1318 AddPropertyToTemplate(info, obj); |
| 1313 return true; | 1319 return Utils::ToLocal(scope.CloseAndEscape(obj)); |
| 1320 } |
| 1321 |
| 1322 template<typename Getter, typename Setter, typename Data, typename Template> |
| 1323 static bool TemplateSetAccessor( |
| 1324 Template* template_obj, |
| 1325 v8::Local<Name> name, |
| 1326 Getter getter, |
| 1327 Setter setter, |
| 1328 Data data, |
| 1329 AccessControl settings, |
| 1330 PropertyAttribute attribute, |
| 1331 v8::Local<AccessorSignature> signature) { |
| 1332 return (!(TemplateSetAccessorEx( |
| 1333 template_obj, name, getter, setter, |
| 1334 data, settings, attribute, signature).IsEmpty())); |
| 1314 } | 1335 } |
| 1315 | 1336 |
| 1316 | 1337 |
| 1317 bool Template::SetDeclaredAccessor( | 1338 bool Template::SetDeclaredAccessor( |
| 1318 Local<Name> name, | 1339 Local<Name> name, |
| 1319 Local<DeclaredAccessorDescriptor> descriptor, | 1340 Local<DeclaredAccessorDescriptor> descriptor, |
| 1320 PropertyAttribute attribute, | 1341 PropertyAttribute attribute, |
| 1321 Local<AccessorSignature> signature, | 1342 Local<AccessorSignature> signature, |
| 1322 AccessControl settings) { | 1343 AccessControl settings) { |
| 1323 void* null = NULL; | 1344 void* null = NULL; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1354 AccessorGetterCallback getter, | 1375 AccessorGetterCallback getter, |
| 1355 AccessorSetterCallback setter, | 1376 AccessorSetterCallback setter, |
| 1356 v8::Handle<Value> data, | 1377 v8::Handle<Value> data, |
| 1357 AccessControl settings, | 1378 AccessControl settings, |
| 1358 PropertyAttribute attribute, | 1379 PropertyAttribute attribute, |
| 1359 v8::Handle<AccessorSignature> signature) { | 1380 v8::Handle<AccessorSignature> signature) { |
| 1360 TemplateSetAccessor( | 1381 TemplateSetAccessor( |
| 1361 this, name, getter, setter, data, settings, attribute, signature); | 1382 this, name, getter, setter, data, settings, attribute, signature); |
| 1362 } | 1383 } |
| 1363 | 1384 |
| 1385 Local<Accessor> ObjectTemplate::SetAccessorEx(v8::Handle<String> name, |
| 1386 AccessorGetterCallback getter, |
| 1387 AccessorSetterCallback setter, |
| 1388 v8::Handle<Value> data, |
| 1389 AccessControl settings, |
| 1390 PropertyAttribute attribute, |
| 1391 v8::Handle<AccessorSignature> signature) { |
| 1392 return TemplateSetAccessorEx( |
| 1393 this, name, getter, setter, data, settings, attribute, signature); |
| 1394 } |
| 1364 | 1395 |
| 1365 void ObjectTemplate::SetAccessor(v8::Handle<Name> name, | 1396 void ObjectTemplate::SetAccessor(v8::Handle<Name> name, |
| 1366 AccessorNameGetterCallback getter, | 1397 AccessorNameGetterCallback getter, |
| 1367 AccessorNameSetterCallback setter, | 1398 AccessorNameSetterCallback setter, |
| 1368 v8::Handle<Value> data, | 1399 v8::Handle<Value> data, |
| 1369 AccessControl settings, | 1400 AccessControl settings, |
| 1370 PropertyAttribute attribute, | 1401 PropertyAttribute attribute, |
| 1371 v8::Handle<AccessorSignature> signature) { | 1402 v8::Handle<AccessorSignature> signature) { |
| 1372 TemplateSetAccessor( | 1403 TemplateSetAccessor( |
| 1373 this, name, getter, setter, data, settings, attribute, signature); | 1404 this, name, getter, setter, data, settings, attribute, signature); |
| (...skipping 6364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7738 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7769 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
| 7739 Address callback_address = | 7770 Address callback_address = |
| 7740 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7771 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 7741 VMState<EXTERNAL> state(isolate); | 7772 VMState<EXTERNAL> state(isolate); |
| 7742 ExternalCallbackScope call_scope(isolate, callback_address); | 7773 ExternalCallbackScope call_scope(isolate, callback_address); |
| 7743 callback(info); | 7774 callback(info); |
| 7744 } | 7775 } |
| 7745 | 7776 |
| 7746 | 7777 |
| 7747 } } // namespace v8::internal | 7778 } } // namespace v8::internal |
| OLD | NEW |