| 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 1079 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1090 templ->set_serial_number(i::Smi::kZero); | 1090 templ->set_serial_number(i::Smi::kZero); |
| 1091 if (templ->IsFunctionTemplateInfo()) { | 1091 if (templ->IsFunctionTemplateInfo()) { |
| 1092 i::Handle<i::FunctionTemplateInfo>::cast(templ)->set_do_not_cache(true); | 1092 i::Handle<i::FunctionTemplateInfo>::cast(templ)->set_do_not_cache(true); |
| 1093 } | 1093 } |
| 1094 } | 1094 } |
| 1095 i::ApiNatives::AddDataProperty(isolate, templ, Utils::OpenHandle(*name), | 1095 i::ApiNatives::AddDataProperty(isolate, templ, Utils::OpenHandle(*name), |
| 1096 value_obj, | 1096 value_obj, |
| 1097 static_cast<i::PropertyAttributes>(attribute)); | 1097 static_cast<i::PropertyAttributes>(attribute)); |
| 1098 } | 1098 } |
| 1099 | 1099 |
| 1100 void Template::SetPrivate(v8::Local<Private> name, v8::Local<Data> value, |
| 1101 v8::PropertyAttribute attribute) { |
| 1102 Set(Utils::ToLocal(Utils::OpenHandle(reinterpret_cast<Name*>(*name))), value, |
| 1103 attribute); |
| 1104 } |
| 1100 | 1105 |
| 1101 void Template::SetAccessorProperty( | 1106 void Template::SetAccessorProperty( |
| 1102 v8::Local<v8::Name> name, | 1107 v8::Local<v8::Name> name, |
| 1103 v8::Local<FunctionTemplate> getter, | 1108 v8::Local<FunctionTemplate> getter, |
| 1104 v8::Local<FunctionTemplate> setter, | 1109 v8::Local<FunctionTemplate> setter, |
| 1105 v8::PropertyAttribute attribute, | 1110 v8::PropertyAttribute attribute, |
| 1106 v8::AccessControl access_control) { | 1111 v8::AccessControl access_control) { |
| 1107 // TODO(verwaest): Remove |access_control|. | 1112 // TODO(verwaest): Remove |access_control|. |
| 1108 DCHECK_EQ(v8::DEFAULT, access_control); | 1113 DCHECK_EQ(v8::DEFAULT, access_control); |
| 1109 auto templ = Utils::OpenHandle(this); | 1114 auto templ = Utils::OpenHandle(this); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1153 | 1158 |
| 1154 | 1159 |
| 1155 void FunctionTemplate::Inherit(v8::Local<FunctionTemplate> value) { | 1160 void FunctionTemplate::Inherit(v8::Local<FunctionTemplate> value) { |
| 1156 auto info = Utils::OpenHandle(this); | 1161 auto info = Utils::OpenHandle(this); |
| 1157 EnsureNotInstantiated(info, "v8::FunctionTemplate::Inherit"); | 1162 EnsureNotInstantiated(info, "v8::FunctionTemplate::Inherit"); |
| 1158 i::Isolate* isolate = info->GetIsolate(); | 1163 i::Isolate* isolate = info->GetIsolate(); |
| 1159 ENTER_V8(isolate); | 1164 ENTER_V8(isolate); |
| 1160 info->set_parent_template(*Utils::OpenHandle(*value)); | 1165 info->set_parent_template(*Utils::OpenHandle(*value)); |
| 1161 } | 1166 } |
| 1162 | 1167 |
| 1163 | |
| 1164 static Local<FunctionTemplate> FunctionTemplateNew( | 1168 static Local<FunctionTemplate> FunctionTemplateNew( |
| 1165 i::Isolate* isolate, FunctionCallback callback, | 1169 i::Isolate* isolate, FunctionCallback callback, |
| 1166 experimental::FastAccessorBuilder* fast_handler, v8::Local<Value> data, | 1170 experimental::FastAccessorBuilder* fast_handler, v8::Local<Value> data, |
| 1167 v8::Local<Signature> signature, int length, bool do_not_cache) { | 1171 v8::Local<Signature> signature, int length, bool do_not_cache, |
| 1172 v8::Local<Private> cached_property_name = v8::Local<Private>()) { |
| 1168 i::Handle<i::Struct> struct_obj = | 1173 i::Handle<i::Struct> struct_obj = |
| 1169 isolate->factory()->NewStruct(i::FUNCTION_TEMPLATE_INFO_TYPE); | 1174 isolate->factory()->NewStruct(i::FUNCTION_TEMPLATE_INFO_TYPE); |
| 1170 i::Handle<i::FunctionTemplateInfo> obj = | 1175 i::Handle<i::FunctionTemplateInfo> obj = |
| 1171 i::Handle<i::FunctionTemplateInfo>::cast(struct_obj); | 1176 i::Handle<i::FunctionTemplateInfo>::cast(struct_obj); |
| 1172 InitializeFunctionTemplate(obj); | 1177 InitializeFunctionTemplate(obj); |
| 1173 obj->set_do_not_cache(do_not_cache); | 1178 obj->set_do_not_cache(do_not_cache); |
| 1174 int next_serial_number = 0; | 1179 int next_serial_number = 0; |
| 1175 if (!do_not_cache) { | 1180 if (!do_not_cache) { |
| 1176 next_serial_number = isolate->heap()->GetNextTemplateSerialNumber(); | 1181 next_serial_number = isolate->heap()->GetNextTemplateSerialNumber(); |
| 1177 } | 1182 } |
| 1178 obj->set_serial_number(i::Smi::FromInt(next_serial_number)); | 1183 obj->set_serial_number(i::Smi::FromInt(next_serial_number)); |
| 1179 if (callback != 0) { | 1184 if (callback != 0) { |
| 1180 if (data.IsEmpty()) { | 1185 if (data.IsEmpty()) { |
| 1181 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); | 1186 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); |
| 1182 } | 1187 } |
| 1183 Utils::ToLocal(obj)->SetCallHandler(callback, data, fast_handler); | 1188 Utils::ToLocal(obj)->SetCallHandler(callback, data, fast_handler); |
| 1184 } | 1189 } |
| 1185 obj->set_length(length); | 1190 obj->set_length(length); |
| 1186 obj->set_undetectable(false); | 1191 obj->set_undetectable(false); |
| 1187 obj->set_needs_access_check(false); | 1192 obj->set_needs_access_check(false); |
| 1188 obj->set_accept_any_receiver(true); | 1193 obj->set_accept_any_receiver(true); |
| 1189 if (!signature.IsEmpty()) | 1194 if (!signature.IsEmpty()) |
| 1190 obj->set_signature(*Utils::OpenHandle(*signature)); | 1195 obj->set_signature(*Utils::OpenHandle(*signature)); |
| 1196 obj->set_cached_property_name( |
| 1197 cached_property_name.IsEmpty() |
| 1198 ? isolate->heap()->the_hole_value() |
| 1199 : *Utils::OpenHandle(*cached_property_name)); |
| 1191 return Utils::ToLocal(obj); | 1200 return Utils::ToLocal(obj); |
| 1192 } | 1201 } |
| 1193 | 1202 |
| 1194 Local<FunctionTemplate> FunctionTemplate::New( | 1203 Local<FunctionTemplate> FunctionTemplate::New( |
| 1195 Isolate* isolate, FunctionCallback callback, v8::Local<Value> data, | 1204 Isolate* isolate, FunctionCallback callback, v8::Local<Value> data, |
| 1196 v8::Local<Signature> signature, int length, ConstructorBehavior behavior) { | 1205 v8::Local<Signature> signature, int length, ConstructorBehavior behavior) { |
| 1197 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 1206 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 1198 // Changes to the environment cannot be captured in the snapshot. Expect no | 1207 // Changes to the environment cannot be captured in the snapshot. Expect no |
| 1199 // function templates when the isolate is created for serialization. | 1208 // function templates when the isolate is created for serialization. |
| 1200 LOG_API(i_isolate, FunctionTemplate, New); | 1209 LOG_API(i_isolate, FunctionTemplate, New); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1225 experimental::FastAccessorBuilder* fast_handler, v8::Local<Value> data, | 1234 experimental::FastAccessorBuilder* fast_handler, v8::Local<Value> data, |
| 1226 v8::Local<Signature> signature, int length) { | 1235 v8::Local<Signature> signature, int length) { |
| 1227 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 1236 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 1228 DCHECK(!i_isolate->serializer_enabled()); | 1237 DCHECK(!i_isolate->serializer_enabled()); |
| 1229 LOG_API(i_isolate, FunctionTemplate, NewWithFastHandler); | 1238 LOG_API(i_isolate, FunctionTemplate, NewWithFastHandler); |
| 1230 ENTER_V8(i_isolate); | 1239 ENTER_V8(i_isolate); |
| 1231 return FunctionTemplateNew(i_isolate, callback, fast_handler, data, signature, | 1240 return FunctionTemplateNew(i_isolate, callback, fast_handler, data, signature, |
| 1232 length, false); | 1241 length, false); |
| 1233 } | 1242 } |
| 1234 | 1243 |
| 1244 Local<FunctionTemplate> FunctionTemplate::NewWithCache( |
| 1245 Isolate* isolate, FunctionCallback callback, Local<Private> cache_property, |
| 1246 Local<Value> data, Local<Signature> signature, int length) { |
| 1247 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 1248 DCHECK(!i_isolate->serializer_enabled()); |
| 1249 LOG_API(i_isolate, FunctionTemplate, NewWithFastHandler); |
| 1250 ENTER_V8(i_isolate); |
| 1251 return FunctionTemplateNew(i_isolate, callback, nullptr, data, signature, |
| 1252 length, false, cache_property); |
| 1253 } |
| 1235 | 1254 |
| 1236 Local<Signature> Signature::New(Isolate* isolate, | 1255 Local<Signature> Signature::New(Isolate* isolate, |
| 1237 Local<FunctionTemplate> receiver) { | 1256 Local<FunctionTemplate> receiver) { |
| 1238 return Utils::SignatureToLocal(Utils::OpenHandle(*receiver)); | 1257 return Utils::SignatureToLocal(Utils::OpenHandle(*receiver)); |
| 1239 } | 1258 } |
| 1240 | 1259 |
| 1241 | 1260 |
| 1242 Local<AccessorSignature> AccessorSignature::New( | 1261 Local<AccessorSignature> AccessorSignature::New( |
| 1243 Isolate* isolate, Local<FunctionTemplate> receiver) { | 1262 Isolate* isolate, Local<FunctionTemplate> receiver) { |
| 1244 return Utils::AccessorSignatureToLocal(Utils::OpenHandle(*receiver)); | 1263 return Utils::AccessorSignatureToLocal(Utils::OpenHandle(*receiver)); |
| (...skipping 8392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9637 Address callback_address = | 9656 Address callback_address = |
| 9638 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 9657 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 9639 VMState<EXTERNAL> state(isolate); | 9658 VMState<EXTERNAL> state(isolate); |
| 9640 ExternalCallbackScope call_scope(isolate, callback_address); | 9659 ExternalCallbackScope call_scope(isolate, callback_address); |
| 9641 callback(info); | 9660 callback(info); |
| 9642 } | 9661 } |
| 9643 | 9662 |
| 9644 | 9663 |
| 9645 } // namespace internal | 9664 } // namespace internal |
| 9646 } // namespace v8 | 9665 } // namespace v8 |
| OLD | NEW |