| Index: test/cctest/test-code-stub-assembler.cc
|
| diff --git a/test/cctest/test-code-stub-assembler.cc b/test/cctest/test-code-stub-assembler.cc
|
| index 068ef9c3d169205ba7a38bb7ffb807f2c88a0c9e..61c6b7bf7ed33c673e20b6945bc21e06e67700ec 100644
|
| --- a/test/cctest/test-code-stub-assembler.cc
|
| +++ b/test/cctest/test-code-stub-assembler.cc
|
| @@ -180,47 +180,6 @@ TEST(ToString) {
|
| }
|
| }
|
|
|
| -TEST(FlattenString) {
|
| - Isolate* isolate(CcTest::InitIsolateOnce());
|
| - const int kNumParams = 1;
|
| - CodeAssemblerTester data(isolate, kNumParams);
|
| - CodeStubAssembler m(data.state());
|
| - m.Return(m.FlattenString(m.Parameter(0)));
|
| -
|
| - Handle<Code> code = data.GenerateCode();
|
| - FunctionTester ft(code, kNumParams);
|
| -
|
| - Handle<FixedArray> test_cases(isolate->factory()->NewFixedArray(4));
|
| - Handle<String> expected(
|
| - isolate->factory()->InternalizeUtf8String("hello, world!"));
|
| - test_cases->set(0, *expected);
|
| -
|
| - Handle<String> string(
|
| - isolate->factory()->InternalizeUtf8String("filler hello, world! filler"));
|
| - Handle<String> sub_string(
|
| - isolate->factory()->NewProperSubString(string, 7, 20));
|
| - test_cases->set(1, *sub_string);
|
| -
|
| - Handle<String> hello(isolate->factory()->InternalizeUtf8String("hello,"));
|
| - Handle<String> world(isolate->factory()->InternalizeUtf8String(" world!"));
|
| - Handle<String> cons_str(
|
| - isolate->factory()->NewConsString(hello, world).ToHandleChecked());
|
| - test_cases->set(2, *cons_str);
|
| -
|
| - Handle<String> empty(isolate->factory()->InternalizeUtf8String(""));
|
| - Handle<String> fake_cons_str(
|
| - isolate->factory()->NewConsString(expected, empty).ToHandleChecked());
|
| - test_cases->set(3, *fake_cons_str);
|
| -
|
| - for (int i = 0; i < 4; ++i) {
|
| - Handle<String> test = handle(String::cast(test_cases->get(i)));
|
| - Handle<Object> result = ft.Call(test).ToHandleChecked();
|
| - CHECK(result->IsString());
|
| - CHECK(Handle<String>::cast(result)->IsFlat());
|
| - CHECK(String::Equals(Handle<String>::cast(result), expected));
|
| - }
|
| -}
|
| -
|
| TEST(TryToName) {
|
| typedef CodeAssemblerLabel Label;
|
| typedef CodeAssemblerVariable Variable;
|
| @@ -238,22 +197,26 @@ TEST(TryToName) {
|
|
|
| Label passed(&m), failed(&m);
|
| Label if_keyisindex(&m), if_keyisunique(&m), if_bailout(&m);
|
| - Variable var_index(&m, MachineType::PointerRepresentation());
|
| -
|
| - m.TryToName(key, &if_keyisindex, &var_index, &if_keyisunique, &if_bailout);
|
| -
|
| - m.Bind(&if_keyisindex);
|
| - m.GotoUnless(
|
| - m.WordEqual(expected_result, m.SmiConstant(Smi::FromInt(kKeyIsIndex))),
|
| - &failed);
|
| - m.Branch(m.WordEqual(m.SmiUntag(expected_arg), var_index.value()), &passed,
|
| - &failed);
|
| -
|
| - m.Bind(&if_keyisunique);
|
| - m.GotoUnless(
|
| - m.WordEqual(expected_result, m.SmiConstant(Smi::FromInt(kKeyIsUnique))),
|
| - &failed);
|
| - m.Branch(m.WordEqual(expected_arg, key), &passed, &failed);
|
| + {
|
| + Variable var_index(&m, MachineType::PointerRepresentation());
|
| + Variable var_unique(&m, MachineRepresentation::kTagged);
|
| +
|
| + m.TryToName(key, &if_keyisindex, &var_index, &if_keyisunique, &var_unique,
|
| + &if_bailout);
|
| +
|
| + m.Bind(&if_keyisindex);
|
| + m.GotoUnless(m.WordEqual(expected_result,
|
| + m.SmiConstant(Smi::FromInt(kKeyIsIndex))),
|
| + &failed);
|
| + m.Branch(m.WordEqual(m.SmiUntag(expected_arg), var_index.value()),
|
| + &passed, &failed);
|
| +
|
| + m.Bind(&if_keyisunique);
|
| + m.GotoUnless(m.WordEqual(expected_result,
|
| + m.SmiConstant(Smi::FromInt(kKeyIsUnique))),
|
| + &failed);
|
| + m.Branch(m.WordEqual(expected_arg, var_unique.value()), &passed, &failed);
|
| + }
|
|
|
| m.Bind(&if_bailout);
|
| m.Branch(
|
| @@ -349,6 +312,23 @@ TEST(TryToName) {
|
| Handle<Object> key = isolate->factory()->NewStringFromAsciiChecked("test");
|
| ft.CheckTrue(key, expect_bailout);
|
| }
|
| +
|
| + {
|
| + // TryToName(<thin string>) => internalized version.
|
| + Handle<String> s = isolate->factory()->NewStringFromAsciiChecked("foo");
|
| + Handle<String> internalized = isolate->factory()->InternalizeString(s);
|
| + ft.CheckTrue(s, expect_unique, internalized);
|
| + }
|
| +
|
| + {
|
| + // TryToName(<thin two-byte string>) => internalized version.
|
| + uc16 array1[] = {2001, 2002, 2003};
|
| + Vector<const uc16> str1(array1);
|
| + Handle<String> s =
|
| + isolate->factory()->NewStringFromTwoByte(str1).ToHandleChecked();
|
| + Handle<String> internalized = isolate->factory()->InternalizeString(s);
|
| + ft.CheckTrue(s, expect_unique, internalized);
|
| + }
|
| }
|
|
|
| namespace {
|
|
|