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/base/utils/random-number-generator.h" | 5 #include "src/base/utils/random-number-generator.h" |
6 #include "src/code-factory.h" | 6 #include "src/code-factory.h" |
7 #include "src/code-stub-assembler.h" | 7 #include "src/code-stub-assembler.h" |
8 #include "src/compiler/node.h" | 8 #include "src/compiler/node.h" |
9 #include "src/ic/stub-cache.h" | 9 #include "src/ic/stub-cache.h" |
10 #include "src/isolate.h" | 10 #include "src/isolate.h" |
(...skipping 1711 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1722 ft.Call(handle(Smi::FromInt(i), isolate)).ToHandleChecked(); | 1722 ft.Call(handle(Smi::FromInt(i), isolate)).ToHandleChecked(); |
1723 Handle<NameDictionary> dict = NameDictionary::New(isolate, i); | 1723 Handle<NameDictionary> dict = NameDictionary::New(isolate, i); |
1724 // Both dictionaries should be memory equal. | 1724 // Both dictionaries should be memory equal. |
1725 int size = | 1725 int size = |
1726 FixedArrayBase::kHeaderSize + (dict->length() - 1) * kPointerSize; | 1726 FixedArrayBase::kHeaderSize + (dict->length() - 1) * kPointerSize; |
1727 CHECK_EQ(0, memcmp(*dict, *result, size)); | 1727 CHECK_EQ(0, memcmp(*dict, *result, size)); |
1728 } | 1728 } |
1729 } | 1729 } |
1730 } | 1730 } |
1731 | 1731 |
| 1732 TEST(PopAndReturnConstant) { |
| 1733 Isolate* isolate(CcTest::InitIsolateOnce()); |
| 1734 |
| 1735 const int kNumParams = 4; |
| 1736 const int kNumProgramaticParams = 2; |
| 1737 CodeStubAssemblerTester m(isolate, kNumParams - kNumProgramaticParams); |
| 1738 |
| 1739 // Call a function that return |kNumProgramaticParams| parameters in addition |
| 1740 // to those specified by the static descriptor. |kNumProgramaticParams| is |
| 1741 // specified as a constant. |
| 1742 m.PopAndReturn(m.Int32Constant(kNumProgramaticParams), |
| 1743 m.SmiConstant(Smi::FromInt(1234))); |
| 1744 |
| 1745 Handle<Code> code = m.GenerateCode(); |
| 1746 CHECK(!code.is_null()); |
| 1747 |
| 1748 FunctionTester ft(code, kNumParams); |
| 1749 Handle<Object> result; |
| 1750 for (int test_count = 0; test_count < 100; ++test_count) { |
| 1751 result = ft.Call(isolate->factory()->undefined_value(), |
| 1752 Handle<Smi>(Smi::FromInt(1234), isolate), |
| 1753 isolate->factory()->undefined_value(), |
| 1754 isolate->factory()->undefined_value()) |
| 1755 .ToHandleChecked(); |
| 1756 CHECK_EQ(1234, Handle<Smi>::cast(result)->value()); |
| 1757 } |
| 1758 } |
| 1759 |
| 1760 TEST(PopAndReturnVariable) { |
| 1761 Isolate* isolate(CcTest::InitIsolateOnce()); |
| 1762 |
| 1763 const int kNumParams = 4; |
| 1764 const int kNumProgramaticParams = 2; |
| 1765 CodeStubAssemblerTester m(isolate, kNumParams - kNumProgramaticParams); |
| 1766 |
| 1767 // Call a function that return |kNumProgramaticParams| parameters in addition |
| 1768 // to those specified by the static descriptor. |kNumProgramaticParams| is |
| 1769 // passed in as a parameter to the function so that it can't be recongized as |
| 1770 // a constant. |
| 1771 m.PopAndReturn(m.SmiUntag(m.Parameter(1)), m.SmiConstant(Smi::FromInt(1234))); |
| 1772 |
| 1773 Handle<Code> code = m.GenerateCode(); |
| 1774 CHECK(!code.is_null()); |
| 1775 |
| 1776 FunctionTester ft(code, kNumParams); |
| 1777 Handle<Object> result; |
| 1778 for (int test_count = 0; test_count < 100; ++test_count) { |
| 1779 result = ft.Call(isolate->factory()->undefined_value(), |
| 1780 Handle<Smi>(Smi::FromInt(1234), isolate), |
| 1781 isolate->factory()->undefined_value(), |
| 1782 Handle<Smi>(Smi::FromInt(kNumProgramaticParams), isolate)) |
| 1783 .ToHandleChecked(); |
| 1784 CHECK_EQ(1234, Handle<Smi>::cast(result)->value()); |
| 1785 } |
| 1786 } |
| 1787 |
1732 } // namespace internal | 1788 } // namespace internal |
1733 } // namespace v8 | 1789 } // namespace v8 |
OLD | NEW |