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

Side by Side Diff: src/accessors.cc

Issue 2449783006: Add a native data property that replaces itself with a real data property (Closed)
Patch Set: Created 4 years, 1 month 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
« no previous file with comments | « src/accessors.h ('k') | src/api.cc » ('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/accessors.h" 5 #include "src/accessors.h"
6 6
7 #include "src/api.h" 7 #include "src/api.h"
8 #include "src/contexts.h" 8 #include "src/contexts.h"
9 #include "src/deoptimizer.h" 9 #include "src/deoptimizer.h"
10 #include "src/execution.h" 10 #include "src/execution.h"
11 #include "src/factory.h" 11 #include "src/factory.h"
12 #include "src/frames-inl.h" 12 #include "src/frames-inl.h"
13 #include "src/isolate-inl.h" 13 #include "src/isolate-inl.h"
14 #include "src/list-inl.h" 14 #include "src/list-inl.h"
15 #include "src/messages.h" 15 #include "src/messages.h"
16 #include "src/property-details.h" 16 #include "src/property-details.h"
17 #include "src/prototype.h" 17 #include "src/prototype.h"
18 18
19 namespace v8 { 19 namespace v8 {
20 namespace internal { 20 namespace internal {
21 21
22 Handle<AccessorInfo> Accessors::MakeAccessor( 22 Handle<AccessorInfo> Accessors::MakeAccessor(
23 Isolate* isolate, Handle<Name> name, AccessorNameGetterCallback getter, 23 Isolate* isolate, Handle<Name> name, AccessorNameGetterCallback getter,
24 AccessorNameBooleanSetterCallback setter, PropertyAttributes attributes) { 24 AccessorNameBooleanSetterCallback setter, PropertyAttributes attributes,
25 bool replace_on_access) {
25 Factory* factory = isolate->factory(); 26 Factory* factory = isolate->factory();
26 Handle<AccessorInfo> info = factory->NewAccessorInfo(); 27 Handle<AccessorInfo> info = factory->NewAccessorInfo();
27 info->set_property_attributes(attributes); 28 info->set_property_attributes(attributes);
28 info->set_all_can_read(false); 29 info->set_all_can_read(false);
29 info->set_all_can_write(false); 30 info->set_all_can_write(false);
30 info->set_is_special_data_property(true); 31 info->set_is_special_data_property(true);
31 info->set_is_sloppy(false); 32 info->set_is_sloppy(false);
33 info->set_replace_on_access(replace_on_access);
34 DCHECK_IMPLIES(replace_on_access, setter == nullptr);
32 name = factory->InternalizeName(name); 35 name = factory->InternalizeName(name);
33 info->set_name(*name); 36 info->set_name(*name);
34 Handle<Object> get = v8::FromCData(isolate, getter); 37 Handle<Object> get = v8::FromCData(isolate, getter);
35 if (setter == nullptr) setter = &ReconfigureToDataProperty; 38 if (setter == nullptr) setter = &ReconfigureToDataProperty;
36 Handle<Object> set = v8::FromCData(isolate, setter); 39 Handle<Object> set = v8::FromCData(isolate, setter);
37 info->set_getter(*get); 40 info->set_getter(*get);
38 info->set_setter(*set); 41 info->set_setter(*set);
39 Address redirected = info->redirected_getter(); 42 Address redirected = info->redirected_getter();
40 if (redirected != nullptr) { 43 if (redirected != nullptr) {
41 Handle<Object> js_get = v8::FromCData(isolate, redirected); 44 Handle<Object> js_get = v8::FromCData(isolate, redirected);
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 HandleScope scope(isolate); 134 HandleScope scope(isolate);
132 Object* result = isolate->native_context()->array_values_iterator(); 135 Object* result = isolate->native_context()->array_values_iterator();
133 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(result, isolate))); 136 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(result, isolate)));
134 } 137 }
135 138
136 139
137 Handle<AccessorInfo> Accessors::ArgumentsIteratorInfo( 140 Handle<AccessorInfo> Accessors::ArgumentsIteratorInfo(
138 Isolate* isolate, PropertyAttributes attributes) { 141 Isolate* isolate, PropertyAttributes attributes) {
139 Handle<Name> name = isolate->factory()->iterator_symbol(); 142 Handle<Name> name = isolate->factory()->iterator_symbol();
140 return MakeAccessor(isolate, name, &ArgumentsIteratorGetter, nullptr, 143 return MakeAccessor(isolate, name, &ArgumentsIteratorGetter, nullptr,
141 attributes); 144 attributes, true);
142 } 145 }
143 146
144 147
145 // 148 //
146 // Accessors::ArrayLength 149 // Accessors::ArrayLength
147 // 150 //
148 151
149 152
150 void Accessors::ArrayLengthGetter( 153 void Accessors::ArrayLengthGetter(
151 v8::Local<v8::Name> name, 154 v8::Local<v8::Name> name,
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 info.GetReturnValue().Set(false); 195 info.GetReturnValue().Set(false);
193 } 196 }
194 } else { 197 } else {
195 info.GetReturnValue().Set(true); 198 info.GetReturnValue().Set(true);
196 } 199 }
197 } 200 }
198 201
199 202
200 Handle<AccessorInfo> Accessors::ArrayLengthInfo( 203 Handle<AccessorInfo> Accessors::ArrayLengthInfo(
201 Isolate* isolate, PropertyAttributes attributes) { 204 Isolate* isolate, PropertyAttributes attributes) {
202 return MakeAccessor(isolate, 205 return MakeAccessor(isolate, isolate->factory()->length_string(),
203 isolate->factory()->length_string(), 206 &ArrayLengthGetter, &ArrayLengthSetter, attributes,
204 &ArrayLengthGetter, 207 false);
205 &ArrayLengthSetter,
206 attributes);
207 } 208 }
208 209
209 // 210 //
210 // Accessors::ModuleNamespaceEntry 211 // Accessors::ModuleNamespaceEntry
211 // 212 //
212 213
213 void Accessors::ModuleNamespaceEntryGetter( 214 void Accessors::ModuleNamespaceEntryGetter(
214 v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { 215 v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
215 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 216 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
216 HandleScope scope(isolate); 217 HandleScope scope(isolate);
(...skipping 23 matching lines...) Expand all
240 i::Object::TypeOf(isolate, holder), holder)); 241 i::Object::TypeOf(isolate, holder), holder));
241 isolate->OptionalRescheduleException(false); 242 isolate->OptionalRescheduleException(false);
242 } else { 243 } else {
243 info.GetReturnValue().Set(false); 244 info.GetReturnValue().Set(false);
244 } 245 }
245 } 246 }
246 247
247 Handle<AccessorInfo> Accessors::ModuleNamespaceEntryInfo( 248 Handle<AccessorInfo> Accessors::ModuleNamespaceEntryInfo(
248 Isolate* isolate, Handle<String> name, PropertyAttributes attributes) { 249 Isolate* isolate, Handle<String> name, PropertyAttributes attributes) {
249 return MakeAccessor(isolate, name, &ModuleNamespaceEntryGetter, 250 return MakeAccessor(isolate, name, &ModuleNamespaceEntryGetter,
250 &ModuleNamespaceEntrySetter, attributes); 251 &ModuleNamespaceEntrySetter, attributes, false);
251 } 252 }
252 253
253 254
254 // 255 //
255 // Accessors::StringLength 256 // Accessors::StringLength
256 // 257 //
257 258
258 void Accessors::StringLengthGetter( 259 void Accessors::StringLengthGetter(
259 v8::Local<v8::Name> name, 260 v8::Local<v8::Name> name,
260 const v8::PropertyCallbackInfo<v8::Value>& info) { 261 const v8::PropertyCallbackInfo<v8::Value>& info) {
(...skipping 15 matching lines...) Expand all
276 value = JSValue::cast(*Utils::OpenHandle(*info.Holder()))->value(); 277 value = JSValue::cast(*Utils::OpenHandle(*info.Holder()))->value();
277 } 278 }
278 Object* result = Smi::FromInt(String::cast(value)->length()); 279 Object* result = Smi::FromInt(String::cast(value)->length());
279 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(result, isolate))); 280 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(result, isolate)));
280 } 281 }
281 282
282 283
283 Handle<AccessorInfo> Accessors::StringLengthInfo( 284 Handle<AccessorInfo> Accessors::StringLengthInfo(
284 Isolate* isolate, PropertyAttributes attributes) { 285 Isolate* isolate, PropertyAttributes attributes) {
285 return MakeAccessor(isolate, isolate->factory()->length_string(), 286 return MakeAccessor(isolate, isolate->factory()->length_string(),
286 &StringLengthGetter, nullptr, attributes); 287 &StringLengthGetter, nullptr, attributes, false);
287 } 288 }
288 289
289 290
290 // 291 //
291 // Accessors::ScriptColumnOffset 292 // Accessors::ScriptColumnOffset
292 // 293 //
293 294
294 295
295 void Accessors::ScriptColumnOffsetGetter( 296 void Accessors::ScriptColumnOffsetGetter(
296 v8::Local<v8::Name> name, 297 v8::Local<v8::Name> name,
297 const v8::PropertyCallbackInfo<v8::Value>& info) { 298 const v8::PropertyCallbackInfo<v8::Value>& info) {
298 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 299 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
299 DisallowHeapAllocation no_allocation; 300 DisallowHeapAllocation no_allocation;
300 HandleScope scope(isolate); 301 HandleScope scope(isolate);
301 Object* object = *Utils::OpenHandle(*info.Holder()); 302 Object* object = *Utils::OpenHandle(*info.Holder());
302 Object* res = Smi::FromInt( 303 Object* res = Smi::FromInt(
303 Script::cast(JSValue::cast(object)->value())->column_offset()); 304 Script::cast(JSValue::cast(object)->value())->column_offset());
304 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate))); 305 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate)));
305 } 306 }
306 307
307 308
308 Handle<AccessorInfo> Accessors::ScriptColumnOffsetInfo( 309 Handle<AccessorInfo> Accessors::ScriptColumnOffsetInfo(
309 Isolate* isolate, PropertyAttributes attributes) { 310 Isolate* isolate, PropertyAttributes attributes) {
310 Handle<String> name(isolate->factory()->InternalizeOneByteString( 311 Handle<String> name(isolate->factory()->InternalizeOneByteString(
311 STATIC_CHAR_VECTOR("column_offset"))); 312 STATIC_CHAR_VECTOR("column_offset")));
312 return MakeAccessor(isolate, name, &ScriptColumnOffsetGetter, nullptr, 313 return MakeAccessor(isolate, name, &ScriptColumnOffsetGetter, nullptr,
313 attributes); 314 attributes, false);
314 } 315 }
315 316
316 317
317 // 318 //
318 // Accessors::ScriptId 319 // Accessors::ScriptId
319 // 320 //
320 321
321 322
322 void Accessors::ScriptIdGetter( 323 void Accessors::ScriptIdGetter(
323 v8::Local<v8::Name> name, 324 v8::Local<v8::Name> name,
324 const v8::PropertyCallbackInfo<v8::Value>& info) { 325 const v8::PropertyCallbackInfo<v8::Value>& info) {
325 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 326 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
326 DisallowHeapAllocation no_allocation; 327 DisallowHeapAllocation no_allocation;
327 HandleScope scope(isolate); 328 HandleScope scope(isolate);
328 Object* object = *Utils::OpenHandle(*info.Holder()); 329 Object* object = *Utils::OpenHandle(*info.Holder());
329 Object* id = Smi::FromInt(Script::cast(JSValue::cast(object)->value())->id()); 330 Object* id = Smi::FromInt(Script::cast(JSValue::cast(object)->value())->id());
330 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(id, isolate))); 331 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(id, isolate)));
331 } 332 }
332 333
333 334
334 Handle<AccessorInfo> Accessors::ScriptIdInfo( 335 Handle<AccessorInfo> Accessors::ScriptIdInfo(
335 Isolate* isolate, PropertyAttributes attributes) { 336 Isolate* isolate, PropertyAttributes attributes) {
336 Handle<String> name( 337 Handle<String> name(
337 isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("id"))); 338 isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("id")));
338 return MakeAccessor(isolate, name, &ScriptIdGetter, nullptr, attributes); 339 return MakeAccessor(isolate, name, &ScriptIdGetter, nullptr, attributes,
340 false);
339 } 341 }
340 342
341 343
342 // 344 //
343 // Accessors::ScriptName 345 // Accessors::ScriptName
344 // 346 //
345 347
346 348
347 void Accessors::ScriptNameGetter( 349 void Accessors::ScriptNameGetter(
348 v8::Local<v8::Name> name, 350 v8::Local<v8::Name> name,
349 const v8::PropertyCallbackInfo<v8::Value>& info) { 351 const v8::PropertyCallbackInfo<v8::Value>& info) {
350 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 352 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
351 DisallowHeapAllocation no_allocation; 353 DisallowHeapAllocation no_allocation;
352 HandleScope scope(isolate); 354 HandleScope scope(isolate);
353 Object* object = *Utils::OpenHandle(*info.Holder()); 355 Object* object = *Utils::OpenHandle(*info.Holder());
354 Object* source = Script::cast(JSValue::cast(object)->value())->name(); 356 Object* source = Script::cast(JSValue::cast(object)->value())->name();
355 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(source, isolate))); 357 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(source, isolate)));
356 } 358 }
357 359
358 360
359 Handle<AccessorInfo> Accessors::ScriptNameInfo( 361 Handle<AccessorInfo> Accessors::ScriptNameInfo(
360 Isolate* isolate, PropertyAttributes attributes) { 362 Isolate* isolate, PropertyAttributes attributes) {
361 return MakeAccessor(isolate, isolate->factory()->name_string(), 363 return MakeAccessor(isolate, isolate->factory()->name_string(),
362 &ScriptNameGetter, nullptr, attributes); 364 &ScriptNameGetter, nullptr, attributes, false);
363 } 365 }
364 366
365 367
366 // 368 //
367 // Accessors::ScriptSource 369 // Accessors::ScriptSource
368 // 370 //
369 371
370 372
371 void Accessors::ScriptSourceGetter( 373 void Accessors::ScriptSourceGetter(
372 v8::Local<v8::Name> name, 374 v8::Local<v8::Name> name,
373 const v8::PropertyCallbackInfo<v8::Value>& info) { 375 const v8::PropertyCallbackInfo<v8::Value>& info) {
374 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 376 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
375 DisallowHeapAllocation no_allocation; 377 DisallowHeapAllocation no_allocation;
376 HandleScope scope(isolate); 378 HandleScope scope(isolate);
377 Object* object = *Utils::OpenHandle(*info.Holder()); 379 Object* object = *Utils::OpenHandle(*info.Holder());
378 Object* source = Script::cast(JSValue::cast(object)->value())->source(); 380 Object* source = Script::cast(JSValue::cast(object)->value())->source();
379 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(source, isolate))); 381 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(source, isolate)));
380 } 382 }
381 383
382 384
383 Handle<AccessorInfo> Accessors::ScriptSourceInfo( 385 Handle<AccessorInfo> Accessors::ScriptSourceInfo(
384 Isolate* isolate, PropertyAttributes attributes) { 386 Isolate* isolate, PropertyAttributes attributes) {
385 return MakeAccessor(isolate, isolate->factory()->source_string(), 387 return MakeAccessor(isolate, isolate->factory()->source_string(),
386 &ScriptSourceGetter, nullptr, attributes); 388 &ScriptSourceGetter, nullptr, attributes, false);
387 } 389 }
388 390
389 391
390 // 392 //
391 // Accessors::ScriptLineOffset 393 // Accessors::ScriptLineOffset
392 // 394 //
393 395
394 396
395 void Accessors::ScriptLineOffsetGetter( 397 void Accessors::ScriptLineOffsetGetter(
396 v8::Local<v8::Name> name, 398 v8::Local<v8::Name> name,
397 const v8::PropertyCallbackInfo<v8::Value>& info) { 399 const v8::PropertyCallbackInfo<v8::Value>& info) {
398 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 400 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
399 DisallowHeapAllocation no_allocation; 401 DisallowHeapAllocation no_allocation;
400 HandleScope scope(isolate); 402 HandleScope scope(isolate);
401 Object* object = *Utils::OpenHandle(*info.Holder()); 403 Object* object = *Utils::OpenHandle(*info.Holder());
402 Object* res = 404 Object* res =
403 Smi::FromInt(Script::cast(JSValue::cast(object)->value())->line_offset()); 405 Smi::FromInt(Script::cast(JSValue::cast(object)->value())->line_offset());
404 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate))); 406 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate)));
405 } 407 }
406 408
407 409
408 Handle<AccessorInfo> Accessors::ScriptLineOffsetInfo( 410 Handle<AccessorInfo> Accessors::ScriptLineOffsetInfo(
409 Isolate* isolate, PropertyAttributes attributes) { 411 Isolate* isolate, PropertyAttributes attributes) {
410 Handle<String> name(isolate->factory()->InternalizeOneByteString( 412 Handle<String> name(isolate->factory()->InternalizeOneByteString(
411 STATIC_CHAR_VECTOR("line_offset"))); 413 STATIC_CHAR_VECTOR("line_offset")));
412 return MakeAccessor(isolate, name, &ScriptLineOffsetGetter, nullptr, 414 return MakeAccessor(isolate, name, &ScriptLineOffsetGetter, nullptr,
413 attributes); 415 attributes, false);
414 } 416 }
415 417
416 418
417 // 419 //
418 // Accessors::ScriptType 420 // Accessors::ScriptType
419 // 421 //
420 422
421 423
422 void Accessors::ScriptTypeGetter( 424 void Accessors::ScriptTypeGetter(
423 v8::Local<v8::Name> name, 425 v8::Local<v8::Name> name,
424 const v8::PropertyCallbackInfo<v8::Value>& info) { 426 const v8::PropertyCallbackInfo<v8::Value>& info) {
425 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 427 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
426 DisallowHeapAllocation no_allocation; 428 DisallowHeapAllocation no_allocation;
427 HandleScope scope(isolate); 429 HandleScope scope(isolate);
428 Object* object = *Utils::OpenHandle(*info.Holder()); 430 Object* object = *Utils::OpenHandle(*info.Holder());
429 Object* res = 431 Object* res =
430 Smi::FromInt(Script::cast(JSValue::cast(object)->value())->type()); 432 Smi::FromInt(Script::cast(JSValue::cast(object)->value())->type());
431 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate))); 433 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate)));
432 } 434 }
433 435
434 436
435 Handle<AccessorInfo> Accessors::ScriptTypeInfo( 437 Handle<AccessorInfo> Accessors::ScriptTypeInfo(
436 Isolate* isolate, PropertyAttributes attributes) { 438 Isolate* isolate, PropertyAttributes attributes) {
437 Handle<String> name( 439 Handle<String> name(
438 isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("type"))); 440 isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("type")));
439 return MakeAccessor(isolate, name, &ScriptTypeGetter, nullptr, attributes); 441 return MakeAccessor(isolate, name, &ScriptTypeGetter, nullptr, attributes,
442 false);
440 } 443 }
441 444
442 445
443 // 446 //
444 // Accessors::ScriptCompilationType 447 // Accessors::ScriptCompilationType
445 // 448 //
446 449
447 450
448 void Accessors::ScriptCompilationTypeGetter( 451 void Accessors::ScriptCompilationTypeGetter(
449 v8::Local<v8::Name> name, 452 v8::Local<v8::Name> name,
450 const v8::PropertyCallbackInfo<v8::Value>& info) { 453 const v8::PropertyCallbackInfo<v8::Value>& info) {
451 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 454 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
452 DisallowHeapAllocation no_allocation; 455 DisallowHeapAllocation no_allocation;
453 HandleScope scope(isolate); 456 HandleScope scope(isolate);
454 Object* object = *Utils::OpenHandle(*info.Holder()); 457 Object* object = *Utils::OpenHandle(*info.Holder());
455 Object* res = Smi::FromInt( 458 Object* res = Smi::FromInt(
456 Script::cast(JSValue::cast(object)->value())->compilation_type()); 459 Script::cast(JSValue::cast(object)->value())->compilation_type());
457 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate))); 460 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate)));
458 } 461 }
459 462
460 463
461 Handle<AccessorInfo> Accessors::ScriptCompilationTypeInfo( 464 Handle<AccessorInfo> Accessors::ScriptCompilationTypeInfo(
462 Isolate* isolate, PropertyAttributes attributes) { 465 Isolate* isolate, PropertyAttributes attributes) {
463 Handle<String> name(isolate->factory()->InternalizeOneByteString( 466 Handle<String> name(isolate->factory()->InternalizeOneByteString(
464 STATIC_CHAR_VECTOR("compilation_type"))); 467 STATIC_CHAR_VECTOR("compilation_type")));
465 return MakeAccessor(isolate, name, &ScriptCompilationTypeGetter, nullptr, 468 return MakeAccessor(isolate, name, &ScriptCompilationTypeGetter, nullptr,
466 attributes); 469 attributes, false);
467 } 470 }
468 471
469 472
470 // 473 //
471 // Accessors::ScriptGetLineEnds 474 // Accessors::ScriptGetLineEnds
472 // 475 //
473 476
474 477
475 void Accessors::ScriptLineEndsGetter( 478 void Accessors::ScriptLineEndsGetter(
476 v8::Local<v8::Name> name, 479 v8::Local<v8::Name> name,
(...skipping 12 matching lines...) Expand all
489 Handle<JSArray> js_array = 492 Handle<JSArray> js_array =
490 isolate->factory()->NewJSArrayWithElements(line_ends); 493 isolate->factory()->NewJSArrayWithElements(line_ends);
491 info.GetReturnValue().Set(Utils::ToLocal(js_array)); 494 info.GetReturnValue().Set(Utils::ToLocal(js_array));
492 } 495 }
493 496
494 497
495 Handle<AccessorInfo> Accessors::ScriptLineEndsInfo( 498 Handle<AccessorInfo> Accessors::ScriptLineEndsInfo(
496 Isolate* isolate, PropertyAttributes attributes) { 499 Isolate* isolate, PropertyAttributes attributes) {
497 Handle<String> name(isolate->factory()->InternalizeOneByteString( 500 Handle<String> name(isolate->factory()->InternalizeOneByteString(
498 STATIC_CHAR_VECTOR("line_ends"))); 501 STATIC_CHAR_VECTOR("line_ends")));
499 return MakeAccessor(isolate, name, &ScriptLineEndsGetter, nullptr, 502 return MakeAccessor(isolate, name, &ScriptLineEndsGetter, nullptr, attributes,
500 attributes); 503 false);
501 } 504 }
502 505
503 506
504 // 507 //
505 // Accessors::ScriptSourceUrl 508 // Accessors::ScriptSourceUrl
506 // 509 //
507 510
508 511
509 void Accessors::ScriptSourceUrlGetter( 512 void Accessors::ScriptSourceUrlGetter(
510 v8::Local<v8::Name> name, 513 v8::Local<v8::Name> name,
511 const v8::PropertyCallbackInfo<v8::Value>& info) { 514 const v8::PropertyCallbackInfo<v8::Value>& info) {
512 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 515 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
513 DisallowHeapAllocation no_allocation; 516 DisallowHeapAllocation no_allocation;
514 HandleScope scope(isolate); 517 HandleScope scope(isolate);
515 Object* object = *Utils::OpenHandle(*info.Holder()); 518 Object* object = *Utils::OpenHandle(*info.Holder());
516 Object* url = Script::cast(JSValue::cast(object)->value())->source_url(); 519 Object* url = Script::cast(JSValue::cast(object)->value())->source_url();
517 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(url, isolate))); 520 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(url, isolate)));
518 } 521 }
519 522
520 523
521 Handle<AccessorInfo> Accessors::ScriptSourceUrlInfo( 524 Handle<AccessorInfo> Accessors::ScriptSourceUrlInfo(
522 Isolate* isolate, PropertyAttributes attributes) { 525 Isolate* isolate, PropertyAttributes attributes) {
523 return MakeAccessor(isolate, isolate->factory()->source_url_string(), 526 return MakeAccessor(isolate, isolate->factory()->source_url_string(),
524 &ScriptSourceUrlGetter, nullptr, attributes); 527 &ScriptSourceUrlGetter, nullptr, attributes, false);
525 } 528 }
526 529
527 530
528 // 531 //
529 // Accessors::ScriptSourceMappingUrl 532 // Accessors::ScriptSourceMappingUrl
530 // 533 //
531 534
532 535
533 void Accessors::ScriptSourceMappingUrlGetter( 536 void Accessors::ScriptSourceMappingUrlGetter(
534 v8::Local<v8::Name> name, 537 v8::Local<v8::Name> name,
535 const v8::PropertyCallbackInfo<v8::Value>& info) { 538 const v8::PropertyCallbackInfo<v8::Value>& info) {
536 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 539 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
537 DisallowHeapAllocation no_allocation; 540 DisallowHeapAllocation no_allocation;
538 HandleScope scope(isolate); 541 HandleScope scope(isolate);
539 Object* object = *Utils::OpenHandle(*info.Holder()); 542 Object* object = *Utils::OpenHandle(*info.Holder());
540 Object* url = 543 Object* url =
541 Script::cast(JSValue::cast(object)->value())->source_mapping_url(); 544 Script::cast(JSValue::cast(object)->value())->source_mapping_url();
542 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(url, isolate))); 545 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(url, isolate)));
543 } 546 }
544 547
545 548
546 Handle<AccessorInfo> Accessors::ScriptSourceMappingUrlInfo( 549 Handle<AccessorInfo> Accessors::ScriptSourceMappingUrlInfo(
547 Isolate* isolate, PropertyAttributes attributes) { 550 Isolate* isolate, PropertyAttributes attributes) {
548 return MakeAccessor(isolate, isolate->factory()->source_mapping_url_string(), 551 return MakeAccessor(isolate, isolate->factory()->source_mapping_url_string(),
549 &ScriptSourceMappingUrlGetter, nullptr, attributes); 552 &ScriptSourceMappingUrlGetter, nullptr, attributes,
553 false);
550 } 554 }
551 555
552 556
553 // 557 //
554 // Accessors::ScriptIsEmbedderDebugScript 558 // Accessors::ScriptIsEmbedderDebugScript
555 // 559 //
556 560
557 561
558 void Accessors::ScriptIsEmbedderDebugScriptGetter( 562 void Accessors::ScriptIsEmbedderDebugScriptGetter(
559 v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { 563 v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
560 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 564 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
561 DisallowHeapAllocation no_allocation; 565 DisallowHeapAllocation no_allocation;
562 HandleScope scope(isolate); 566 HandleScope scope(isolate);
563 Object* object = *Utils::OpenHandle(*info.Holder()); 567 Object* object = *Utils::OpenHandle(*info.Holder());
564 bool is_embedder_debug_script = Script::cast(JSValue::cast(object)->value()) 568 bool is_embedder_debug_script = Script::cast(JSValue::cast(object)->value())
565 ->origin_options() 569 ->origin_options()
566 .IsEmbedderDebugScript(); 570 .IsEmbedderDebugScript();
567 Object* res = *isolate->factory()->ToBoolean(is_embedder_debug_script); 571 Object* res = *isolate->factory()->ToBoolean(is_embedder_debug_script);
568 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate))); 572 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate)));
569 } 573 }
570 574
571 575
572 Handle<AccessorInfo> Accessors::ScriptIsEmbedderDebugScriptInfo( 576 Handle<AccessorInfo> Accessors::ScriptIsEmbedderDebugScriptInfo(
573 Isolate* isolate, PropertyAttributes attributes) { 577 Isolate* isolate, PropertyAttributes attributes) {
574 Handle<String> name(isolate->factory()->InternalizeOneByteString( 578 Handle<String> name(isolate->factory()->InternalizeOneByteString(
575 STATIC_CHAR_VECTOR("is_debugger_script"))); 579 STATIC_CHAR_VECTOR("is_debugger_script")));
576 return MakeAccessor(isolate, name, &ScriptIsEmbedderDebugScriptGetter, 580 return MakeAccessor(isolate, name, &ScriptIsEmbedderDebugScriptGetter,
577 nullptr, attributes); 581 nullptr, attributes, false);
578 } 582 }
579 583
580 584
581 // 585 //
582 // Accessors::ScriptGetContextData 586 // Accessors::ScriptGetContextData
583 // 587 //
584 588
585 589
586 void Accessors::ScriptContextDataGetter( 590 void Accessors::ScriptContextDataGetter(
587 v8::Local<v8::Name> name, 591 v8::Local<v8::Name> name,
588 const v8::PropertyCallbackInfo<v8::Value>& info) { 592 const v8::PropertyCallbackInfo<v8::Value>& info) {
589 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 593 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
590 DisallowHeapAllocation no_allocation; 594 DisallowHeapAllocation no_allocation;
591 HandleScope scope(isolate); 595 HandleScope scope(isolate);
592 Object* object = *Utils::OpenHandle(*info.Holder()); 596 Object* object = *Utils::OpenHandle(*info.Holder());
593 Object* res = Script::cast(JSValue::cast(object)->value())->context_data(); 597 Object* res = Script::cast(JSValue::cast(object)->value())->context_data();
594 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate))); 598 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate)));
595 } 599 }
596 600
597 601
598 Handle<AccessorInfo> Accessors::ScriptContextDataInfo( 602 Handle<AccessorInfo> Accessors::ScriptContextDataInfo(
599 Isolate* isolate, PropertyAttributes attributes) { 603 Isolate* isolate, PropertyAttributes attributes) {
600 Handle<String> name(isolate->factory()->InternalizeOneByteString( 604 Handle<String> name(isolate->factory()->InternalizeOneByteString(
601 STATIC_CHAR_VECTOR("context_data"))); 605 STATIC_CHAR_VECTOR("context_data")));
602 return MakeAccessor(isolate, name, &ScriptContextDataGetter, nullptr, 606 return MakeAccessor(isolate, name, &ScriptContextDataGetter, nullptr,
603 attributes); 607 attributes, false);
604 } 608 }
605 609
606 610
607 // 611 //
608 // Accessors::ScriptGetEvalFromScript 612 // Accessors::ScriptGetEvalFromScript
609 // 613 //
610 614
611 615
612 void Accessors::ScriptEvalFromScriptGetter( 616 void Accessors::ScriptEvalFromScriptGetter(
613 v8::Local<v8::Name> name, 617 v8::Local<v8::Name> name,
(...skipping 15 matching lines...) Expand all
629 633
630 info.GetReturnValue().Set(Utils::ToLocal(result)); 634 info.GetReturnValue().Set(Utils::ToLocal(result));
631 } 635 }
632 636
633 637
634 Handle<AccessorInfo> Accessors::ScriptEvalFromScriptInfo( 638 Handle<AccessorInfo> Accessors::ScriptEvalFromScriptInfo(
635 Isolate* isolate, PropertyAttributes attributes) { 639 Isolate* isolate, PropertyAttributes attributes) {
636 Handle<String> name(isolate->factory()->InternalizeOneByteString( 640 Handle<String> name(isolate->factory()->InternalizeOneByteString(
637 STATIC_CHAR_VECTOR("eval_from_script"))); 641 STATIC_CHAR_VECTOR("eval_from_script")));
638 return MakeAccessor(isolate, name, &ScriptEvalFromScriptGetter, nullptr, 642 return MakeAccessor(isolate, name, &ScriptEvalFromScriptGetter, nullptr,
639 attributes); 643 attributes, false);
640 } 644 }
641 645
642 646
643 // 647 //
644 // Accessors::ScriptGetEvalFromScriptPosition 648 // Accessors::ScriptGetEvalFromScriptPosition
645 // 649 //
646 650
647 651
648 void Accessors::ScriptEvalFromScriptPositionGetter( 652 void Accessors::ScriptEvalFromScriptPositionGetter(
649 v8::Local<v8::Name> name, 653 v8::Local<v8::Name> name,
650 const v8::PropertyCallbackInfo<v8::Value>& info) { 654 const v8::PropertyCallbackInfo<v8::Value>& info) {
651 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 655 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
652 HandleScope scope(isolate); 656 HandleScope scope(isolate);
653 Handle<Object> object = Utils::OpenHandle(*info.Holder()); 657 Handle<Object> object = Utils::OpenHandle(*info.Holder());
654 Handle<Script> script( 658 Handle<Script> script(
655 Script::cast(Handle<JSValue>::cast(object)->value()), isolate); 659 Script::cast(Handle<JSValue>::cast(object)->value()), isolate);
656 Handle<Object> result = isolate->factory()->undefined_value(); 660 Handle<Object> result = isolate->factory()->undefined_value();
657 if (script->compilation_type() == Script::COMPILATION_TYPE_EVAL) { 661 if (script->compilation_type() == Script::COMPILATION_TYPE_EVAL) {
658 result = Handle<Object>(Smi::FromInt(script->GetEvalPosition()), isolate); 662 result = Handle<Object>(Smi::FromInt(script->GetEvalPosition()), isolate);
659 } 663 }
660 info.GetReturnValue().Set(Utils::ToLocal(result)); 664 info.GetReturnValue().Set(Utils::ToLocal(result));
661 } 665 }
662 666
663 667
664 Handle<AccessorInfo> Accessors::ScriptEvalFromScriptPositionInfo( 668 Handle<AccessorInfo> Accessors::ScriptEvalFromScriptPositionInfo(
665 Isolate* isolate, PropertyAttributes attributes) { 669 Isolate* isolate, PropertyAttributes attributes) {
666 Handle<String> name(isolate->factory()->InternalizeOneByteString( 670 Handle<String> name(isolate->factory()->InternalizeOneByteString(
667 STATIC_CHAR_VECTOR("eval_from_script_position"))); 671 STATIC_CHAR_VECTOR("eval_from_script_position")));
668 return MakeAccessor(isolate, name, &ScriptEvalFromScriptPositionGetter, 672 return MakeAccessor(isolate, name, &ScriptEvalFromScriptPositionGetter,
669 nullptr, attributes); 673 nullptr, attributes, false);
670 } 674 }
671 675
672 676
673 // 677 //
674 // Accessors::ScriptGetEvalFromFunctionName 678 // Accessors::ScriptGetEvalFromFunctionName
675 // 679 //
676 680
677 681
678 void Accessors::ScriptEvalFromFunctionNameGetter( 682 void Accessors::ScriptEvalFromFunctionNameGetter(
679 v8::Local<v8::Name> name, 683 v8::Local<v8::Name> name,
(...skipping 16 matching lines...) Expand all
696 } 700 }
697 info.GetReturnValue().Set(Utils::ToLocal(result)); 701 info.GetReturnValue().Set(Utils::ToLocal(result));
698 } 702 }
699 703
700 704
701 Handle<AccessorInfo> Accessors::ScriptEvalFromFunctionNameInfo( 705 Handle<AccessorInfo> Accessors::ScriptEvalFromFunctionNameInfo(
702 Isolate* isolate, PropertyAttributes attributes) { 706 Isolate* isolate, PropertyAttributes attributes) {
703 Handle<String> name(isolate->factory()->InternalizeOneByteString( 707 Handle<String> name(isolate->factory()->InternalizeOneByteString(
704 STATIC_CHAR_VECTOR("eval_from_function_name"))); 708 STATIC_CHAR_VECTOR("eval_from_function_name")));
705 return MakeAccessor(isolate, name, &ScriptEvalFromFunctionNameGetter, nullptr, 709 return MakeAccessor(isolate, name, &ScriptEvalFromFunctionNameGetter, nullptr,
706 attributes); 710 attributes, false);
707 } 711 }
708 712
709 713
710 // 714 //
711 // Accessors::FunctionPrototype 715 // Accessors::FunctionPrototype
712 // 716 //
713 717
714 static Handle<Object> GetFunctionPrototype(Isolate* isolate, 718 static Handle<Object> GetFunctionPrototype(Isolate* isolate,
715 Handle<JSFunction> function) { 719 Handle<JSFunction> function) {
716 if (!function->has_prototype()) { 720 if (!function->has_prototype()) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 if (SetFunctionPrototype(isolate, object, value).is_null()) { 765 if (SetFunctionPrototype(isolate, object, value).is_null()) {
762 isolate->OptionalRescheduleException(false); 766 isolate->OptionalRescheduleException(false);
763 } else { 767 } else {
764 info.GetReturnValue().Set(true); 768 info.GetReturnValue().Set(true);
765 } 769 }
766 } 770 }
767 771
768 772
769 Handle<AccessorInfo> Accessors::FunctionPrototypeInfo( 773 Handle<AccessorInfo> Accessors::FunctionPrototypeInfo(
770 Isolate* isolate, PropertyAttributes attributes) { 774 Isolate* isolate, PropertyAttributes attributes) {
771 return MakeAccessor(isolate, 775 return MakeAccessor(isolate, isolate->factory()->prototype_string(),
772 isolate->factory()->prototype_string(), 776 &FunctionPrototypeGetter, &FunctionPrototypeSetter,
773 &FunctionPrototypeGetter, 777 attributes, false);
774 &FunctionPrototypeSetter,
775 attributes);
776 } 778 }
777 779
778 780
779 // 781 //
780 // Accessors::FunctionLength 782 // Accessors::FunctionLength
781 // 783 //
782 784
783 785
784 void Accessors::FunctionLengthGetter( 786 void Accessors::FunctionLengthGetter(
785 v8::Local<v8::Name> name, 787 v8::Local<v8::Name> name,
786 const v8::PropertyCallbackInfo<v8::Value>& info) { 788 const v8::PropertyCallbackInfo<v8::Value>& info) {
787 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 789 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
788 HandleScope scope(isolate); 790 HandleScope scope(isolate);
789 Handle<JSFunction> function = 791 Handle<JSFunction> function =
790 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder())); 792 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder()));
791 Handle<Object> result; 793 Handle<Object> result;
792 if (!JSFunction::GetLength(isolate, function).ToHandle(&result)) { 794 if (!JSFunction::GetLength(isolate, function).ToHandle(&result)) {
793 result = handle(Smi::kZero, isolate); 795 result = handle(Smi::kZero, isolate);
794 isolate->OptionalRescheduleException(false); 796 isolate->OptionalRescheduleException(false);
795 } 797 }
796 798
797 info.GetReturnValue().Set(Utils::ToLocal(result)); 799 info.GetReturnValue().Set(Utils::ToLocal(result));
798 } 800 }
799 801
800 Handle<AccessorInfo> Accessors::FunctionLengthInfo( 802 Handle<AccessorInfo> Accessors::FunctionLengthInfo(
801 Isolate* isolate, PropertyAttributes attributes) { 803 Isolate* isolate, PropertyAttributes attributes) {
802 return MakeAccessor(isolate, isolate->factory()->length_string(), 804 return MakeAccessor(isolate, isolate->factory()->length_string(),
803 &FunctionLengthGetter, &ReconfigureToDataProperty, 805 &FunctionLengthGetter, nullptr, attributes, true);
Toon Verwaest 2016/10/28 14:05:21 This technically all works, but it won't give good
804 attributes);
805 } 806 }
806 807
807 808
808 // 809 //
809 // Accessors::FunctionName 810 // Accessors::FunctionName
810 // 811 //
811 812
812 813
813 void Accessors::FunctionNameGetter( 814 void Accessors::FunctionNameGetter(
814 v8::Local<v8::Name> name, 815 v8::Local<v8::Name> name,
815 const v8::PropertyCallbackInfo<v8::Value>& info) { 816 const v8::PropertyCallbackInfo<v8::Value>& info) {
816 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 817 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
817 HandleScope scope(isolate); 818 HandleScope scope(isolate);
818 Handle<JSFunction> function = 819 Handle<JSFunction> function =
819 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder())); 820 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder()));
820 Handle<Object> result = JSFunction::GetName(isolate, function); 821 Handle<Object> result = JSFunction::GetName(isolate, function);
821 info.GetReturnValue().Set(Utils::ToLocal(result)); 822 info.GetReturnValue().Set(Utils::ToLocal(result));
822 } 823 }
823 824
824 Handle<AccessorInfo> Accessors::FunctionNameInfo( 825 Handle<AccessorInfo> Accessors::FunctionNameInfo(
825 Isolate* isolate, PropertyAttributes attributes) { 826 Isolate* isolate, PropertyAttributes attributes) {
826 return MakeAccessor(isolate, isolate->factory()->name_string(), 827 return MakeAccessor(isolate, isolate->factory()->name_string(),
827 &FunctionNameGetter, &ReconfigureToDataProperty, 828 &FunctionNameGetter, nullptr, attributes, true);
828 attributes);
829 } 829 }
830 830
831 831
832 // 832 //
833 // Accessors::FunctionArguments 833 // Accessors::FunctionArguments
834 // 834 //
835 835
836 836
837 static Handle<Object> ArgumentsForInlinedFunction( 837 static Handle<Object> ArgumentsForInlinedFunction(
838 JavaScriptFrame* frame, 838 JavaScriptFrame* frame,
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
965 function->shared()->native() 965 function->shared()->native()
966 ? Handle<Object>::cast(isolate->factory()->null_value()) 966 ? Handle<Object>::cast(isolate->factory()->null_value())
967 : GetFunctionArguments(isolate, function); 967 : GetFunctionArguments(isolate, function);
968 info.GetReturnValue().Set(Utils::ToLocal(result)); 968 info.GetReturnValue().Set(Utils::ToLocal(result));
969 } 969 }
970 970
971 971
972 Handle<AccessorInfo> Accessors::FunctionArgumentsInfo( 972 Handle<AccessorInfo> Accessors::FunctionArgumentsInfo(
973 Isolate* isolate, PropertyAttributes attributes) { 973 Isolate* isolate, PropertyAttributes attributes) {
974 return MakeAccessor(isolate, isolate->factory()->arguments_string(), 974 return MakeAccessor(isolate, isolate->factory()->arguments_string(),
975 &FunctionArgumentsGetter, nullptr, attributes); 975 &FunctionArgumentsGetter, nullptr, attributes, false);
976 } 976 }
977 977
978 978
979 // 979 //
980 // Accessors::FunctionCaller 980 // Accessors::FunctionCaller
981 // 981 //
982 982
983 983
984 static inline bool AllowAccessToFunction(Context* current_context, 984 static inline bool AllowAccessToFunction(Context* current_context,
985 JSFunction* function) { 985 JSFunction* function) {
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1098 } else { 1098 } else {
1099 result = isolate->factory()->null_value(); 1099 result = isolate->factory()->null_value();
1100 } 1100 }
1101 info.GetReturnValue().Set(Utils::ToLocal(result)); 1101 info.GetReturnValue().Set(Utils::ToLocal(result));
1102 } 1102 }
1103 1103
1104 1104
1105 Handle<AccessorInfo> Accessors::FunctionCallerInfo( 1105 Handle<AccessorInfo> Accessors::FunctionCallerInfo(
1106 Isolate* isolate, PropertyAttributes attributes) { 1106 Isolate* isolate, PropertyAttributes attributes) {
1107 return MakeAccessor(isolate, isolate->factory()->caller_string(), 1107 return MakeAccessor(isolate, isolate->factory()->caller_string(),
1108 &FunctionCallerGetter, nullptr, attributes); 1108 &FunctionCallerGetter, nullptr, attributes, false);
1109 } 1109 }
1110 1110
1111 1111
1112 // 1112 //
1113 // Accessors::BoundFunctionLength 1113 // Accessors::BoundFunctionLength
1114 // 1114 //
1115 1115
1116 void Accessors::BoundFunctionLengthGetter( 1116 void Accessors::BoundFunctionLengthGetter(
1117 v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { 1117 v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
1118 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 1118 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
(...skipping 16 matching lines...) Expand all
1135 int bound_length = function->bound_arguments()->length(); 1135 int bound_length = function->bound_arguments()->length();
1136 int length = Max(0, target_length->value() - bound_length); 1136 int length = Max(0, target_length->value() - bound_length);
1137 1137
1138 Handle<Object> result(Smi::FromInt(length), isolate); 1138 Handle<Object> result(Smi::FromInt(length), isolate);
1139 info.GetReturnValue().Set(Utils::ToLocal(result)); 1139 info.GetReturnValue().Set(Utils::ToLocal(result));
1140 } 1140 }
1141 1141
1142 Handle<AccessorInfo> Accessors::BoundFunctionLengthInfo( 1142 Handle<AccessorInfo> Accessors::BoundFunctionLengthInfo(
1143 Isolate* isolate, PropertyAttributes attributes) { 1143 Isolate* isolate, PropertyAttributes attributes) {
1144 return MakeAccessor(isolate, isolate->factory()->length_string(), 1144 return MakeAccessor(isolate, isolate->factory()->length_string(),
1145 &BoundFunctionLengthGetter, &ReconfigureToDataProperty, 1145 &BoundFunctionLengthGetter, nullptr, attributes, true);
1146 attributes);
1147 } 1146 }
1148 1147
1149 // 1148 //
1150 // Accessors::BoundFunctionName 1149 // Accessors::BoundFunctionName
1151 // 1150 //
1152 1151
1153 void Accessors::BoundFunctionNameGetter( 1152 void Accessors::BoundFunctionNameGetter(
1154 v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { 1153 v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
1155 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 1154 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
1156 RuntimeCallTimerScope timer( 1155 RuntimeCallTimerScope timer(
1157 isolate, &RuntimeCallStats::AccessorNameGetterCallback_BoundFunctionName); 1156 isolate, &RuntimeCallStats::AccessorNameGetterCallback_BoundFunctionName);
1158 HandleScope scope(isolate); 1157 HandleScope scope(isolate);
1159 Handle<JSBoundFunction> function = 1158 Handle<JSBoundFunction> function =
1160 Handle<JSBoundFunction>::cast(Utils::OpenHandle(*info.Holder())); 1159 Handle<JSBoundFunction>::cast(Utils::OpenHandle(*info.Holder()));
1161 Handle<Object> result; 1160 Handle<Object> result;
1162 if (!JSBoundFunction::GetName(isolate, function).ToHandle(&result)) { 1161 if (!JSBoundFunction::GetName(isolate, function).ToHandle(&result)) {
1163 isolate->OptionalRescheduleException(false); 1162 isolate->OptionalRescheduleException(false);
1164 return; 1163 return;
1165 } 1164 }
1166 info.GetReturnValue().Set(Utils::ToLocal(result)); 1165 info.GetReturnValue().Set(Utils::ToLocal(result));
1167 } 1166 }
1168 1167
1169 Handle<AccessorInfo> Accessors::BoundFunctionNameInfo( 1168 Handle<AccessorInfo> Accessors::BoundFunctionNameInfo(
1170 Isolate* isolate, PropertyAttributes attributes) { 1169 Isolate* isolate, PropertyAttributes attributes) {
1171 return MakeAccessor(isolate, isolate->factory()->name_string(), 1170 return MakeAccessor(isolate, isolate->factory()->name_string(),
1172 &BoundFunctionNameGetter, &ReconfigureToDataProperty, 1171 &BoundFunctionNameGetter, nullptr, attributes, true);
1173 attributes);
1174 } 1172 }
1175 1173
1176 // 1174 //
1177 // Accessors::ErrorStack 1175 // Accessors::ErrorStack
1178 // 1176 //
1179 1177
1180 namespace { 1178 namespace {
1181 1179
1182 MaybeHandle<JSReceiver> ClearInternalStackTrace(Isolate* isolate, 1180 MaybeHandle<JSReceiver> ClearInternalStackTrace(Isolate* isolate,
1183 Handle<JSObject> error) { 1181 Handle<JSObject> error) {
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1278 ClearInternalStackTrace(isolate, obj); 1276 ClearInternalStackTrace(isolate, obj);
1279 } 1277 }
1280 1278
1281 Accessors::ReconfigureToDataProperty(name, val, info); 1279 Accessors::ReconfigureToDataProperty(name, val, info);
1282 } 1280 }
1283 1281
1284 Handle<AccessorInfo> Accessors::ErrorStackInfo(Isolate* isolate, 1282 Handle<AccessorInfo> Accessors::ErrorStackInfo(Isolate* isolate,
1285 PropertyAttributes attributes) { 1283 PropertyAttributes attributes) {
1286 Handle<AccessorInfo> info = 1284 Handle<AccessorInfo> info =
1287 MakeAccessor(isolate, isolate->factory()->stack_string(), 1285 MakeAccessor(isolate, isolate->factory()->stack_string(),
1288 &ErrorStackGetter, &ErrorStackSetter, attributes); 1286 &ErrorStackGetter, &ErrorStackSetter, attributes, false);
1289 return info; 1287 return info;
1290 } 1288 }
1291 1289
1292 } // namespace internal 1290 } // namespace internal
1293 } // namespace v8 1291 } // namespace v8
OLDNEW
« no previous file with comments | « src/accessors.h ('k') | src/api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698