| Index: test/cctest/test-api.cc
|
| diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
|
| index 0cf3f7ba41563e2b54df1f6e1e79f6bbe18bbeda..be5ecba688cb90d66e0202d2a388c928e10c3a09 100644
|
| --- a/test/cctest/test-api.cc
|
| +++ b/test/cctest/test-api.cc
|
| @@ -58,7 +58,7 @@ using ::v8::Function;
|
| using ::v8::AccessorInfo;
|
| using ::v8::Extension;
|
|
|
| -namespace i = ::v8::internal;
|
| +namespace i = ::i;
|
|
|
|
|
| static void ExpectString(const char* code, const char* expected) {
|
| @@ -381,11 +381,11 @@ THREADED_TEST(ScriptUsingStringResource) {
|
| CHECK(source->IsExternal());
|
| CHECK_EQ(resource,
|
| static_cast<TestResource*>(source->GetExternalStringResource()));
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::Heap::CollectAllGarbage(false);
|
| CHECK_EQ(0, TestResource::dispose_count);
|
| }
|
| - v8::internal::CompilationCache::Clear();
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::CompilationCache::Clear();
|
| + i::Heap::CollectAllGarbage(false);
|
| CHECK_EQ(1, TestResource::dispose_count);
|
| }
|
|
|
| @@ -402,11 +402,11 @@ THREADED_TEST(ScriptUsingAsciiStringResource) {
|
| Local<Value> value = script->Run();
|
| CHECK(value->IsNumber());
|
| CHECK_EQ(7, value->Int32Value());
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::Heap::CollectAllGarbage(false);
|
| CHECK_EQ(0, TestAsciiResource::dispose_count);
|
| }
|
| - v8::internal::CompilationCache::Clear();
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::CompilationCache::Clear();
|
| + i::Heap::CollectAllGarbage(false);
|
| CHECK_EQ(1, TestAsciiResource::dispose_count);
|
| }
|
|
|
| @@ -427,11 +427,11 @@ THREADED_TEST(ScriptMakingExternalString) {
|
| Local<Value> value = script->Run();
|
| CHECK(value->IsNumber());
|
| CHECK_EQ(7, value->Int32Value());
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::Heap::CollectAllGarbage(false);
|
| CHECK_EQ(0, TestResource::dispose_count);
|
| }
|
| - v8::internal::CompilationCache::Clear();
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::CompilationCache::Clear();
|
| + i::Heap::CollectAllGarbage(false);
|
| CHECK_EQ(1, TestResource::dispose_count);
|
| }
|
|
|
| @@ -453,11 +453,11 @@ THREADED_TEST(ScriptMakingExternalAsciiString) {
|
| Local<Value> value = script->Run();
|
| CHECK(value->IsNumber());
|
| CHECK_EQ(7, value->Int32Value());
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::Heap::CollectAllGarbage(false);
|
| CHECK_EQ(0, TestAsciiResource::dispose_count);
|
| }
|
| - v8::internal::CompilationCache::Clear();
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::CompilationCache::Clear();
|
| + i::Heap::CollectAllGarbage(false);
|
| CHECK_EQ(1, TestAsciiResource::dispose_count);
|
| }
|
|
|
| @@ -645,11 +645,11 @@ TEST(ExternalStringWithDisposeHandling) {
|
| Local<Value> value = script->Run();
|
| CHECK(value->IsNumber());
|
| CHECK_EQ(7, value->Int32Value());
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::Heap::CollectAllGarbage(false);
|
| CHECK_EQ(0, TestAsciiResource::dispose_count);
|
| }
|
| - v8::internal::CompilationCache::Clear();
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::CompilationCache::Clear();
|
| + i::Heap::CollectAllGarbage(false);
|
| CHECK_EQ(1, TestAsciiResourceWithDisposeControl::dispose_calls);
|
| CHECK_EQ(0, TestAsciiResource::dispose_count);
|
|
|
| @@ -666,11 +666,11 @@ TEST(ExternalStringWithDisposeHandling) {
|
| Local<Value> value = script->Run();
|
| CHECK(value->IsNumber());
|
| CHECK_EQ(7, value->Int32Value());
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::Heap::CollectAllGarbage(false);
|
| CHECK_EQ(0, TestAsciiResource::dispose_count);
|
| }
|
| - v8::internal::CompilationCache::Clear();
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::CompilationCache::Clear();
|
| + i::Heap::CollectAllGarbage(false);
|
| CHECK_EQ(1, TestAsciiResourceWithDisposeControl::dispose_calls);
|
| CHECK_EQ(1, TestAsciiResource::dispose_count);
|
| }
|
| @@ -708,7 +708,7 @@ THREADED_TEST(StringConcat) {
|
| CHECK(value->IsNumber());
|
| CHECK_EQ(68, value->Int32Value());
|
| }
|
| - v8::internal::CompilationCache::Clear();
|
| + i::CompilationCache::Clear();
|
| i::Heap::CollectAllGarbage(false);
|
| i::Heap::CollectAllGarbage(false);
|
| }
|
| @@ -1881,7 +1881,7 @@ static const char* js_code_causing_out_of_memory =
|
| // that come after them so they cannot run in parallel.
|
| TEST(OutOfMemory) {
|
| // It's not possible to read a snapshot into a heap with different dimensions.
|
| - if (v8::internal::Snapshot::IsEnabled()) return;
|
| + if (i::Snapshot::IsEnabled()) return;
|
| // Set heap limits.
|
| static const int K = 1024;
|
| v8::ResourceConstraints constraints;
|
| @@ -1922,7 +1922,7 @@ v8::Handle<Value> ProvokeOutOfMemory(const v8::Arguments& args) {
|
|
|
| TEST(OutOfMemoryNested) {
|
| // It's not possible to read a snapshot into a heap with different dimensions.
|
| - if (v8::internal::Snapshot::IsEnabled()) return;
|
| + if (i::Snapshot::IsEnabled()) return;
|
| // Set heap limits.
|
| static const int K = 1024;
|
| v8::ResourceConstraints constraints;
|
| @@ -1951,7 +1951,7 @@ TEST(OutOfMemoryNested) {
|
|
|
| TEST(HugeConsStringOutOfMemory) {
|
| // It's not possible to read a snapshot into a heap with different dimensions.
|
| - if (v8::internal::Snapshot::IsEnabled()) return;
|
| + if (i::Snapshot::IsEnabled()) return;
|
| v8::HandleScope scope;
|
| LocalContext context;
|
| // Set heap limits.
|
| @@ -6811,7 +6811,7 @@ static v8::Handle<Value> InterceptorCallICFastApi(Local<String> name,
|
| int* call_count = reinterpret_cast<int*>(v8::External::Unwrap(info.Data()));
|
| ++(*call_count);
|
| if ((*call_count) % 20 == 0) {
|
| - v8::internal::Heap::CollectAllGarbage(true);
|
| + i::Heap::CollectAllGarbage(true);
|
| }
|
| return v8::Handle<Value>();
|
| }
|
| @@ -7620,8 +7620,8 @@ THREADED_TEST(ObjectProtoToString) {
|
|
|
|
|
| bool ApiTestFuzzer::fuzzing_ = false;
|
| -v8::internal::Semaphore* ApiTestFuzzer::all_tests_done_=
|
| - v8::internal::OS::CreateSemaphore(0);
|
| +i::Semaphore* ApiTestFuzzer::all_tests_done_=
|
| + i::OS::CreateSemaphore(0);
|
| int ApiTestFuzzer::active_tests_;
|
| int ApiTestFuzzer::tests_being_run_;
|
| int ApiTestFuzzer::current_;
|
| @@ -7899,7 +7899,7 @@ THREADED_TEST(LockUnlockLock) {
|
|
|
| static int GetGlobalObjectsCount() {
|
| int count = 0;
|
| - v8::internal::HeapIterator it;
|
| + i::HeapIterator it;
|
| for (i::HeapObject* object = it.next(); object != NULL; object = it.next())
|
| if (object->IsJSGlobalObject()) count++;
|
| return count;
|
| @@ -7912,11 +7912,11 @@ static int GetSurvivingGlobalObjectsCount() {
|
| // the first garbage collection but some of the maps have already
|
| // been marked at that point. Therefore some of the maps are not
|
| // collected until the second garbage collection.
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::Heap::CollectAllGarbage(false);
|
| + i::Heap::CollectAllGarbage(false);
|
| int count = GetGlobalObjectsCount();
|
| #ifdef DEBUG
|
| - if (count > 0) v8::internal::Heap::TracePathToGlobal();
|
| + if (count > 0) i::Heap::TracePathToGlobal();
|
| #endif
|
| return count;
|
| }
|
| @@ -10021,7 +10021,7 @@ static void ExternalArrayTestHelper(v8::ExternalArrayType array_type,
|
|
|
|
|
| THREADED_TEST(ExternalByteArray) {
|
| - ExternalArrayTestHelper<v8::internal::ExternalByteArray, int8_t>(
|
| + ExternalArrayTestHelper<i::ExternalByteArray, int8_t>(
|
| v8::kExternalByteArray,
|
| -128,
|
| 127);
|
| @@ -10029,7 +10029,7 @@ THREADED_TEST(ExternalByteArray) {
|
|
|
|
|
| THREADED_TEST(ExternalUnsignedByteArray) {
|
| - ExternalArrayTestHelper<v8::internal::ExternalUnsignedByteArray, uint8_t>(
|
| + ExternalArrayTestHelper<i::ExternalUnsignedByteArray, uint8_t>(
|
| v8::kExternalUnsignedByteArray,
|
| 0,
|
| 255);
|
| @@ -10037,7 +10037,7 @@ THREADED_TEST(ExternalUnsignedByteArray) {
|
|
|
|
|
| THREADED_TEST(ExternalShortArray) {
|
| - ExternalArrayTestHelper<v8::internal::ExternalShortArray, int16_t>(
|
| + ExternalArrayTestHelper<i::ExternalShortArray, int16_t>(
|
| v8::kExternalShortArray,
|
| -32768,
|
| 32767);
|
| @@ -10045,7 +10045,7 @@ THREADED_TEST(ExternalShortArray) {
|
|
|
|
|
| THREADED_TEST(ExternalUnsignedShortArray) {
|
| - ExternalArrayTestHelper<v8::internal::ExternalUnsignedShortArray, uint16_t>(
|
| + ExternalArrayTestHelper<i::ExternalUnsignedShortArray, uint16_t>(
|
| v8::kExternalUnsignedShortArray,
|
| 0,
|
| 65535);
|
| @@ -10053,7 +10053,7 @@ THREADED_TEST(ExternalUnsignedShortArray) {
|
|
|
|
|
| THREADED_TEST(ExternalIntArray) {
|
| - ExternalArrayTestHelper<v8::internal::ExternalIntArray, int32_t>(
|
| + ExternalArrayTestHelper<i::ExternalIntArray, int32_t>(
|
| v8::kExternalIntArray,
|
| INT_MIN, // -2147483648
|
| INT_MAX); // 2147483647
|
| @@ -10061,7 +10061,7 @@ THREADED_TEST(ExternalIntArray) {
|
|
|
|
|
| THREADED_TEST(ExternalUnsignedIntArray) {
|
| - ExternalArrayTestHelper<v8::internal::ExternalUnsignedIntArray, uint32_t>(
|
| + ExternalArrayTestHelper<i::ExternalUnsignedIntArray, uint32_t>(
|
| v8::kExternalUnsignedIntArray,
|
| 0,
|
| UINT_MAX); // 4294967295
|
| @@ -10069,7 +10069,7 @@ THREADED_TEST(ExternalUnsignedIntArray) {
|
|
|
|
|
| THREADED_TEST(ExternalFloatArray) {
|
| - ExternalArrayTestHelper<v8::internal::ExternalFloatArray, float>(
|
| + ExternalArrayTestHelper<i::ExternalFloatArray, float>(
|
| v8::kExternalFloatArray,
|
| -500,
|
| 500);
|
| @@ -10547,7 +10547,7 @@ TEST(Regress528) {
|
| other_context->Enter();
|
| CompileRun(source_simple);
|
| other_context->Exit();
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::Heap::CollectAllGarbage(false);
|
| if (GetGlobalObjectsCount() == 1) break;
|
| }
|
| CHECK_GE(2, gc_count);
|
| @@ -10569,7 +10569,7 @@ TEST(Regress528) {
|
| other_context->Enter();
|
| CompileRun(source_eval);
|
| other_context->Exit();
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::Heap::CollectAllGarbage(false);
|
| if (GetGlobalObjectsCount() == 1) break;
|
| }
|
| CHECK_GE(2, gc_count);
|
| @@ -10596,7 +10596,7 @@ TEST(Regress528) {
|
| other_context->Enter();
|
| CompileRun(source_exception);
|
| other_context->Exit();
|
| - v8::internal::Heap::CollectAllGarbage(false);
|
| + i::Heap::CollectAllGarbage(false);
|
| if (GetGlobalObjectsCount() == 1) break;
|
| }
|
| CHECK_GE(2, gc_count);
|
| @@ -10859,7 +10859,7 @@ THREADED_TEST(AddToJSFunctionResultCache) {
|
| " return 'Different results for ' + key1 + ': ' + r1 + ' vs. ' + r1_;"
|
| " return 'PASSED';"
|
| "})()";
|
| - v8::internal::Heap::ClearJSFunctionResultCaches();
|
| + i::Heap::ClearJSFunctionResultCaches();
|
| ExpectString(code, "PASSED");
|
| }
|
|
|
| @@ -10883,7 +10883,7 @@ THREADED_TEST(FillJSFunctionResultCache) {
|
| " return 'FAILED: k0CacheSize is too small';"
|
| " return 'PASSED';"
|
| "})()";
|
| - v8::internal::Heap::ClearJSFunctionResultCaches();
|
| + i::Heap::ClearJSFunctionResultCaches();
|
| ExpectString(code, "PASSED");
|
| }
|
|
|
| @@ -10908,7 +10908,7 @@ THREADED_TEST(RoundRobinGetFromCache) {
|
| " };"
|
| " return 'PASSED';"
|
| "})()";
|
| - v8::internal::Heap::ClearJSFunctionResultCaches();
|
| + i::Heap::ClearJSFunctionResultCaches();
|
| ExpectString(code, "PASSED");
|
| }
|
|
|
| @@ -10933,7 +10933,7 @@ THREADED_TEST(ReverseGetFromCache) {
|
| " };"
|
| " return 'PASSED';"
|
| "})()";
|
| - v8::internal::Heap::ClearJSFunctionResultCaches();
|
| + i::Heap::ClearJSFunctionResultCaches();
|
| ExpectString(code, "PASSED");
|
| }
|
|
|
| @@ -10951,6 +10951,87 @@ THREADED_TEST(TestEviction) {
|
| " };"
|
| " return 'PASSED';"
|
| "})()";
|
| - v8::internal::Heap::ClearJSFunctionResultCaches();
|
| + i::Heap::ClearJSFunctionResultCaches();
|
| ExpectString(code, "PASSED");
|
| }
|
| +
|
| +
|
| +THREADED_TEST(TwoByteStringInAsciiCons) {
|
| + // See Chromium issue 47824.
|
| + v8::HandleScope scope;
|
| +
|
| + LocalContext context;
|
| + const char* init_code =
|
| + "var str1 = 'abelspendabel';"
|
| + "var str2 = str1 + str1 + str1;"
|
| + "str2;";
|
| + Local<Value> result = CompileRun(init_code);
|
| +
|
| + CHECK(result->IsString());
|
| + i::Handle<i::String> string = v8::Utils::OpenHandle(String::Cast(*result));
|
| + int length = string->length();
|
| + CHECK(string->IsAsciiRepresentation());
|
| +
|
| + FlattenString(string);
|
| + i::Handle<i::String> flat_string = FlattenGetString(string);
|
| +
|
| + CHECK(string->IsAsciiRepresentation());
|
| + CHECK(flat_string->IsAsciiRepresentation());
|
| +
|
| + // Create external resource.
|
| + uint16_t* uc16_buffer = new uint16_t[length + 1];
|
| +
|
| + i::String::WriteToFlat(*flat_string, uc16_buffer, 0, length);
|
| + uc16_buffer[length] = 0;
|
| +
|
| + TestResource resource(uc16_buffer);
|
| +
|
| + flat_string->MakeExternal(&resource);
|
| +
|
| + CHECK(flat_string->IsTwoByteRepresentation());
|
| +
|
| + // At this point, we should have a Cons string which is flat and ASCII,
|
| + // with a first half that is a two-byte string (although it only contains
|
| + // ASCII characters). This is a valid sequence of steps, and it can happen
|
| + // in real pages.
|
| +
|
| + CHECK(string->IsAsciiRepresentation());
|
| + i::ConsString* cons = i::ConsString::cast(*string);
|
| + CHECK_EQ(0, cons->second()->length());
|
| + CHECK(cons->first()->IsTwoByteRepresentation());
|
| +
|
| + // Check that some string operations work.
|
| +
|
| + // Atom RegExp.
|
| + Local<Value> reresult = CompileRun("str2.match(/abel/g).length;");
|
| + CHECK_EQ(6, reresult->Int32Value());
|
| +
|
| + // Nonatom RegExp.
|
| + reresult = CompileRun("str2.match(/abe./g).length;");
|
| + CHECK_EQ(6, reresult->Int32Value());
|
| +
|
| + reresult = CompileRun("str2.search(/bel/g);");
|
| + CHECK_EQ(1, reresult->Int32Value());
|
| +
|
| + reresult = CompileRun("str2.search(/be./g);");
|
| + CHECK_EQ(1, reresult->Int32Value());
|
| +
|
| + ExpectTrue("/bel/g.test(str2);");
|
| +
|
| + ExpectTrue("/be./g.test(str2);");
|
| +
|
| + reresult = CompileRun("/bel/g.exec(str2);");
|
| + CHECK(!reresult->IsNull());
|
| +
|
| + reresult = CompileRun("/be./g.exec(str2);");
|
| + CHECK(!reresult->IsNull());
|
| +
|
| + ExpectString("str2.substring(2, 10);", "elspenda");
|
| +
|
| + ExpectString("str2.substring(2, 20);", "elspendabelabelspe");
|
| +
|
| + ExpectString("str2.charAt(2);", "e");
|
| +
|
| + reresult = CompileRun("str2.charCodeAt(2);");
|
| + CHECK_EQ(static_cast<int32_t>('e'), reresult->Int32Value());
|
| +}
|
|
|