OLD | NEW |
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/api-natives.h" | 8 #include "src/api-natives.h" |
9 #include "src/base/utils/random-number-generator.h" | 9 #include "src/base/utils/random-number-generator.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
480 AccessorConstantDescriptor d(Handle<Name>(Name::cast(prototype->name())), | 480 AccessorConstantDescriptor d(Handle<Name>(Name::cast(prototype->name())), |
481 prototype, ro_attribs); | 481 prototype, ro_attribs); |
482 map->AppendDescriptor(&d); | 482 map->AppendDescriptor(&d); |
483 } | 483 } |
484 } | 484 } |
485 | 485 |
486 | 486 |
487 Handle<Map> Genesis::CreateSloppyFunctionMap(FunctionMode function_mode) { | 487 Handle<Map> Genesis::CreateSloppyFunctionMap(FunctionMode function_mode) { |
488 Handle<Map> map = factory()->NewMap(JS_FUNCTION_TYPE, JSFunction::kSize); | 488 Handle<Map> map = factory()->NewMap(JS_FUNCTION_TYPE, JSFunction::kSize); |
489 SetFunctionInstanceDescriptor(map, function_mode); | 489 SetFunctionInstanceDescriptor(map, function_mode); |
490 map->set_is_constructor(IsFunctionModeWithPrototype(function_mode)); | 490 map->set_function_with_prototype(IsFunctionModeWithPrototype(function_mode)); |
491 map->set_is_callable(); | 491 map->set_is_callable(); |
492 return map; | 492 return map; |
493 } | 493 } |
494 | 494 |
495 | 495 |
496 Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) { | 496 Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) { |
497 // Allocate the map for function instances. Maps are allocated first and their | 497 // Allocate the map for function instances. Maps are allocated first and their |
498 // prototypes patched later, once empty function is created. | 498 // prototypes patched later, once empty function is created. |
499 | 499 |
500 // Functions with this map will not have a 'prototype' property, and | 500 // Functions with this map will not have a 'prototype' property, and |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
720 Builtins::kRestrictedStrictArgumentsPropertiesThrower); | 720 Builtins::kRestrictedStrictArgumentsPropertiesThrower); |
721 } | 721 } |
722 return strict_poison_function_; | 722 return strict_poison_function_; |
723 } | 723 } |
724 | 724 |
725 | 725 |
726 Handle<Map> Genesis::CreateStrictFunctionMap( | 726 Handle<Map> Genesis::CreateStrictFunctionMap( |
727 FunctionMode function_mode, Handle<JSFunction> empty_function) { | 727 FunctionMode function_mode, Handle<JSFunction> empty_function) { |
728 Handle<Map> map = factory()->NewMap(JS_FUNCTION_TYPE, JSFunction::kSize); | 728 Handle<Map> map = factory()->NewMap(JS_FUNCTION_TYPE, JSFunction::kSize); |
729 SetStrictFunctionInstanceDescriptor(map, function_mode); | 729 SetStrictFunctionInstanceDescriptor(map, function_mode); |
730 map->set_is_constructor(IsFunctionModeWithPrototype(function_mode)); | 730 map->set_function_with_prototype(IsFunctionModeWithPrototype(function_mode)); |
731 map->set_is_callable(); | 731 map->set_is_callable(); |
732 Map::SetPrototype(map, empty_function); | 732 Map::SetPrototype(map, empty_function); |
733 return map; | 733 return map; |
734 } | 734 } |
735 | 735 |
736 | 736 |
737 Handle<Map> Genesis::CreateStrongFunctionMap( | 737 Handle<Map> Genesis::CreateStrongFunctionMap( |
738 Handle<JSFunction> empty_function, bool is_constructor) { | 738 Handle<JSFunction> empty_function, bool is_constructor) { |
739 Handle<Map> map = factory()->NewMap(JS_FUNCTION_TYPE, JSFunction::kSize); | 739 Handle<Map> map = factory()->NewMap(JS_FUNCTION_TYPE, JSFunction::kSize); |
740 SetStrongFunctionInstanceDescriptor(map); | 740 SetStrongFunctionInstanceDescriptor(map); |
741 map->set_is_constructor(is_constructor); | 741 map->set_function_with_prototype(is_constructor); |
742 Map::SetPrototype(map, empty_function); | 742 Map::SetPrototype(map, empty_function); |
743 map->set_is_callable(); | 743 map->set_is_callable(); |
744 map->set_is_extensible(is_constructor); | 744 map->set_is_extensible(is_constructor); |
745 map->set_is_strong(); | 745 map->set_is_strong(); |
746 return map; | 746 return map; |
747 } | 747 } |
748 | 748 |
749 | 749 |
750 void Genesis::CreateStrictModeFunctionMaps(Handle<JSFunction> empty) { | 750 void Genesis::CreateStrictModeFunctionMaps(Handle<JSFunction> empty) { |
751 // Allocate map for the prototype-less strict mode instances. | 751 // Allocate map for the prototype-less strict mode instances. |
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1366 DONT_ENUM, Representation::Tagged()); | 1366 DONT_ENUM, Representation::Tagged()); |
1367 map->AppendDescriptor(&d); | 1367 map->AppendDescriptor(&d); |
1368 } | 1368 } |
1369 { // callee | 1369 { // callee |
1370 DataDescriptor d(factory->callee_string(), Heap::kArgumentsCalleeIndex, | 1370 DataDescriptor d(factory->callee_string(), Heap::kArgumentsCalleeIndex, |
1371 DONT_ENUM, Representation::Tagged()); | 1371 DONT_ENUM, Representation::Tagged()); |
1372 map->AppendDescriptor(&d); | 1372 map->AppendDescriptor(&d); |
1373 } | 1373 } |
1374 // @@iterator method is added later. | 1374 // @@iterator method is added later. |
1375 | 1375 |
1376 map->set_is_constructor(true); | 1376 map->set_function_with_prototype(true); |
1377 map->SetInObjectProperties(2); | 1377 map->SetInObjectProperties(2); |
1378 native_context()->set_sloppy_arguments_map(*map); | 1378 native_context()->set_sloppy_arguments_map(*map); |
1379 | 1379 |
1380 DCHECK(!function->has_initial_map()); | 1380 DCHECK(!function->has_initial_map()); |
1381 JSFunction::SetInitialMap(function, map, | 1381 JSFunction::SetInitialMap(function, map, |
1382 isolate->initial_object_prototype()); | 1382 isolate->initial_object_prototype()); |
1383 | 1383 |
1384 DCHECK(map->GetInObjectProperties() > Heap::kArgumentsCalleeIndex); | 1384 DCHECK(map->GetInObjectProperties() > Heap::kArgumentsCalleeIndex); |
1385 DCHECK(map->GetInObjectProperties() > Heap::kArgumentsLengthIndex); | 1385 DCHECK(map->GetInObjectProperties() > Heap::kArgumentsLengthIndex); |
1386 DCHECK(!map->is_dictionary_map()); | 1386 DCHECK(!map->is_dictionary_map()); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1432 attributes); | 1432 attributes); |
1433 map->AppendDescriptor(&d); | 1433 map->AppendDescriptor(&d); |
1434 } | 1434 } |
1435 { // caller | 1435 { // caller |
1436 AccessorConstantDescriptor d(factory->caller_string(), caller, | 1436 AccessorConstantDescriptor d(factory->caller_string(), caller, |
1437 attributes); | 1437 attributes); |
1438 map->AppendDescriptor(&d); | 1438 map->AppendDescriptor(&d); |
1439 } | 1439 } |
1440 // @@iterator method is added later. | 1440 // @@iterator method is added later. |
1441 | 1441 |
1442 map->set_is_constructor(true); | 1442 map->set_function_with_prototype(true); |
1443 DCHECK_EQ(native_context()->object_function()->prototype(), | 1443 DCHECK_EQ(native_context()->object_function()->prototype(), |
1444 *isolate->initial_object_prototype()); | 1444 *isolate->initial_object_prototype()); |
1445 Map::SetPrototype(map, isolate->initial_object_prototype()); | 1445 Map::SetPrototype(map, isolate->initial_object_prototype()); |
1446 map->SetInObjectProperties(1); | 1446 map->SetInObjectProperties(1); |
1447 | 1447 |
1448 // Copy constructor from the sloppy arguments boilerplate. | 1448 // Copy constructor from the sloppy arguments boilerplate. |
1449 map->SetConstructor( | 1449 map->SetConstructor( |
1450 native_context()->sloppy_arguments_map()->GetConstructor()); | 1450 native_context()->sloppy_arguments_map()->GetConstructor()); |
1451 | 1451 |
1452 native_context()->set_strict_arguments_map(*map); | 1452 native_context()->set_strict_arguments_map(*map); |
(...skipping 1805 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3258 } | 3258 } |
3259 | 3259 |
3260 | 3260 |
3261 // Called when the top-level V8 mutex is destroyed. | 3261 // Called when the top-level V8 mutex is destroyed. |
3262 void Bootstrapper::FreeThreadResources() { | 3262 void Bootstrapper::FreeThreadResources() { |
3263 DCHECK(!IsActive()); | 3263 DCHECK(!IsActive()); |
3264 } | 3264 } |
3265 | 3265 |
3266 } // namespace internal | 3266 } // namespace internal |
3267 } // namespace v8 | 3267 } // namespace v8 |
OLD | NEW |