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

Side by Side Diff: src/bootstrapper.cc

Issue 335653002: Have one, long-lived map for bound functions. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: addressed comments 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 | « include/v8.h ('k') | src/contexts.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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/bootstrapper.h" 5 #include "src/bootstrapper.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/isolate-inl.h" 8 #include "src/isolate-inl.h"
9 #include "src/natives.h" 9 #include "src/natives.h"
10 #include "src/snapshot.h" 10 #include "src/snapshot.h"
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 Handle<ObjectTemplateInfo> object_template); 255 Handle<ObjectTemplateInfo> object_template);
256 bool ConfigureGlobalObjects(v8::Handle<v8::ObjectTemplate> global_template); 256 bool ConfigureGlobalObjects(v8::Handle<v8::ObjectTemplate> global_template);
257 257
258 // Migrates all properties from the 'from' object to the 'to' 258 // Migrates all properties from the 'from' object to the 'to'
259 // object and overrides the prototype in 'to' with the one from 259 // object and overrides the prototype in 'to' with the one from
260 // 'from'. 260 // 'from'.
261 void TransferObject(Handle<JSObject> from, Handle<JSObject> to); 261 void TransferObject(Handle<JSObject> from, Handle<JSObject> to);
262 void TransferNamedProperties(Handle<JSObject> from, Handle<JSObject> to); 262 void TransferNamedProperties(Handle<JSObject> from, Handle<JSObject> to);
263 void TransferIndexedProperties(Handle<JSObject> from, Handle<JSObject> to); 263 void TransferIndexedProperties(Handle<JSObject> from, Handle<JSObject> to);
264 264
265 enum PrototypePropertyMode { 265 enum FunctionMode {
266 DONT_ADD_PROTOTYPE, 266 // With prototype.
267 ADD_READONLY_PROTOTYPE, 267 FUNCTION_WITH_WRITEABLE_PROTOTYPE,
268 ADD_WRITEABLE_PROTOTYPE 268 FUNCTION_WITH_READONLY_PROTOTYPE,
269 // Without prototype.
270 FUNCTION_WITHOUT_PROTOTYPE,
271 BOUND_FUNCTION
269 }; 272 };
270 273
271 Handle<Map> CreateFunctionMap(PrototypePropertyMode prototype_mode); 274 static bool IsFunctionModeWithPrototype(FunctionMode function_mode) {
275 return (function_mode == FUNCTION_WITH_WRITEABLE_PROTOTYPE ||
276 function_mode == FUNCTION_WITH_READONLY_PROTOTYPE);
277 }
278
279 Handle<Map> CreateFunctionMap(FunctionMode function_mode);
272 280
273 void SetFunctionInstanceDescriptor(Handle<Map> map, 281 void SetFunctionInstanceDescriptor(Handle<Map> map,
274 PrototypePropertyMode prototypeMode); 282 FunctionMode function_mode);
275 void MakeFunctionInstancePrototypeWritable(); 283 void MakeFunctionInstancePrototypeWritable();
276 284
277 Handle<Map> CreateStrictFunctionMap( 285 Handle<Map> CreateStrictFunctionMap(
278 PrototypePropertyMode prototype_mode, 286 FunctionMode function_mode,
279 Handle<JSFunction> empty_function); 287 Handle<JSFunction> empty_function);
280 288
281 void SetStrictFunctionInstanceDescriptor(Handle<Map> map, 289 void SetStrictFunctionInstanceDescriptor(Handle<Map> map,
282 PrototypePropertyMode propertyMode); 290 FunctionMode function_mode);
283 291
284 static bool CompileBuiltin(Isolate* isolate, int index); 292 static bool CompileBuiltin(Isolate* isolate, int index);
285 static bool CompileExperimentalBuiltin(Isolate* isolate, int index); 293 static bool CompileExperimentalBuiltin(Isolate* isolate, int index);
286 static bool CompileNative(Isolate* isolate, 294 static bool CompileNative(Isolate* isolate,
287 Vector<const char> name, 295 Vector<const char> name,
288 Handle<String> source); 296 Handle<String> source);
289 static bool CompileScriptCached(Isolate* isolate, 297 static bool CompileScriptCached(Isolate* isolate,
290 Vector<const char> name, 298 Vector<const char> name,
291 Handle<String> source, 299 Handle<String> source,
292 SourceCodeCache* cache, 300 SourceCodeCache* cache,
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 target, internalized_name, function, attributes).Check(); 383 target, internalized_name, function, attributes).Check();
376 if (target->IsJSGlobalObject()) { 384 if (target->IsJSGlobalObject()) {
377 function->shared()->set_instance_class_name(*internalized_name); 385 function->shared()->set_instance_class_name(*internalized_name);
378 } 386 }
379 function->shared()->set_native(true); 387 function->shared()->set_native(true);
380 return function; 388 return function;
381 } 389 }
382 390
383 391
384 void Genesis::SetFunctionInstanceDescriptor( 392 void Genesis::SetFunctionInstanceDescriptor(
385 Handle<Map> map, PrototypePropertyMode prototypeMode) { 393 Handle<Map> map, FunctionMode function_mode) {
386 int size = (prototypeMode == DONT_ADD_PROTOTYPE) ? 4 : 5; 394 int size = IsFunctionModeWithPrototype(function_mode) ? 5 : 4;
387 Map::EnsureDescriptorSlack(map, size); 395 Map::EnsureDescriptorSlack(map, size);
388 396
389 PropertyAttributes attribs = static_cast<PropertyAttributes>( 397 PropertyAttributes attribs = static_cast<PropertyAttributes>(
390 DONT_ENUM | DONT_DELETE | READ_ONLY); 398 DONT_ENUM | DONT_DELETE | READ_ONLY);
391 399
392 Handle<AccessorInfo> length = 400 Handle<AccessorInfo> length =
393 Accessors::FunctionLengthInfo(isolate(), attribs); 401 Accessors::FunctionLengthInfo(isolate(), attribs);
394 { // Add length. 402 { // Add length.
395 CallbacksDescriptor d(Handle<Name>(Name::cast(length->name())), 403 CallbacksDescriptor d(Handle<Name>(Name::cast(length->name())),
396 length, attribs); 404 length, attribs);
(...skipping 13 matching lines...) Expand all
410 args, attribs); 418 args, attribs);
411 map->AppendDescriptor(&d); 419 map->AppendDescriptor(&d);
412 } 420 }
413 Handle<AccessorInfo> caller = 421 Handle<AccessorInfo> caller =
414 Accessors::FunctionCallerInfo(isolate(), attribs); 422 Accessors::FunctionCallerInfo(isolate(), attribs);
415 { // Add caller. 423 { // Add caller.
416 CallbacksDescriptor d(Handle<Name>(Name::cast(caller->name())), 424 CallbacksDescriptor d(Handle<Name>(Name::cast(caller->name())),
417 caller, attribs); 425 caller, attribs);
418 map->AppendDescriptor(&d); 426 map->AppendDescriptor(&d);
419 } 427 }
420 if (prototypeMode != DONT_ADD_PROTOTYPE) { 428 if (IsFunctionModeWithPrototype(function_mode)) {
421 if (prototypeMode == ADD_WRITEABLE_PROTOTYPE) { 429 if (function_mode == FUNCTION_WITH_WRITEABLE_PROTOTYPE) {
422 attribs = static_cast<PropertyAttributes>(attribs & ~READ_ONLY); 430 attribs = static_cast<PropertyAttributes>(attribs & ~READ_ONLY);
423 } 431 }
424 Handle<AccessorInfo> prototype = 432 Handle<AccessorInfo> prototype =
425 Accessors::FunctionPrototypeInfo(isolate(), attribs); 433 Accessors::FunctionPrototypeInfo(isolate(), attribs);
426 CallbacksDescriptor d(Handle<Name>(Name::cast(prototype->name())), 434 CallbacksDescriptor d(Handle<Name>(Name::cast(prototype->name())),
427 prototype, attribs); 435 prototype, attribs);
428 map->AppendDescriptor(&d); 436 map->AppendDescriptor(&d);
429 } 437 }
430 } 438 }
431 439
432 440
433 Handle<Map> Genesis::CreateFunctionMap(PrototypePropertyMode prototype_mode) { 441 Handle<Map> Genesis::CreateFunctionMap(FunctionMode function_mode) {
434 Handle<Map> map = factory()->NewMap(JS_FUNCTION_TYPE, JSFunction::kSize); 442 Handle<Map> map = factory()->NewMap(JS_FUNCTION_TYPE, JSFunction::kSize);
435 SetFunctionInstanceDescriptor(map, prototype_mode); 443 SetFunctionInstanceDescriptor(map, function_mode);
436 map->set_function_with_prototype(prototype_mode != DONT_ADD_PROTOTYPE); 444 map->set_function_with_prototype(IsFunctionModeWithPrototype(function_mode));
437 return map; 445 return map;
438 } 446 }
439 447
440 448
441 Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) { 449 Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) {
442 // Allocate the map for function instances. Maps are allocated first and their 450 // Allocate the map for function instances. Maps are allocated first and their
443 // prototypes patched later, once empty function is created. 451 // prototypes patched later, once empty function is created.
444 452
445 // Functions with this map will not have a 'prototype' property, and 453 // Functions with this map will not have a 'prototype' property, and
446 // can not be used as constructors. 454 // can not be used as constructors.
447 Handle<Map> function_without_prototype_map = 455 Handle<Map> function_without_prototype_map =
448 CreateFunctionMap(DONT_ADD_PROTOTYPE); 456 CreateFunctionMap(FUNCTION_WITHOUT_PROTOTYPE);
449 native_context()->set_sloppy_function_without_prototype_map( 457 native_context()->set_sloppy_function_without_prototype_map(
450 *function_without_prototype_map); 458 *function_without_prototype_map);
451 459
452 // Allocate the function map. This map is temporary, used only for processing 460 // Allocate the function map. This map is temporary, used only for processing
453 // of builtins. 461 // of builtins.
454 // Later the map is replaced with writable prototype map, allocated below. 462 // Later the map is replaced with writable prototype map, allocated below.
455 Handle<Map> function_map = CreateFunctionMap(ADD_READONLY_PROTOTYPE); 463 Handle<Map> function_map =
464 CreateFunctionMap(FUNCTION_WITH_READONLY_PROTOTYPE);
456 native_context()->set_sloppy_function_map(*function_map); 465 native_context()->set_sloppy_function_map(*function_map);
457 native_context()->set_sloppy_function_with_readonly_prototype_map( 466 native_context()->set_sloppy_function_with_readonly_prototype_map(
458 *function_map); 467 *function_map);
459 468
460 // The final map for functions. Writeable prototype. 469 // The final map for functions. Writeable prototype.
461 // This map is installed in MakeFunctionInstancePrototypeWritable. 470 // This map is installed in MakeFunctionInstancePrototypeWritable.
462 sloppy_function_map_writable_prototype_ = 471 sloppy_function_map_writable_prototype_ =
463 CreateFunctionMap(ADD_WRITEABLE_PROTOTYPE); 472 CreateFunctionMap(FUNCTION_WITH_WRITEABLE_PROTOTYPE);
464 473
465 Factory* factory = isolate->factory(); 474 Factory* factory = isolate->factory();
466 475
467 Handle<String> object_name = factory->Object_string(); 476 Handle<String> object_name = factory->Object_string();
468 477
469 { // --- O b j e c t --- 478 { // --- O b j e c t ---
470 Handle<JSFunction> object_fun = factory->NewFunction(object_name); 479 Handle<JSFunction> object_fun = factory->NewFunction(object_name);
471 Handle<Map> object_function_map = 480 Handle<Map> object_function_map =
472 factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); 481 factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
473 object_fun->set_initial_map(*object_function_map); 482 object_fun->set_initial_map(*object_function_map);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 empty_function->shared()->set_end_position(source->length()); 516 empty_function->shared()->set_end_position(source->length());
508 empty_function->shared()->DontAdaptArguments(); 517 empty_function->shared()->DontAdaptArguments();
509 518
510 // Set prototypes for the function maps. 519 // Set prototypes for the function maps.
511 native_context()->sloppy_function_map()->set_prototype(*empty_function); 520 native_context()->sloppy_function_map()->set_prototype(*empty_function);
512 native_context()->sloppy_function_without_prototype_map()-> 521 native_context()->sloppy_function_without_prototype_map()->
513 set_prototype(*empty_function); 522 set_prototype(*empty_function);
514 sloppy_function_map_writable_prototype_->set_prototype(*empty_function); 523 sloppy_function_map_writable_prototype_->set_prototype(*empty_function);
515 524
516 // Allocate the function map first and then patch the prototype later 525 // Allocate the function map first and then patch the prototype later
517 Handle<Map> empty_function_map = CreateFunctionMap(DONT_ADD_PROTOTYPE); 526 Handle<Map> empty_function_map =
527 CreateFunctionMap(FUNCTION_WITHOUT_PROTOTYPE);
518 empty_function_map->set_prototype( 528 empty_function_map->set_prototype(
519 native_context()->object_function()->prototype()); 529 native_context()->object_function()->prototype());
520 empty_function->set_map(*empty_function_map); 530 empty_function->set_map(*empty_function_map);
521 return empty_function; 531 return empty_function;
522 } 532 }
523 533
524 534
525 void Genesis::SetStrictFunctionInstanceDescriptor( 535 void Genesis::SetStrictFunctionInstanceDescriptor(
526 Handle<Map> map, PrototypePropertyMode prototypeMode) { 536 Handle<Map> map, FunctionMode function_mode) {
527 int size = (prototypeMode == DONT_ADD_PROTOTYPE) ? 4 : 5; 537 int size = IsFunctionModeWithPrototype(function_mode) ? 5 : 4;
528 Map::EnsureDescriptorSlack(map, size); 538 Map::EnsureDescriptorSlack(map, size);
529 539
530 Handle<AccessorPair> arguments(factory()->NewAccessorPair()); 540 Handle<AccessorPair> arguments(factory()->NewAccessorPair());
531 Handle<AccessorPair> caller(factory()->NewAccessorPair()); 541 Handle<AccessorPair> caller(factory()->NewAccessorPair());
532 PropertyAttributes rw_attribs = 542 PropertyAttributes rw_attribs =
533 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE); 543 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE);
534 PropertyAttributes ro_attribs = 544 PropertyAttributes ro_attribs =
535 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY); 545 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY);
536 546
537 Handle<AccessorInfo> length = 547 // Add length.
538 Accessors::FunctionLengthInfo(isolate(), ro_attribs); 548 if (function_mode == BOUND_FUNCTION) {
539 { // Add length. 549 Handle<String> length_string = isolate()->factory()->length_string();
550 FieldDescriptor d(length_string, 0, ro_attribs, Representation::Tagged());
551 map->AppendDescriptor(&d);
552 } else {
553 ASSERT(function_mode == FUNCTION_WITH_WRITEABLE_PROTOTYPE ||
554 function_mode == FUNCTION_WITH_READONLY_PROTOTYPE ||
555 function_mode == FUNCTION_WITHOUT_PROTOTYPE);
556 Handle<AccessorInfo> length =
557 Accessors::FunctionLengthInfo(isolate(), ro_attribs);
540 CallbacksDescriptor d(Handle<Name>(Name::cast(length->name())), 558 CallbacksDescriptor d(Handle<Name>(Name::cast(length->name())),
541 length, ro_attribs); 559 length, ro_attribs);
542 map->AppendDescriptor(&d); 560 map->AppendDescriptor(&d);
543 } 561 }
544 Handle<AccessorInfo> name = 562 Handle<AccessorInfo> name =
545 Accessors::FunctionNameInfo(isolate(), ro_attribs); 563 Accessors::FunctionNameInfo(isolate(), ro_attribs);
546 { // Add name. 564 { // Add name.
547 CallbacksDescriptor d(Handle<Name>(Name::cast(name->name())), 565 CallbacksDescriptor d(Handle<Name>(Name::cast(name->name())),
548 name, ro_attribs); 566 name, ro_attribs);
549 map->AppendDescriptor(&d); 567 map->AppendDescriptor(&d);
550 } 568 }
551 { // Add arguments. 569 { // Add arguments.
552 CallbacksDescriptor d(factory()->arguments_string(), arguments, 570 CallbacksDescriptor d(factory()->arguments_string(), arguments,
553 rw_attribs); 571 rw_attribs);
554 map->AppendDescriptor(&d); 572 map->AppendDescriptor(&d);
555 } 573 }
556 { // Add caller. 574 { // Add caller.
557 CallbacksDescriptor d(factory()->caller_string(), caller, rw_attribs); 575 CallbacksDescriptor d(factory()->caller_string(), caller, rw_attribs);
558 map->AppendDescriptor(&d); 576 map->AppendDescriptor(&d);
559 } 577 }
560 if (prototypeMode != DONT_ADD_PROTOTYPE) { 578 if (IsFunctionModeWithPrototype(function_mode)) {
561 // Add prototype. 579 // Add prototype.
562 PropertyAttributes attribs = 580 PropertyAttributes attribs =
563 prototypeMode == ADD_WRITEABLE_PROTOTYPE ? rw_attribs : ro_attribs; 581 function_mode == FUNCTION_WITH_WRITEABLE_PROTOTYPE ? rw_attribs
582 : ro_attribs;
564 Handle<AccessorInfo> prototype = 583 Handle<AccessorInfo> prototype =
565 Accessors::FunctionPrototypeInfo(isolate(), attribs); 584 Accessors::FunctionPrototypeInfo(isolate(), attribs);
566 CallbacksDescriptor d(Handle<Name>(Name::cast(prototype->name())), 585 CallbacksDescriptor d(Handle<Name>(Name::cast(prototype->name())),
567 prototype, attribs); 586 prototype, attribs);
568 map->AppendDescriptor(&d); 587 map->AppendDescriptor(&d);
569 } 588 }
570 } 589 }
571 590
572 591
573 // ECMAScript 5th Edition, 13.2.3 592 // ECMAScript 5th Edition, 13.2.3
(...skipping 24 matching lines...) Expand all
598 generator_poison_function->set_map(native_context()->sloppy_function_map()); 617 generator_poison_function->set_map(native_context()->sloppy_function_map());
599 generator_poison_function->shared()->DontAdaptArguments(); 618 generator_poison_function->shared()->DontAdaptArguments();
600 619
601 JSObject::PreventExtensions(generator_poison_function).Assert(); 620 JSObject::PreventExtensions(generator_poison_function).Assert();
602 } 621 }
603 return generator_poison_function; 622 return generator_poison_function;
604 } 623 }
605 624
606 625
607 Handle<Map> Genesis::CreateStrictFunctionMap( 626 Handle<Map> Genesis::CreateStrictFunctionMap(
608 PrototypePropertyMode prototype_mode, 627 FunctionMode function_mode,
609 Handle<JSFunction> empty_function) { 628 Handle<JSFunction> empty_function) {
610 Handle<Map> map = factory()->NewMap(JS_FUNCTION_TYPE, JSFunction::kSize); 629 Handle<Map> map = factory()->NewMap(JS_FUNCTION_TYPE, JSFunction::kSize);
611 SetStrictFunctionInstanceDescriptor(map, prototype_mode); 630 SetStrictFunctionInstanceDescriptor(map, function_mode);
612 map->set_function_with_prototype(prototype_mode != DONT_ADD_PROTOTYPE); 631 map->set_function_with_prototype(IsFunctionModeWithPrototype(function_mode));
613 map->set_prototype(*empty_function); 632 map->set_prototype(*empty_function);
614 return map; 633 return map;
615 } 634 }
616 635
617 636
618 void Genesis::CreateStrictModeFunctionMaps(Handle<JSFunction> empty) { 637 void Genesis::CreateStrictModeFunctionMaps(Handle<JSFunction> empty) {
619 // Allocate map for the prototype-less strict mode instances. 638 // Allocate map for the prototype-less strict mode instances.
620 Handle<Map> strict_function_without_prototype_map = 639 Handle<Map> strict_function_without_prototype_map =
621 CreateStrictFunctionMap(DONT_ADD_PROTOTYPE, empty); 640 CreateStrictFunctionMap(FUNCTION_WITHOUT_PROTOTYPE, empty);
622 native_context()->set_strict_function_without_prototype_map( 641 native_context()->set_strict_function_without_prototype_map(
623 *strict_function_without_prototype_map); 642 *strict_function_without_prototype_map);
624 643
625 // Allocate map for the strict mode functions. This map is temporary, used 644 // Allocate map for the strict mode functions. This map is temporary, used
626 // only for processing of builtins. 645 // only for processing of builtins.
627 // Later the map is replaced with writable prototype map, allocated below. 646 // Later the map is replaced with writable prototype map, allocated below.
628 Handle<Map> strict_function_map = 647 Handle<Map> strict_function_map =
629 CreateStrictFunctionMap(ADD_READONLY_PROTOTYPE, empty); 648 CreateStrictFunctionMap(FUNCTION_WITH_READONLY_PROTOTYPE, empty);
630 native_context()->set_strict_function_map(*strict_function_map); 649 native_context()->set_strict_function_map(*strict_function_map);
631 650
632 // The final map for the strict mode functions. Writeable prototype. 651 // The final map for the strict mode functions. Writeable prototype.
633 // This map is installed in MakeFunctionInstancePrototypeWritable. 652 // This map is installed in MakeFunctionInstancePrototypeWritable.
634 strict_function_map_writable_prototype_ = 653 strict_function_map_writable_prototype_ =
635 CreateStrictFunctionMap(ADD_WRITEABLE_PROTOTYPE, empty); 654 CreateStrictFunctionMap(FUNCTION_WITH_WRITEABLE_PROTOTYPE, empty);
655 // Special map for bound functions.
656 Handle<Map> bound_function_map =
657 CreateStrictFunctionMap(BOUND_FUNCTION, empty);
658 native_context()->set_bound_function_map(*bound_function_map);
636 659
637 // Complete the callbacks. 660 // Complete the callbacks.
638 PoisonArgumentsAndCaller(strict_function_without_prototype_map); 661 PoisonArgumentsAndCaller(strict_function_without_prototype_map);
639 PoisonArgumentsAndCaller(strict_function_map); 662 PoisonArgumentsAndCaller(strict_function_map);
640 PoisonArgumentsAndCaller(strict_function_map_writable_prototype_); 663 PoisonArgumentsAndCaller(strict_function_map_writable_prototype_);
664 PoisonArgumentsAndCaller(bound_function_map);
641 } 665 }
642 666
643 667
644 static void SetAccessors(Handle<Map> map, 668 static void SetAccessors(Handle<Map> map,
645 Handle<String> name, 669 Handle<String> name,
646 Handle<JSFunction> func) { 670 Handle<JSFunction> func) {
647 DescriptorArray* descs = map->instance_descriptors(); 671 DescriptorArray* descs = map->instance_descriptors();
648 int number = descs->SearchWithCache(*name, *map); 672 int number = descs->SearchWithCache(*name, *map);
649 AccessorPair* accessors = AccessorPair::cast(descs->GetValue(number)); 673 AccessorPair* accessors = AccessorPair::cast(descs->GetValue(number));
650 accessors->set_getter(*func); 674 accessors->set_getter(*func);
(...skipping 2067 matching lines...) Expand 10 before | Expand all | Expand 10 after
2718 return from + sizeof(NestingCounterType); 2742 return from + sizeof(NestingCounterType);
2719 } 2743 }
2720 2744
2721 2745
2722 // Called when the top-level V8 mutex is destroyed. 2746 // Called when the top-level V8 mutex is destroyed.
2723 void Bootstrapper::FreeThreadResources() { 2747 void Bootstrapper::FreeThreadResources() {
2724 ASSERT(!IsActive()); 2748 ASSERT(!IsActive());
2725 } 2749 }
2726 2750
2727 } } // namespace v8::internal 2751 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « include/v8.h ('k') | src/contexts.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698