| 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/code-factory.h" | 5 #include "src/code-factory.h" |
| 6 #include "src/code-stubs.h" | 6 #include "src/code-stubs.h" |
| 7 #include "src/compiler/common-operator.h" | 7 #include "src/compiler/common-operator.h" |
| 8 #include "src/compiler/js-generic-lowering.h" | 8 #include "src/compiler/js-generic-lowering.h" |
| 9 #include "src/compiler/js-graph.h" | 9 #include "src/compiler/js-graph.h" |
| 10 #include "src/compiler/machine-operator.h" | 10 #include "src/compiler/machine-operator.h" |
| (...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 | 484 |
| 485 // TODO(titzer): total hack to share function context constants. | 485 // TODO(titzer): total hack to share function context constants. |
| 486 // Remove this when the JSGraph canonicalizes heap constants. | 486 // Remove this when the JSGraph canonicalizes heap constants. |
| 487 Node* context = node->InputAt(index); | 487 Node* context = node->InputAt(index); |
| 488 HeapObjectMatcher<Context> context_const(context); | 488 HeapObjectMatcher<Context> context_const(context); |
| 489 if (!context_const.HasValue() || | 489 if (!context_const.HasValue() || |
| 490 *(context_const.Value().handle()) != function->context()) { | 490 *(context_const.Value().handle()) != function->context()) { |
| 491 context = jsgraph()->HeapConstant(Handle<Context>(function->context())); | 491 context = jsgraph()->HeapConstant(Handle<Context>(function->context())); |
| 492 } | 492 } |
| 493 node->ReplaceInput(index, context); | 493 node->ReplaceInput(index, context); |
| 494 CallDescriptor* desc = Linkage::GetJSCallDescriptor( | 494 CallDescriptor::Flags flags = FlagsForNode(node); |
| 495 zone(), false, 1 + arg_count, FlagsForNode(node)); | 495 if (is_strict(p.language_mode())) flags |= CallDescriptor::kSupportsTailCalls; |
| 496 CallDescriptor* desc = |
| 497 Linkage::GetJSCallDescriptor(zone(), false, 1 + arg_count, flags); |
| 496 node->set_op(common()->Call(desc)); | 498 node->set_op(common()->Call(desc)); |
| 497 return true; | 499 return true; |
| 498 } | 500 } |
| 499 | 501 |
| 500 | 502 |
| 501 void JSGenericLowering::LowerJSCallFunction(Node* node) { | 503 void JSGenericLowering::LowerJSCallFunction(Node* node) { |
| 502 // Fast case: call function directly. | 504 // Fast case: call function directly. |
| 503 if (TryLowerDirectJSCall(node)) return; | 505 if (TryLowerDirectJSCall(node)) return; |
| 504 | 506 |
| 505 // General case: CallFunctionStub. | 507 // General case: CallFunctionStub. |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 570 } | 572 } |
| 571 | 573 |
| 572 | 574 |
| 573 MachineOperatorBuilder* JSGenericLowering::machine() const { | 575 MachineOperatorBuilder* JSGenericLowering::machine() const { |
| 574 return jsgraph()->machine(); | 576 return jsgraph()->machine(); |
| 575 } | 577 } |
| 576 | 578 |
| 577 } // namespace compiler | 579 } // namespace compiler |
| 578 } // namespace internal | 580 } // namespace internal |
| 579 } // namespace v8 | 581 } // namespace v8 |
| OLD | NEW |