Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(201)

Side by Side Diff: test/cctest/test-strings.cc

Issue 223813002: Reland "Return MaybeHandle from NewConsString." (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « test/cctest/test-heap-profiler.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 // Need to balance generation fairly. 440 // Need to balance generation fairly.
441 if (!terminate_left && data->rng_.next(0.5)) { 441 if (!terminate_left && data->rng_.next(0.5)) {
442 left = ConstructRandomString(data, max_recursion - 1); 442 left = ConstructRandomString(data, max_recursion - 1);
443 } 443 }
444 right = ConstructRandomString(data, max_recursion - 1); 444 right = ConstructRandomString(data, max_recursion - 1);
445 } 445 }
446 if (!terminate_left && left.is_null()) { 446 if (!terminate_left && left.is_null()) {
447 left = ConstructRandomString(data, max_recursion - 1); 447 left = ConstructRandomString(data, max_recursion - 1);
448 } 448 }
449 // Build the cons string. 449 // Build the cons string.
450 Handle<String> root = factory->NewConsString(left, right); 450 Handle<String> root = factory->NewConsString(left, right).ToHandleChecked();
451 CHECK(root->IsConsString() && !root->IsFlat()); 451 CHECK(root->IsConsString() && !root->IsFlat());
452 // Special work needed for flat string. 452 // Special work needed for flat string.
453 if (flat) { 453 if (flat) {
454 data->stats_.empty_leaves_++; 454 data->stats_.empty_leaves_++;
455 FlattenString(root); 455 FlattenString(root);
456 CHECK(root->IsConsString() && root->IsFlat()); 456 CHECK(root->IsConsString() && root->IsFlat());
457 } 457 }
458 return root; 458 return root;
459 } 459 }
460 460
461 461
462 static Handle<String> ConstructLeft( 462 static Handle<String> ConstructLeft(
463 ConsStringGenerationData* data, 463 ConsStringGenerationData* data,
464 int depth) { 464 int depth) {
465 Factory* factory = CcTest::i_isolate()->factory(); 465 Factory* factory = CcTest::i_isolate()->factory();
466 Handle<String> answer = factory->NewStringFromAscii(CStrVector("")); 466 Handle<String> answer = factory->NewStringFromAscii(CStrVector(""));
467 data->stats_.leaves_++; 467 data->stats_.leaves_++;
468 for (int i = 0; i < depth; i++) { 468 for (int i = 0; i < depth; i++) {
469 Handle<String> block = data->block(i); 469 Handle<String> block = data->block(i);
470 Handle<String> next = factory->NewConsString(answer, block); 470 Handle<String> next =
471 factory->NewConsString(answer, block).ToHandleChecked();
471 if (next->IsConsString()) data->stats_.leaves_++; 472 if (next->IsConsString()) data->stats_.leaves_++;
472 data->stats_.chars_ += block->length(); 473 data->stats_.chars_ += block->length();
473 answer = next; 474 answer = next;
474 } 475 }
475 data->stats_.left_traversals_ = data->stats_.leaves_ - 2; 476 data->stats_.left_traversals_ = data->stats_.leaves_ - 2;
476 return answer; 477 return answer;
477 } 478 }
478 479
479 480
480 static Handle<String> ConstructRight( 481 static Handle<String> ConstructRight(
481 ConsStringGenerationData* data, 482 ConsStringGenerationData* data,
482 int depth) { 483 int depth) {
483 Factory* factory = CcTest::i_isolate()->factory(); 484 Factory* factory = CcTest::i_isolate()->factory();
484 Handle<String> answer = factory->NewStringFromAscii(CStrVector("")); 485 Handle<String> answer = factory->NewStringFromAscii(CStrVector(""));
485 data->stats_.leaves_++; 486 data->stats_.leaves_++;
486 for (int i = depth - 1; i >= 0; i--) { 487 for (int i = depth - 1; i >= 0; i--) {
487 Handle<String> block = data->block(i); 488 Handle<String> block = data->block(i);
488 Handle<String> next = factory->NewConsString(block, answer); 489 Handle<String> next =
490 factory->NewConsString(block, answer).ToHandleChecked();
489 if (next->IsConsString()) data->stats_.leaves_++; 491 if (next->IsConsString()) data->stats_.leaves_++;
490 data->stats_.chars_ += block->length(); 492 data->stats_.chars_ += block->length();
491 answer = next; 493 answer = next;
492 } 494 }
493 data->stats_.right_traversals_ = data->stats_.leaves_ - 2; 495 data->stats_.right_traversals_ = data->stats_.leaves_ - 2;
494 return answer; 496 return answer;
495 } 497 }
496 498
497 499
498 static Handle<String> ConstructBalancedHelper( 500 static Handle<String> ConstructBalancedHelper(
499 ConsStringGenerationData* data, 501 ConsStringGenerationData* data,
500 int from, 502 int from,
501 int to) { 503 int to) {
502 Factory* factory = CcTest::i_isolate()->factory(); 504 Factory* factory = CcTest::i_isolate()->factory();
503 CHECK(to > from); 505 CHECK(to > from);
504 if (to - from == 1) { 506 if (to - from == 1) {
505 data->stats_.chars_ += data->block(from)->length(); 507 data->stats_.chars_ += data->block(from)->length();
506 return data->block(from); 508 return data->block(from);
507 } 509 }
508 if (to - from == 2) { 510 if (to - from == 2) {
509 data->stats_.chars_ += data->block(from)->length(); 511 data->stats_.chars_ += data->block(from)->length();
510 data->stats_.chars_ += data->block(from+1)->length(); 512 data->stats_.chars_ += data->block(from+1)->length();
511 return factory->NewConsString(data->block(from), data->block(from+1)); 513 return factory->NewConsString(data->block(from), data->block(from+1))
514 .ToHandleChecked();
512 } 515 }
513 Handle<String> part1 = 516 Handle<String> part1 =
514 ConstructBalancedHelper(data, from, from + ((to - from) / 2)); 517 ConstructBalancedHelper(data, from, from + ((to - from) / 2));
515 Handle<String> part2 = 518 Handle<String> part2 =
516 ConstructBalancedHelper(data, from + ((to - from) / 2), to); 519 ConstructBalancedHelper(data, from + ((to - from) / 2), to);
517 if (part1->IsConsString()) data->stats_.left_traversals_++; 520 if (part1->IsConsString()) data->stats_.left_traversals_++;
518 if (part2->IsConsString()) data->stats_.right_traversals_++; 521 if (part2->IsConsString()) data->stats_.right_traversals_++;
519 return factory->NewConsString(part1, part2); 522 return factory->NewConsString(part1, part2).ToHandleChecked();
520 } 523 }
521 524
522 525
523 static Handle<String> ConstructBalanced( 526 static Handle<String> ConstructBalanced(
524 ConsStringGenerationData* data, int depth = DEEP_DEPTH) { 527 ConsStringGenerationData* data, int depth = DEEP_DEPTH) {
525 Handle<String> string = ConstructBalancedHelper(data, 0, depth); 528 Handle<String> string = ConstructBalancedHelper(data, 0, depth);
526 data->stats_.leaves_ = 529 data->stats_.leaves_ =
527 data->stats_.left_traversals_ + data->stats_.right_traversals_ + 2; 530 data->stats_.left_traversals_ + data->stats_.right_traversals_ + 2;
528 return string; 531 return string;
529 } 532 }
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 return ConstructRight(data, 71); 706 return ConstructRight(data, 71);
704 case 3: 707 case 3:
705 return ConstructLeft(data, 10); 708 return ConstructLeft(data, 10);
706 case 4: 709 case 4:
707 return ConstructRight(data, 10); 710 return ConstructRight(data, 10);
708 case 5: 711 case 5:
709 // 2 element balanced tree. 712 // 2 element balanced tree.
710 data->stats_.chars_ += data->block(0)->length(); 713 data->stats_.chars_ += data->block(0)->length();
711 data->stats_.chars_ += data->block(1)->length(); 714 data->stats_.chars_ += data->block(1)->length();
712 data->stats_.leaves_ += 2; 715 data->stats_.leaves_ += 2;
713 return factory->NewConsString(data->block(0), data->block(1)); 716 return factory->NewConsString(data->block(0), data->block(1))
717 .ToHandleChecked();
714 case 6: 718 case 6:
715 // Simple flattened tree. 719 // Simple flattened tree.
716 data->stats_.chars_ += data->block(0)->length(); 720 data->stats_.chars_ += data->block(0)->length();
717 data->stats_.chars_ += data->block(1)->length(); 721 data->stats_.chars_ += data->block(1)->length();
718 data->stats_.leaves_ += 2; 722 data->stats_.leaves_ += 2;
719 data->stats_.empty_leaves_ += 1; 723 data->stats_.empty_leaves_ += 1;
720 { 724 {
721 Handle<String> string = 725 Handle<String> string =
722 factory->NewConsString(data->block(0), data->block(1)); 726 factory->NewConsString(data->block(0), data->block(1))
727 .ToHandleChecked();
723 FlattenString(string); 728 FlattenString(string);
724 return string; 729 return string;
725 } 730 }
726 case 7: 731 case 7:
727 // Left node flattened. 732 // Left node flattened.
728 data->stats_.chars_ += data->block(0)->length(); 733 data->stats_.chars_ += data->block(0)->length();
729 data->stats_.chars_ += data->block(1)->length(); 734 data->stats_.chars_ += data->block(1)->length();
730 data->stats_.chars_ += data->block(2)->length(); 735 data->stats_.chars_ += data->block(2)->length();
731 data->stats_.leaves_ += 3; 736 data->stats_.leaves_ += 3;
732 data->stats_.empty_leaves_ += 1; 737 data->stats_.empty_leaves_ += 1;
733 data->stats_.left_traversals_ += 1; 738 data->stats_.left_traversals_ += 1;
734 { 739 {
735 Handle<String> left = 740 Handle<String> left =
736 factory->NewConsString(data->block(0), data->block(1)); 741 factory->NewConsString(data->block(0), data->block(1))
742 .ToHandleChecked();
737 FlattenString(left); 743 FlattenString(left);
738 return factory->NewConsString(left, data->block(2)); 744 return factory->NewConsString(left, data->block(2)).ToHandleChecked();
739 } 745 }
740 case 8: 746 case 8:
741 // Left node and right node flattened. 747 // Left node and right node flattened.
742 data->stats_.chars_ += data->block(0)->length(); 748 data->stats_.chars_ += data->block(0)->length();
743 data->stats_.chars_ += data->block(1)->length(); 749 data->stats_.chars_ += data->block(1)->length();
744 data->stats_.chars_ += data->block(2)->length(); 750 data->stats_.chars_ += data->block(2)->length();
745 data->stats_.chars_ += data->block(3)->length(); 751 data->stats_.chars_ += data->block(3)->length();
746 data->stats_.leaves_ += 4; 752 data->stats_.leaves_ += 4;
747 data->stats_.empty_leaves_ += 2; 753 data->stats_.empty_leaves_ += 2;
748 data->stats_.left_traversals_ += 1; 754 data->stats_.left_traversals_ += 1;
749 data->stats_.right_traversals_ += 1; 755 data->stats_.right_traversals_ += 1;
750 { 756 {
751 Handle<String> left = 757 Handle<String> left =
752 factory->NewConsString(data->block(0), data->block(1)); 758 factory->NewConsString(data->block(0), data->block(1))
759 .ToHandleChecked();
753 FlattenString(left); 760 FlattenString(left);
754 Handle<String> right = 761 Handle<String> right =
755 factory->NewConsString(data->block(2), data->block(2)); 762 factory->NewConsString(data->block(2), data->block(2))
763 .ToHandleChecked();
756 FlattenString(right); 764 FlattenString(right);
757 return factory->NewConsString(left, right); 765 return factory->NewConsString(left, right).ToHandleChecked();
758 } 766 }
759 } 767 }
760 UNREACHABLE(); 768 UNREACHABLE();
761 return Handle<String>(); 769 return Handle<String>();
762 } 770 }
763 771
764 772
765 TEST(StringCharacterStreamEdgeCases) { 773 TEST(StringCharacterStreamEdgeCases) {
766 printf("TestStringCharacterStreamEdgeCases\n"); 774 printf("TestStringCharacterStreamEdgeCases\n");
767 TestStringCharacterStream( 775 TestStringCharacterStream(
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
859 v8::HandleScope scope(CcTest::isolate()); 867 v8::HandleScope scope(CcTest::isolate());
860 868
861 char* foo = NewArray<char>(DEEP_ASCII_DEPTH); 869 char* foo = NewArray<char>(DEEP_ASCII_DEPTH);
862 for (int i = 0; i < DEEP_ASCII_DEPTH; i++) { 870 for (int i = 0; i < DEEP_ASCII_DEPTH; i++) {
863 foo[i] = "foo "[i % 4]; 871 foo[i] = "foo "[i % 4];
864 } 872 }
865 Handle<String> string = 873 Handle<String> string =
866 factory->NewStringFromAscii(Vector<const char>(foo, DEEP_ASCII_DEPTH)); 874 factory->NewStringFromAscii(Vector<const char>(foo, DEEP_ASCII_DEPTH));
867 Handle<String> foo_string = factory->NewStringFromAscii(CStrVector("foo")); 875 Handle<String> foo_string = factory->NewStringFromAscii(CStrVector("foo"));
868 for (int i = 0; i < DEEP_ASCII_DEPTH; i += 10) { 876 for (int i = 0; i < DEEP_ASCII_DEPTH; i += 10) {
869 string = factory->NewConsString(string, foo_string); 877 string = factory->NewConsString(string, foo_string).ToHandleChecked();
870 } 878 }
871 Handle<String> flat_string = factory->NewConsString(string, foo_string); 879 Handle<String> flat_string =
880 factory->NewConsString(string, foo_string).ToHandleChecked();
872 FlattenString(flat_string); 881 FlattenString(flat_string);
873 882
874 for (int i = 0; i < 500; i++) { 883 for (int i = 0; i < 500; i++) {
875 TraverseFirst(flat_string, string, DEEP_ASCII_DEPTH); 884 TraverseFirst(flat_string, string, DEEP_ASCII_DEPTH);
876 } 885 }
877 DeleteArray<char>(foo); 886 DeleteArray<char>(foo);
878 } 887 }
879 888
880 889
881 TEST(Utf8Conversion) { 890 TEST(Utf8Conversion) {
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
1085 } 1094 }
1086 1095
1087 1096
1088 TEST(SliceFromCons) { 1097 TEST(SliceFromCons) {
1089 FLAG_string_slices = true; 1098 FLAG_string_slices = true;
1090 CcTest::InitializeVM(); 1099 CcTest::InitializeVM();
1091 Factory* factory = CcTest::i_isolate()->factory(); 1100 Factory* factory = CcTest::i_isolate()->factory();
1092 v8::HandleScope scope(CcTest::isolate()); 1101 v8::HandleScope scope(CcTest::isolate());
1093 Handle<String> string = 1102 Handle<String> string =
1094 factory->NewStringFromAscii(CStrVector("parentparentparent")); 1103 factory->NewStringFromAscii(CStrVector("parentparentparent"));
1095 Handle<String> parent = factory->NewConsString(string, string); 1104 Handle<String> parent =
1105 factory->NewConsString(string, string).ToHandleChecked();
1096 CHECK(parent->IsConsString()); 1106 CHECK(parent->IsConsString());
1097 CHECK(!parent->IsFlat()); 1107 CHECK(!parent->IsFlat());
1098 Handle<String> slice = factory->NewSubString(parent, 1, 25); 1108 Handle<String> slice = factory->NewSubString(parent, 1, 25);
1099 // After slicing, the original string becomes a flat cons. 1109 // After slicing, the original string becomes a flat cons.
1100 CHECK(parent->IsFlat()); 1110 CHECK(parent->IsFlat());
1101 CHECK(slice->IsSlicedString()); 1111 CHECK(slice->IsSlicedString());
1102 CHECK_EQ(SlicedString::cast(*slice)->parent(), 1112 CHECK_EQ(SlicedString::cast(*slice)->parent(),
1103 // Parent could have been short-circuited. 1113 // Parent could have been short-circuited.
1104 parent->IsConsString() ? ConsString::cast(*parent)->first() 1114 parent->IsConsString() ? ConsString::cast(*parent)->first()
1105 : *parent); 1115 : *parent);
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
1404 dummy.Dispose(); \ 1414 dummy.Dispose(); \
1405 } 1415 }
1406 1416
1407 INVALID_STRING_TEST(NewStringFromAscii, char) 1417 INVALID_STRING_TEST(NewStringFromAscii, char)
1408 INVALID_STRING_TEST(NewStringFromUtf8, char) 1418 INVALID_STRING_TEST(NewStringFromUtf8, char)
1409 INVALID_STRING_TEST(NewStringFromOneByte, uint8_t) 1419 INVALID_STRING_TEST(NewStringFromOneByte, uint8_t)
1410 INVALID_STRING_TEST(InternalizeOneByteString, uint8_t) 1420 INVALID_STRING_TEST(InternalizeOneByteString, uint8_t)
1411 INVALID_STRING_TEST(InternalizeUtf8String, char) 1421 INVALID_STRING_TEST(InternalizeUtf8String, char)
1412 1422
1413 #undef INVALID_STRING_TEST 1423 #undef INVALID_STRING_TEST
OLDNEW
« no previous file with comments | « test/cctest/test-heap-profiler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698