OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1783 v8::Local<v8::Context> ctx2 = v8::Local<v8::Context>::New(isolate, ctx2p); | 1783 v8::Local<v8::Context> ctx2 = v8::Local<v8::Context>::New(isolate, ctx2p); |
1784 v8::Local<v8::Value> v = ctx1->Global()->Get(v8_str("v")); | 1784 v8::Local<v8::Value> v = ctx1->Global()->Get(v8_str("v")); |
1785 ctx2->Enter(); | 1785 ctx2->Enter(); |
1786 ctx2->Global()->Set(v8_str("o"), v); | 1786 ctx2->Global()->Set(v8_str("o"), v); |
1787 v8::Local<v8::Value> res = CompileRun( | 1787 v8::Local<v8::Value> res = CompileRun( |
1788 "function f() { return o.x; }" | 1788 "function f() { return o.x; }" |
1789 "for (var i = 0; i < 10; ++i) f();" | 1789 "for (var i = 0; i < 10; ++i) f();" |
1790 "%OptimizeFunctionOnNextCall(f);" | 1790 "%OptimizeFunctionOnNextCall(f);" |
1791 "f();"); | 1791 "f();"); |
1792 CHECK_EQ(42, res->Int32Value()); | 1792 CHECK_EQ(42, res->Int32Value()); |
1793 ctx2->Global()->Set(v8_str("o"), v8::Int32::New(0)); | 1793 ctx2->Global()->Set(v8_str("o"), v8::Int32::New(isolate, 0)); |
1794 ctx2->Exit(); | 1794 ctx2->Exit(); |
1795 v8::Local<v8::Context>::New(isolate, ctx1)->Exit(); | 1795 v8::Local<v8::Context>::New(isolate, ctx1)->Exit(); |
1796 ctx1p.Reset(); | 1796 ctx1p.Reset(); |
1797 v8::V8::ContextDisposedNotification(); | 1797 v8::V8::ContextDisposedNotification(); |
1798 } | 1798 } |
1799 CcTest::heap()->CollectAllAvailableGarbage(); | 1799 CcTest::heap()->CollectAllAvailableGarbage(); |
1800 CHECK_EQ(2, NumberOfGlobalObjects()); | 1800 CHECK_EQ(2, NumberOfGlobalObjects()); |
1801 ctx2p.Reset(); | 1801 ctx2p.Reset(); |
1802 CcTest::heap()->CollectAllAvailableGarbage(); | 1802 CcTest::heap()->CollectAllAvailableGarbage(); |
1803 CHECK_EQ(0, NumberOfGlobalObjects()); | 1803 CHECK_EQ(0, NumberOfGlobalObjects()); |
(...skipping 25 matching lines...) Expand all Loading... |
1829 v8::Local<v8::Context> ctx2 = v8::Local<v8::Context>::New(isolate, ctx2p); | 1829 v8::Local<v8::Context> ctx2 = v8::Local<v8::Context>::New(isolate, ctx2p); |
1830 v8::Local<v8::Value> v = ctx1->Global()->Get(v8_str("v")); | 1830 v8::Local<v8::Value> v = ctx1->Global()->Get(v8_str("v")); |
1831 ctx2->Enter(); | 1831 ctx2->Enter(); |
1832 ctx2->Global()->Set(v8_str("o"), v); | 1832 ctx2->Global()->Set(v8_str("o"), v); |
1833 v8::Local<v8::Value> res = CompileRun( | 1833 v8::Local<v8::Value> res = CompileRun( |
1834 "function f(x) { return x(); }" | 1834 "function f(x) { return x(); }" |
1835 "for (var i = 0; i < 10; ++i) f(o);" | 1835 "for (var i = 0; i < 10; ++i) f(o);" |
1836 "%OptimizeFunctionOnNextCall(f);" | 1836 "%OptimizeFunctionOnNextCall(f);" |
1837 "f(o);"); | 1837 "f(o);"); |
1838 CHECK_EQ(42, res->Int32Value()); | 1838 CHECK_EQ(42, res->Int32Value()); |
1839 ctx2->Global()->Set(v8_str("o"), v8::Int32::New(0)); | 1839 ctx2->Global()->Set(v8_str("o"), v8::Int32::New(isolate, 0)); |
1840 ctx2->Exit(); | 1840 ctx2->Exit(); |
1841 ctx1->Exit(); | 1841 ctx1->Exit(); |
1842 ctx1p.Reset(); | 1842 ctx1p.Reset(); |
1843 v8::V8::ContextDisposedNotification(); | 1843 v8::V8::ContextDisposedNotification(); |
1844 } | 1844 } |
1845 CcTest::heap()->CollectAllAvailableGarbage(); | 1845 CcTest::heap()->CollectAllAvailableGarbage(); |
1846 CHECK_EQ(2, NumberOfGlobalObjects()); | 1846 CHECK_EQ(2, NumberOfGlobalObjects()); |
1847 ctx2p.Reset(); | 1847 ctx2p.Reset(); |
1848 CcTest::heap()->CollectAllAvailableGarbage(); | 1848 CcTest::heap()->CollectAllAvailableGarbage(); |
1849 CHECK_EQ(0, NumberOfGlobalObjects()); | 1849 CHECK_EQ(0, NumberOfGlobalObjects()); |
(...skipping 23 matching lines...) Expand all Loading... |
1873 v8::Local<v8::Context> ctx2 = v8::Local<v8::Context>::New(isolate, ctx2p); | 1873 v8::Local<v8::Context> ctx2 = v8::Local<v8::Context>::New(isolate, ctx2p); |
1874 v8::Local<v8::Value> v = ctx1->Global()->Get(v8_str("v")); | 1874 v8::Local<v8::Value> v = ctx1->Global()->Get(v8_str("v")); |
1875 ctx2->Enter(); | 1875 ctx2->Enter(); |
1876 ctx2->Global()->Set(v8_str("o"), v); | 1876 ctx2->Global()->Set(v8_str("o"), v); |
1877 v8::Local<v8::Value> res = CompileRun( | 1877 v8::Local<v8::Value> res = CompileRun( |
1878 "function f() { return o[0]; }" | 1878 "function f() { return o[0]; }" |
1879 "for (var i = 0; i < 10; ++i) f();" | 1879 "for (var i = 0; i < 10; ++i) f();" |
1880 "%OptimizeFunctionOnNextCall(f);" | 1880 "%OptimizeFunctionOnNextCall(f);" |
1881 "f();"); | 1881 "f();"); |
1882 CHECK_EQ(42, res->Int32Value()); | 1882 CHECK_EQ(42, res->Int32Value()); |
1883 ctx2->Global()->Set(v8_str("o"), v8::Int32::New(0)); | 1883 ctx2->Global()->Set(v8_str("o"), v8::Int32::New(isolate, 0)); |
1884 ctx2->Exit(); | 1884 ctx2->Exit(); |
1885 ctx1->Exit(); | 1885 ctx1->Exit(); |
1886 ctx1p.Reset(); | 1886 ctx1p.Reset(); |
1887 v8::V8::ContextDisposedNotification(); | 1887 v8::V8::ContextDisposedNotification(); |
1888 } | 1888 } |
1889 CcTest::heap()->CollectAllAvailableGarbage(); | 1889 CcTest::heap()->CollectAllAvailableGarbage(); |
1890 CHECK_EQ(2, NumberOfGlobalObjects()); | 1890 CHECK_EQ(2, NumberOfGlobalObjects()); |
1891 ctx2p.Reset(); | 1891 ctx2p.Reset(); |
1892 CcTest::heap()->CollectAllAvailableGarbage(); | 1892 CcTest::heap()->CollectAllAvailableGarbage(); |
1893 CHECK_EQ(0, NumberOfGlobalObjects()); | 1893 CHECK_EQ(0, NumberOfGlobalObjects()); |
(...skipping 27 matching lines...) Expand all Loading... |
1921 v8::Local<v8::Value> res = CompileRun( | 1921 v8::Local<v8::Value> res = CompileRun( |
1922 "function f() {" | 1922 "function f() {" |
1923 " var p = {x: 42};" | 1923 " var p = {x: 42};" |
1924 " p.__proto__ = o;" | 1924 " p.__proto__ = o;" |
1925 " return p.x;" | 1925 " return p.x;" |
1926 "}" | 1926 "}" |
1927 "for (var i = 0; i < 10; ++i) f();" | 1927 "for (var i = 0; i < 10; ++i) f();" |
1928 "%OptimizeFunctionOnNextCall(f);" | 1928 "%OptimizeFunctionOnNextCall(f);" |
1929 "f();"); | 1929 "f();"); |
1930 CHECK_EQ(42, res->Int32Value()); | 1930 CHECK_EQ(42, res->Int32Value()); |
1931 ctx2->Global()->Set(v8_str("o"), v8::Int32::New(0)); | 1931 ctx2->Global()->Set(v8_str("o"), v8::Int32::New(isolate, 0)); |
1932 ctx2->Exit(); | 1932 ctx2->Exit(); |
1933 ctx1->Exit(); | 1933 ctx1->Exit(); |
1934 ctx1p.Reset(); | 1934 ctx1p.Reset(); |
1935 v8::V8::ContextDisposedNotification(); | 1935 v8::V8::ContextDisposedNotification(); |
1936 } | 1936 } |
1937 CcTest::heap()->CollectAllAvailableGarbage(); | 1937 CcTest::heap()->CollectAllAvailableGarbage(); |
1938 CHECK_EQ(2, NumberOfGlobalObjects()); | 1938 CHECK_EQ(2, NumberOfGlobalObjects()); |
1939 ctx2p.Reset(); | 1939 ctx2p.Reset(); |
1940 CcTest::heap()->CollectAllAvailableGarbage(); | 1940 CcTest::heap()->CollectAllAvailableGarbage(); |
1941 CHECK_EQ(0, NumberOfGlobalObjects()); | 1941 CHECK_EQ(0, NumberOfGlobalObjects()); |
(...skipping 819 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2761 TEST(Regress2211) { | 2761 TEST(Regress2211) { |
2762 CcTest::InitializeVM(); | 2762 CcTest::InitializeVM(); |
2763 v8::HandleScope scope(CcTest::isolate()); | 2763 v8::HandleScope scope(CcTest::isolate()); |
2764 | 2764 |
2765 v8::Handle<v8::String> value = v8_str("val string"); | 2765 v8::Handle<v8::String> value = v8_str("val string"); |
2766 Smi* hash = Smi::FromInt(321); | 2766 Smi* hash = Smi::FromInt(321); |
2767 Heap* heap = CcTest::heap(); | 2767 Heap* heap = CcTest::heap(); |
2768 | 2768 |
2769 for (int i = 0; i < 2; i++) { | 2769 for (int i = 0; i < 2; i++) { |
2770 // Store identity hash first and common hidden property second. | 2770 // Store identity hash first and common hidden property second. |
2771 v8::Handle<v8::Object> obj = v8::Object::New(); | 2771 v8::Handle<v8::Object> obj = v8::Object::New(CcTest::isolate()); |
2772 Handle<JSObject> internal_obj = v8::Utils::OpenHandle(*obj); | 2772 Handle<JSObject> internal_obj = v8::Utils::OpenHandle(*obj); |
2773 CHECK(internal_obj->HasFastProperties()); | 2773 CHECK(internal_obj->HasFastProperties()); |
2774 | 2774 |
2775 // In the first iteration, set hidden value first and identity hash second. | 2775 // In the first iteration, set hidden value first and identity hash second. |
2776 // In the second iteration, reverse the order. | 2776 // In the second iteration, reverse the order. |
2777 if (i == 0) obj->SetHiddenValue(v8_str("key string"), value); | 2777 if (i == 0) obj->SetHiddenValue(v8_str("key string"), value); |
2778 JSObject::SetIdentityHash(internal_obj, handle(hash, CcTest::i_isolate())); | 2778 JSObject::SetIdentityHash(internal_obj, handle(hash, CcTest::i_isolate())); |
2779 if (i == 1) obj->SetHiddenValue(v8_str("key string"), value); | 2779 if (i == 1) obj->SetHiddenValue(v8_str("key string"), value); |
2780 | 2780 |
2781 // Check values. | 2781 // Check values. |
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3330 "}" | 3330 "}" |
3331 "obj = fastliteralcase(get_standard_literal(), 1);" | 3331 "obj = fastliteralcase(get_standard_literal(), 1);" |
3332 "obj = fastliteralcase(get_standard_literal(), 1.5);" | 3332 "obj = fastliteralcase(get_standard_literal(), 1.5);" |
3333 "obj = fastliteralcase(get_standard_literal(), 2);"); | 3333 "obj = fastliteralcase(get_standard_literal(), 2);"); |
3334 | 3334 |
3335 // prepare the heap | 3335 // prepare the heap |
3336 v8::Local<v8::String> mote_code_string = | 3336 v8::Local<v8::String> mote_code_string = |
3337 v8_str("fastliteralcase(mote, 2.5);"); | 3337 v8_str("fastliteralcase(mote, 2.5);"); |
3338 | 3338 |
3339 v8::Local<v8::String> array_name = v8_str("mote"); | 3339 v8::Local<v8::String> array_name = v8_str("mote"); |
3340 CcTest::global()->Set(array_name, v8::Int32::New(0)); | 3340 CcTest::global()->Set(array_name, v8::Int32::New(CcTest::isolate(), 0)); |
3341 | 3341 |
3342 // First make sure we flip spaces | 3342 // First make sure we flip spaces |
3343 CcTest::heap()->CollectGarbage(NEW_SPACE); | 3343 CcTest::heap()->CollectGarbage(NEW_SPACE); |
3344 | 3344 |
3345 // Allocate the object. | 3345 // Allocate the object. |
3346 Handle<FixedArray> array_data = factory->NewFixedArray(2, NOT_TENURED); | 3346 Handle<FixedArray> array_data = factory->NewFixedArray(2, NOT_TENURED); |
3347 array_data->set(0, Smi::FromInt(1)); | 3347 array_data->set(0, Smi::FromInt(1)); |
3348 array_data->set(1, Smi::FromInt(2)); | 3348 array_data->set(1, Smi::FromInt(2)); |
3349 | 3349 |
3350 AllocateAllButNBytes(CcTest::heap()->new_space(), | 3350 AllocateAllButNBytes(CcTest::heap()->new_space(), |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3627 for (int i = 0; i < 4; i++) { | 3627 for (int i = 0; i < 4; i++) { |
3628 heap->CollectAllGarbage(false); | 3628 heap->CollectAllGarbage(false); |
3629 } | 3629 } |
3630 | 3630 |
3631 // The site still exists because of our global handle, but the code is no | 3631 // The site still exists because of our global handle, but the code is no |
3632 // longer referred to by dependent_code(). | 3632 // longer referred to by dependent_code(). |
3633 DependentCode::GroupStartIndexes starts(site->dependent_code()); | 3633 DependentCode::GroupStartIndexes starts(site->dependent_code()); |
3634 int index = starts.at(DependentCode::kAllocationSiteTransitionChangedGroup); | 3634 int index = starts.at(DependentCode::kAllocationSiteTransitionChangedGroup); |
3635 CHECK(!(site->dependent_code()->is_code_at(index))); | 3635 CHECK(!(site->dependent_code()->is_code_at(index))); |
3636 } | 3636 } |
OLD | NEW |