OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/compiler/js-call-reducer.h" | 5 #include "src/compiler/js-call-reducer.h" |
6 | 6 |
7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
9 #include "src/compiler/js-graph.h" | 9 #include "src/compiler/js-graph.h" |
10 #include "src/compiler/linkage.h" | 10 #include "src/compiler/linkage.h" |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 | 400 |
401 // Raise a TypeError if the {target} is a "classConstructor". | 401 // Raise a TypeError if the {target} is a "classConstructor". |
402 if (IsClassConstructor(shared->kind())) { | 402 if (IsClassConstructor(shared->kind())) { |
403 NodeProperties::ReplaceValueInputs(node, target); | 403 NodeProperties::ReplaceValueInputs(node, target); |
404 NodeProperties::ChangeOp( | 404 NodeProperties::ChangeOp( |
405 node, javascript()->CallRuntime( | 405 node, javascript()->CallRuntime( |
406 Runtime::kThrowConstructorNonCallableError, 1)); | 406 Runtime::kThrowConstructorNonCallableError, 1)); |
407 return Changed(node); | 407 return Changed(node); |
408 } | 408 } |
409 | 409 |
| 410 // Don't inline cross native context. |
| 411 if (function->native_context() != *native_context()) return NoChange(); |
| 412 |
410 // Check for known builtin functions. | 413 // Check for known builtin functions. |
411 switch (shared->code()->builtin_index()) { | 414 switch (shared->code()->builtin_index()) { |
412 case Builtins::kFunctionPrototypeApply: | 415 case Builtins::kFunctionPrototypeApply: |
413 return ReduceFunctionPrototypeApply(node); | 416 return ReduceFunctionPrototypeApply(node); |
414 case Builtins::kFunctionPrototypeCall: | 417 case Builtins::kFunctionPrototypeCall: |
415 return ReduceFunctionPrototypeCall(node); | 418 return ReduceFunctionPrototypeCall(node); |
416 case Builtins::kFunctionPrototypeHasInstance: | 419 case Builtins::kFunctionPrototypeHasInstance: |
417 return ReduceFunctionPrototypeHasInstance(node); | 420 return ReduceFunctionPrototypeHasInstance(node); |
418 case Builtins::kNumberConstructor: | 421 case Builtins::kNumberConstructor: |
419 return ReduceNumberConstructor(node); | 422 return ReduceNumberConstructor(node); |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
562 | 565 |
563 // Raise a TypeError if the {target} is not a constructor. | 566 // Raise a TypeError if the {target} is not a constructor. |
564 if (!function->IsConstructor()) { | 567 if (!function->IsConstructor()) { |
565 NodeProperties::ReplaceValueInputs(node, target); | 568 NodeProperties::ReplaceValueInputs(node, target); |
566 NodeProperties::ChangeOp( | 569 NodeProperties::ChangeOp( |
567 node, javascript()->CallRuntime( | 570 node, javascript()->CallRuntime( |
568 Runtime::kThrowConstructedNonConstructable)); | 571 Runtime::kThrowConstructedNonConstructable)); |
569 return Changed(node); | 572 return Changed(node); |
570 } | 573 } |
571 | 574 |
| 575 // Don't inline cross native context. |
| 576 if (function->native_context() != *native_context()) return NoChange(); |
| 577 |
572 // Check for the ArrayConstructor. | 578 // Check for the ArrayConstructor. |
573 if (*function == function->native_context()->array_function()) { | 579 if (*function == function->native_context()->array_function()) { |
574 // Check if we have an allocation site. | 580 // Check if we have an allocation site. |
575 Handle<AllocationSite> site; | 581 Handle<AllocationSite> site; |
576 if (p.feedback().IsValid()) { | 582 if (p.feedback().IsValid()) { |
577 CallICNexus nexus(p.feedback().vector(), p.feedback().slot()); | 583 CallICNexus nexus(p.feedback().vector(), p.feedback().slot()); |
578 Handle<Object> feedback(nexus.GetFeedback(), isolate()); | 584 Handle<Object> feedback(nexus.GetFeedback(), isolate()); |
579 if (feedback->IsAllocationSite()) { | 585 if (feedback->IsAllocationSite()) { |
580 site = Handle<AllocationSite>::cast(feedback); | 586 site = Handle<AllocationSite>::cast(feedback); |
581 } | 587 } |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
668 return jsgraph()->javascript(); | 674 return jsgraph()->javascript(); |
669 } | 675 } |
670 | 676 |
671 SimplifiedOperatorBuilder* JSCallReducer::simplified() const { | 677 SimplifiedOperatorBuilder* JSCallReducer::simplified() const { |
672 return jsgraph()->simplified(); | 678 return jsgraph()->simplified(); |
673 } | 679 } |
674 | 680 |
675 } // namespace compiler | 681 } // namespace compiler |
676 } // namespace internal | 682 } // namespace internal |
677 } // namespace v8 | 683 } // namespace v8 |
OLD | NEW |