| 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 1189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1200 AccessControl settings, | 1200 AccessControl settings, |
| 1201 PropertyAttribute attribute, | 1201 PropertyAttribute attribute, |
| 1202 v8::Handle<AccessorSignature> signature) { | 1202 v8::Handle<AccessorSignature> signature) { |
| 1203 TemplateSetAccessor( | 1203 TemplateSetAccessor( |
| 1204 this, name, getter, setter, data, settings, attribute, signature); | 1204 this, name, getter, setter, data, settings, attribute, signature); |
| 1205 } | 1205 } |
| 1206 | 1206 |
| 1207 | 1207 |
| 1208 template <typename Getter, typename Setter, typename Query, typename Deleter, | 1208 template <typename Getter, typename Setter, typename Query, typename Deleter, |
| 1209 typename Enumerator> | 1209 typename Enumerator> |
| 1210 static void ObjectTemplateSetNamedPropertyHandler(ObjectTemplate* templ, | 1210 static void ObjectTemplateSetNamedPropertyHandler( |
| 1211 Getter getter, Setter setter, | 1211 ObjectTemplate* templ, Getter getter, Setter setter, Query query, |
| 1212 Query query, Deleter remover, | 1212 Deleter remover, Enumerator enumerator, Handle<Value> data, |
| 1213 Enumerator enumerator, | 1213 bool can_intercept_symbols, PropertyHandlerFlags flags) { |
| 1214 Handle<Value> data, | |
| 1215 bool can_intercept_symbols) { | |
| 1216 i::Isolate* isolate = Utils::OpenHandle(templ)->GetIsolate(); | 1214 i::Isolate* isolate = Utils::OpenHandle(templ)->GetIsolate(); |
| 1217 ENTER_V8(isolate); | 1215 ENTER_V8(isolate); |
| 1218 i::HandleScope scope(isolate); | 1216 i::HandleScope scope(isolate); |
| 1219 auto cons = EnsureConstructor(isolate, templ); | 1217 auto cons = EnsureConstructor(isolate, templ); |
| 1220 EnsureNotInstantiated(cons, "ObjectTemplateSetNamedPropertyHandler"); | 1218 EnsureNotInstantiated(cons, "ObjectTemplateSetNamedPropertyHandler"); |
| 1221 i::Handle<i::Struct> struct_obj = | 1219 auto obj = i::Handle<i::InterceptorInfo>::cast( |
| 1222 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE); | 1220 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE)); |
| 1223 i::Handle<i::InterceptorInfo> obj = | |
| 1224 i::Handle<i::InterceptorInfo>::cast(struct_obj); | |
| 1225 | 1221 |
| 1226 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter); | 1222 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter); |
| 1227 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter); | 1223 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter); |
| 1228 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query); | 1224 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query); |
| 1229 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover); | 1225 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover); |
| 1230 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator); | 1226 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator); |
| 1231 obj->set_flags(0); | 1227 obj->set_flags(0); |
| 1232 obj->set_can_intercept_symbols(can_intercept_symbols); | 1228 obj->set_can_intercept_symbols(can_intercept_symbols); |
| 1229 obj->set_all_can_read(static_cast<int>(flags) & |
| 1230 static_cast<int>(PropertyHandlerFlags::kAllCanRead)); |
| 1233 | 1231 |
| 1234 if (data.IsEmpty()) { | 1232 if (data.IsEmpty()) { |
| 1235 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); | 1233 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); |
| 1236 } | 1234 } |
| 1237 obj->set_data(*Utils::OpenHandle(*data)); | 1235 obj->set_data(*Utils::OpenHandle(*data)); |
| 1238 cons->set_named_property_handler(*obj); | 1236 cons->set_named_property_handler(*obj); |
| 1239 } | 1237 } |
| 1240 | 1238 |
| 1241 | 1239 |
| 1242 void ObjectTemplate::SetNamedPropertyHandler( | 1240 void ObjectTemplate::SetNamedPropertyHandler( |
| 1243 NamedPropertyGetterCallback getter, NamedPropertySetterCallback setter, | 1241 NamedPropertyGetterCallback getter, NamedPropertySetterCallback setter, |
| 1244 NamedPropertyQueryCallback query, NamedPropertyDeleterCallback remover, | 1242 NamedPropertyQueryCallback query, NamedPropertyDeleterCallback remover, |
| 1245 NamedPropertyEnumeratorCallback enumerator, Handle<Value> data) { | 1243 NamedPropertyEnumeratorCallback enumerator, Handle<Value> data) { |
| 1246 ObjectTemplateSetNamedPropertyHandler(this, getter, setter, query, remover, | 1244 ObjectTemplateSetNamedPropertyHandler(this, getter, setter, query, remover, |
| 1247 enumerator, data, false); | 1245 enumerator, data, false, |
| 1246 PropertyHandlerFlags::kNone); |
| 1248 } | 1247 } |
| 1249 | 1248 |
| 1250 | 1249 |
| 1251 void ObjectTemplate::SetHandler( | 1250 void ObjectTemplate::SetHandler( |
| 1252 const NamedPropertyHandlerConfiguration& config) { | 1251 const NamedPropertyHandlerConfiguration& config) { |
| 1253 ObjectTemplateSetNamedPropertyHandler(this, config.getter, config.setter, | 1252 ObjectTemplateSetNamedPropertyHandler( |
| 1254 config.query, config.deleter, | 1253 this, config.getter, config.setter, config.query, config.deleter, |
| 1255 config.enumerator, config.data, true); | 1254 config.enumerator, config.data, true, config.flags); |
| 1256 } | 1255 } |
| 1257 | 1256 |
| 1258 | 1257 |
| 1259 void ObjectTemplate::MarkAsUndetectable() { | 1258 void ObjectTemplate::MarkAsUndetectable() { |
| 1260 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 1259 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 1261 ENTER_V8(isolate); | 1260 ENTER_V8(isolate); |
| 1262 i::HandleScope scope(isolate); | 1261 i::HandleScope scope(isolate); |
| 1263 auto cons = EnsureConstructor(isolate, this); | 1262 auto cons = EnsureConstructor(isolate, this); |
| 1264 EnsureNotInstantiated(cons, "v8::ObjectTemplate::MarkAsUndetectable"); | 1263 EnsureNotInstantiated(cons, "v8::ObjectTemplate::MarkAsUndetectable"); |
| 1265 cons->set_undetectable(true); | 1264 cons->set_undetectable(true); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1295 } | 1294 } |
| 1296 | 1295 |
| 1297 | 1296 |
| 1298 void ObjectTemplate::SetHandler( | 1297 void ObjectTemplate::SetHandler( |
| 1299 const IndexedPropertyHandlerConfiguration& config) { | 1298 const IndexedPropertyHandlerConfiguration& config) { |
| 1300 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 1299 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 1301 ENTER_V8(isolate); | 1300 ENTER_V8(isolate); |
| 1302 i::HandleScope scope(isolate); | 1301 i::HandleScope scope(isolate); |
| 1303 auto cons = EnsureConstructor(isolate, this); | 1302 auto cons = EnsureConstructor(isolate, this); |
| 1304 EnsureNotInstantiated(cons, "v8::ObjectTemplate::SetHandler"); | 1303 EnsureNotInstantiated(cons, "v8::ObjectTemplate::SetHandler"); |
| 1305 i::Handle<i::Struct> struct_obj = | 1304 auto obj = i::Handle<i::InterceptorInfo>::cast( |
| 1306 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE); | 1305 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE)); |
| 1307 i::Handle<i::InterceptorInfo> obj = | |
| 1308 i::Handle<i::InterceptorInfo>::cast(struct_obj); | |
| 1309 | 1306 |
| 1310 if (config.getter != 0) SET_FIELD_WRAPPED(obj, set_getter, config.getter); | 1307 if (config.getter != 0) SET_FIELD_WRAPPED(obj, set_getter, config.getter); |
| 1311 if (config.setter != 0) SET_FIELD_WRAPPED(obj, set_setter, config.setter); | 1308 if (config.setter != 0) SET_FIELD_WRAPPED(obj, set_setter, config.setter); |
| 1312 if (config.query != 0) SET_FIELD_WRAPPED(obj, set_query, config.query); | 1309 if (config.query != 0) SET_FIELD_WRAPPED(obj, set_query, config.query); |
| 1313 if (config.deleter != 0) SET_FIELD_WRAPPED(obj, set_deleter, config.deleter); | 1310 if (config.deleter != 0) SET_FIELD_WRAPPED(obj, set_deleter, config.deleter); |
| 1314 if (config.enumerator != 0) { | 1311 if (config.enumerator != 0) { |
| 1315 SET_FIELD_WRAPPED(obj, set_enumerator, config.enumerator); | 1312 SET_FIELD_WRAPPED(obj, set_enumerator, config.enumerator); |
| 1316 } | 1313 } |
| 1317 obj->set_flags(0); | 1314 obj->set_flags(0); |
| 1315 obj->set_all_can_read(static_cast<int>(config.flags) & |
| 1316 static_cast<int>(PropertyHandlerFlags::kAllCanRead)); |
| 1318 | 1317 |
| 1319 v8::Local<v8::Value> data = config.data; | 1318 v8::Local<v8::Value> data = config.data; |
| 1320 if (data.IsEmpty()) { | 1319 if (data.IsEmpty()) { |
| 1321 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); | 1320 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); |
| 1322 } | 1321 } |
| 1323 obj->set_data(*Utils::OpenHandle(*data)); | 1322 obj->set_data(*Utils::OpenHandle(*data)); |
| 1324 cons->set_indexed_property_handler(*obj); | 1323 cons->set_indexed_property_handler(*obj); |
| 1325 } | 1324 } |
| 1326 | 1325 |
| 1327 | 1326 |
| (...skipping 6386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7714 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7713 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
| 7715 Address callback_address = | 7714 Address callback_address = |
| 7716 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7715 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 7717 VMState<EXTERNAL> state(isolate); | 7716 VMState<EXTERNAL> state(isolate); |
| 7718 ExternalCallbackScope call_scope(isolate, callback_address); | 7717 ExternalCallbackScope call_scope(isolate, callback_address); |
| 7719 callback(info); | 7718 callback(info); |
| 7720 } | 7719 } |
| 7721 | 7720 |
| 7722 | 7721 |
| 7723 } } // namespace v8::internal | 7722 } } // namespace v8::internal |
| OLD | NEW |