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

Side by Side Diff: src/code-stubs.cc

Issue 2435023002: Use a different map to distinguish eval contexts (Closed)
Patch Set: Crankshaft backends and scope deserialization Created 4 years, 2 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
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/code-stubs.h" 5 #include "src/code-stubs.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/ast/ast.h" 9 #include "src/ast/ast.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 2581 matching lines...) Expand 10 before | Expand all | Expand 10 after
2592 } 2592 }
2593 2593
2594 void FastNewClosureStub::GenerateAssembly(CodeStubAssembler* assembler) const { 2594 void FastNewClosureStub::GenerateAssembly(CodeStubAssembler* assembler) const {
2595 assembler->Return( 2595 assembler->Return(
2596 Generate(assembler, assembler->Parameter(0), assembler->Parameter(1))); 2596 Generate(assembler, assembler->Parameter(0), assembler->Parameter(1)));
2597 } 2597 }
2598 2598
2599 // static 2599 // static
2600 compiler::Node* FastNewFunctionContextStub::Generate( 2600 compiler::Node* FastNewFunctionContextStub::Generate(
2601 CodeStubAssembler* assembler, compiler::Node* function, 2601 CodeStubAssembler* assembler, compiler::Node* function,
2602 compiler::Node* slots, compiler::Node* context) { 2602 compiler::Node* slots, compiler::Node* context, bool for_eval) {
2603 typedef compiler::Node Node; 2603 typedef compiler::Node Node;
2604 2604
2605 Node* min_context_slots = 2605 Node* min_context_slots =
2606 assembler->Int32Constant(Context::MIN_CONTEXT_SLOTS); 2606 assembler->Int32Constant(Context::MIN_CONTEXT_SLOTS);
2607 Node* length = assembler->Int32Add(slots, min_context_slots); 2607 Node* length = assembler->Int32Add(slots, min_context_slots);
2608 Node* size = assembler->Int32Add( 2608 Node* size = assembler->Int32Add(
2609 assembler->Word32Shl(length, assembler->Int32Constant(kPointerSizeLog2)), 2609 assembler->Word32Shl(length, assembler->Int32Constant(kPointerSizeLog2)),
2610 assembler->Int32Constant(FixedArray::kHeaderSize)); 2610 assembler->Int32Constant(FixedArray::kHeaderSize));
2611 2611
2612 // Create a new closure from the given function info in new space 2612 // Create a new closure from the given function info in new space
2613 Node* function_context = assembler->Allocate(size); 2613 Node* function_context = assembler->Allocate(size);
2614 2614
2615 Isolate* isolate = assembler->isolate(); 2615 Isolate* isolate = assembler->isolate();
2616 assembler->StoreMapNoWriteBarrier( 2616 Handle<Map> map = for_eval ? isolate->factory()->eval_context_map()
2617 function_context, 2617 : isolate->factory()->function_context_map();
2618 assembler->HeapConstant(isolate->factory()->function_context_map())); 2618 assembler->StoreMapNoWriteBarrier(function_context,
2619 assembler->HeapConstant(map));
2619 assembler->StoreObjectFieldNoWriteBarrier(function_context, 2620 assembler->StoreObjectFieldNoWriteBarrier(function_context,
2620 Context::kLengthOffset, 2621 Context::kLengthOffset,
2621 assembler->SmiFromWord32(length)); 2622 assembler->SmiFromWord32(length));
2622 2623
2623 // Set up the fixed slots. 2624 // Set up the fixed slots.
2624 assembler->StoreFixedArrayElement( 2625 assembler->StoreFixedArrayElement(
2625 function_context, assembler->Int32Constant(Context::CLOSURE_INDEX), 2626 function_context, assembler->Int32Constant(Context::CLOSURE_INDEX),
2626 function, SKIP_WRITE_BARRIER); 2627 function, SKIP_WRITE_BARRIER);
2627 assembler->StoreFixedArrayElement( 2628 assembler->StoreFixedArrayElement(
2628 function_context, assembler->Int32Constant(Context::PREVIOUS_INDEX), 2629 function_context, assembler->Int32Constant(Context::PREVIOUS_INDEX),
(...skipping 20 matching lines...) Expand all
2649 return function_context; 2650 return function_context;
2650 } 2651 }
2651 2652
2652 void FastNewFunctionContextStub::GenerateAssembly( 2653 void FastNewFunctionContextStub::GenerateAssembly(
2653 CodeStubAssembler* assembler) const { 2654 CodeStubAssembler* assembler) const {
2654 typedef compiler::Node Node; 2655 typedef compiler::Node Node;
2655 Node* function = assembler->Parameter(Descriptor::kFunction); 2656 Node* function = assembler->Parameter(Descriptor::kFunction);
2656 Node* slots = assembler->Parameter(FastNewFunctionContextDescriptor::kSlots); 2657 Node* slots = assembler->Parameter(FastNewFunctionContextDescriptor::kSlots);
2657 Node* context = assembler->Parameter(Descriptor::kContext); 2658 Node* context = assembler->Parameter(Descriptor::kContext);
2658 2659
2659 assembler->Return(Generate(assembler, function, slots, context)); 2660 assembler->Return(Generate(assembler, function, slots, context, for_eval()));
2660 } 2661 }
2661 2662
2662 // static 2663 // static
2663 compiler::Node* FastCloneRegExpStub::Generate(CodeStubAssembler* assembler, 2664 compiler::Node* FastCloneRegExpStub::Generate(CodeStubAssembler* assembler,
2664 compiler::Node* closure, 2665 compiler::Node* closure,
2665 compiler::Node* literal_index, 2666 compiler::Node* literal_index,
2666 compiler::Node* pattern, 2667 compiler::Node* pattern,
2667 compiler::Node* flags, 2668 compiler::Node* flags,
2668 compiler::Node* context) { 2669 compiler::Node* context) {
2669 typedef CodeStubAssembler::Label Label; 2670 typedef CodeStubAssembler::Label Label;
(...skipping 573 matching lines...) Expand 10 before | Expand all | Expand 10 after
3243 3244
3244 if (type == MachineType::Pointer()) { 3245 if (type == MachineType::Pointer()) {
3245 return Representation::External(); 3246 return Representation::External();
3246 } 3247 }
3247 3248
3248 return Representation::Tagged(); 3249 return Representation::Tagged();
3249 } 3250 }
3250 3251
3251 } // namespace internal 3252 } // namespace internal
3252 } // namespace v8 3253 } // namespace v8
OLDNEW
« no previous file with comments | « src/code-stubs.h ('k') | src/compiler/bytecode-graph-builder.cc » ('j') | src/contexts.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698