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

Side by Side Diff: src/bootstrapper.cc

Issue 1221713003: Distinguish slow from fast sloppy arguments (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 5 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
« no previous file with comments | « src/arm64/lithium-codegen-arm64.cc ('k') | src/code-stubs.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 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 1339 matching lines...) Expand 10 before | Expand all | Expand 10 after
1350 DCHECK(!function->has_initial_map()); 1350 DCHECK(!function->has_initial_map());
1351 JSFunction::SetInitialMap(function, map, 1351 JSFunction::SetInitialMap(function, map,
1352 isolate->initial_object_prototype()); 1352 isolate->initial_object_prototype());
1353 1353
1354 DCHECK(map->inobject_properties() > Heap::kArgumentsCalleeIndex); 1354 DCHECK(map->inobject_properties() > Heap::kArgumentsCalleeIndex);
1355 DCHECK(map->inobject_properties() > Heap::kArgumentsLengthIndex); 1355 DCHECK(map->inobject_properties() > Heap::kArgumentsLengthIndex);
1356 DCHECK(!map->is_dictionary_map()); 1356 DCHECK(!map->is_dictionary_map());
1357 DCHECK(IsFastObjectElementsKind(map->elements_kind())); 1357 DCHECK(IsFastObjectElementsKind(map->elements_kind()));
1358 } 1358 }
1359 1359
1360 { // --- aliased arguments map 1360 { // --- fast and slow aliased arguments map
1361 Handle<Map> map = 1361 Handle<Map> map = isolate->sloppy_arguments_map();
1362 Map::Copy(isolate->sloppy_arguments_map(), "AliasedArguments"); 1362 map = Map::Copy(map, "FastAliasedArguments");
1363 map->set_elements_kind(SLOPPY_ARGUMENTS_ELEMENTS); 1363 map->set_elements_kind(FAST_SLOPPY_ARGUMENTS_ELEMENTS);
1364 DCHECK_EQ(2, map->pre_allocated_property_fields()); 1364 DCHECK_EQ(2, map->pre_allocated_property_fields());
1365 native_context()->set_aliased_arguments_map(*map); 1365 native_context()->set_fast_aliased_arguments_map(*map);
1366
1367 map = Map::Copy(map, "SlowAliasedArguments");
1368 map->set_elements_kind(SLOW_SLOPPY_ARGUMENTS_ELEMENTS);
1369 DCHECK_EQ(2, map->pre_allocated_property_fields());
1370 native_context()->set_slow_aliased_arguments_map(*map);
1366 } 1371 }
1367 1372
1368 { // --- strict mode arguments map 1373 { // --- strict mode arguments map
1369 const PropertyAttributes attributes = 1374 const PropertyAttributes attributes =
1370 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY); 1375 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY);
1371 1376
1372 // Create the ThrowTypeError functions. 1377 // Create the ThrowTypeError functions.
1373 Handle<AccessorPair> callee = factory->NewAccessorPair(); 1378 Handle<AccessorPair> callee = factory->NewAccessorPair();
1374 Handle<AccessorPair> caller = factory->NewAccessorPair(); 1379 Handle<AccessorPair> caller = factory->NewAccessorPair();
1375 1380
(...skipping 1057 matching lines...) Expand 10 before | Expand all | Expand 10 after
2433 { 2438 {
2434 AccessorConstantDescriptor d(factory()->iterator_symbol(), 2439 AccessorConstantDescriptor d(factory()->iterator_symbol(),
2435 arguments_iterator, attribs); 2440 arguments_iterator, attribs);
2436 Handle<Map> map(native_context()->sloppy_arguments_map()); 2441 Handle<Map> map(native_context()->sloppy_arguments_map());
2437 Map::EnsureDescriptorSlack(map, 1); 2442 Map::EnsureDescriptorSlack(map, 1);
2438 map->AppendDescriptor(&d); 2443 map->AppendDescriptor(&d);
2439 } 2444 }
2440 { 2445 {
2441 AccessorConstantDescriptor d(factory()->iterator_symbol(), 2446 AccessorConstantDescriptor d(factory()->iterator_symbol(),
2442 arguments_iterator, attribs); 2447 arguments_iterator, attribs);
2443 Handle<Map> map(native_context()->aliased_arguments_map()); 2448 Handle<Map> map(native_context()->fast_aliased_arguments_map());
2444 Map::EnsureDescriptorSlack(map, 1); 2449 Map::EnsureDescriptorSlack(map, 1);
2445 map->AppendDescriptor(&d); 2450 map->AppendDescriptor(&d);
2446 } 2451 }
2452 {
2453 AccessorConstantDescriptor d(factory()->iterator_symbol(),
2454 arguments_iterator, attribs);
2455 Handle<Map> map(native_context()->slow_aliased_arguments_map());
2456 Map::EnsureDescriptorSlack(map, 1);
2457 map->AppendDescriptor(&d);
2458 }
2447 { 2459 {
2448 AccessorConstantDescriptor d(factory()->iterator_symbol(), 2460 AccessorConstantDescriptor d(factory()->iterator_symbol(),
2449 arguments_iterator, attribs); 2461 arguments_iterator, attribs);
2450 Handle<Map> map(native_context()->strict_arguments_map()); 2462 Handle<Map> map(native_context()->strict_arguments_map());
2451 Map::EnsureDescriptorSlack(map, 1); 2463 Map::EnsureDescriptorSlack(map, 1);
2452 map->AppendDescriptor(&d); 2464 map->AppendDescriptor(&d);
2453 } 2465 }
2454 } 2466 }
2455 2467
2456 #ifdef VERIFY_HEAP 2468 #ifdef VERIFY_HEAP
(...skipping 735 matching lines...) Expand 10 before | Expand all | Expand 10 after
3192 } 3204 }
3193 3205
3194 3206
3195 // Called when the top-level V8 mutex is destroyed. 3207 // Called when the top-level V8 mutex is destroyed.
3196 void Bootstrapper::FreeThreadResources() { 3208 void Bootstrapper::FreeThreadResources() {
3197 DCHECK(!IsActive()); 3209 DCHECK(!IsActive());
3198 } 3210 }
3199 3211
3200 } // namespace internal 3212 } // namespace internal
3201 } // namespace v8 3213 } // namespace v8
OLDNEW
« no previous file with comments | « src/arm64/lithium-codegen-arm64.cc ('k') | src/code-stubs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698