14a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org// Copyright 2013 the V8 project authors. All rights reserved. 24a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 34a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org// Check that we can traverse very deep stacks of ConsStrings using 44a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org// StringCharacterStram. Check that Get(int) works on very deep stacks 54a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org// of ConsStrings. These operations may not be very fast, but they 64a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org// should be possible without getting errors due to too deep recursion. 74a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h" 94a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 10196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/objects.h" 117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/ostreams.h" 12196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "test/cctest/cctest.h" 134a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 144a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgusing namespace v8::internal; 154a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 164a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 174a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgTEST(Create) { 18e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 19528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 204a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org HandleScope scope(isolate); 214a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 224a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org const int kNumSymbols = 30; 234a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org Handle<Symbol> symbols[kNumSymbols]; 244a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 25f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org OFStream os(stdout); 264a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org for (int i = 0; i < kNumSymbols; ++i) { 274a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org symbols[i] = isolate->factory()->NewSymbol(); 284a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org CHECK(symbols[i]->IsName()); 294a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org CHECK(symbols[i]->IsSymbol()); 304a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org CHECK(symbols[i]->HasHashCode()); 314a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org CHECK_GT(symbols[i]->Hash(), 0); 32f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org os << Brief(*symbols[i]) << "\n"; 334a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org#if OBJECT_PRINT 34f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org symbols[i]->Print(os); 354a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org#endif 364a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org#if VERIFY_HEAP 37a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org symbols[i]->ObjectVerify(); 384a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org#endif 394a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org } 404a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 41f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org CcTest::heap()->CollectGarbage(i::NEW_SPACE); 42528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org CcTest::heap()->CollectAllGarbage(Heap::kNoGCFlags); 434a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 444a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org // All symbols should be distinct. 454a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org for (int i = 0; i < kNumSymbols; ++i) { 464a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org CHECK(symbols[i]->SameValue(*symbols[i])); 474a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org for (int j = i + 1; j < kNumSymbols; ++j) { 484a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org CHECK(!symbols[i]->SameValue(*symbols[j])); 494a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org } 504a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org } 514a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org} 52