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 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
587 for (unsigned i = 0; i < length; i++) { | 587 for (unsigned i = 0; i < length; i++) { |
588 uc16_buffer[i] = static_cast<i::uc16>(one_byte_source[i]); | 588 uc16_buffer[i] = static_cast<i::uc16>(one_byte_source[i]); |
589 } | 589 } |
590 i::Vector<const char> one_byte_vector(one_byte_source, | 590 i::Vector<const char> one_byte_vector(one_byte_source, |
591 static_cast<int>(length)); | 591 static_cast<int>(length)); |
592 i::Handle<i::String> one_byte_string = | 592 i::Handle<i::String> one_byte_string = |
593 factory->NewStringFromAscii(one_byte_vector).ToHandleChecked(); | 593 factory->NewStringFromAscii(one_byte_vector).ToHandleChecked(); |
594 TestExternalResource resource(uc16_buffer.get(), length); | 594 TestExternalResource resource(uc16_buffer.get(), length); |
595 i::Handle<i::String> uc16_string( | 595 i::Handle<i::String> uc16_string( |
596 factory->NewExternalStringFromTwoByte(&resource).ToHandleChecked()); | 596 factory->NewExternalStringFromTwoByte(&resource).ToHandleChecked()); |
| 597 ScriptResource one_byte_resource(one_byte_source, length); |
| 598 i::Handle<i::String> ext_one_byte_string( |
| 599 factory->NewExternalStringFromOneByte(&one_byte_resource) |
| 600 .ToHandleChecked()); |
597 | 601 |
598 i::ExternalTwoByteStringUtf16CharacterStream uc16_stream( | 602 i::ExternalTwoByteStringUtf16CharacterStream uc16_stream( |
599 i::Handle<i::ExternalTwoByteString>::cast(uc16_string), start, end); | 603 i::Handle<i::ExternalTwoByteString>::cast(uc16_string), start, end); |
| 604 i::ExternalOneByteStringUtf16CharacterStream one_byte_stream( |
| 605 i::Handle<i::ExternalOneByteString>::cast(ext_one_byte_string), start, |
| 606 end); |
600 i::GenericStringUtf16CharacterStream string_stream(one_byte_string, start, | 607 i::GenericStringUtf16CharacterStream string_stream(one_byte_string, start, |
601 end); | 608 end); |
602 i::Utf8ToUtf16CharacterStream utf8_stream( | 609 i::Utf8ToUtf16CharacterStream utf8_stream( |
603 reinterpret_cast<const i::byte*>(one_byte_source), end); | 610 reinterpret_cast<const i::byte*>(one_byte_source), end); |
604 utf8_stream.SeekForward(start); | 611 utf8_stream.SeekForward(start); |
605 | 612 |
606 unsigned i = start; | 613 unsigned i = start; |
607 while (i < end) { | 614 while (i < end) { |
608 // Read streams one char at a time | 615 // Read streams one char at a time |
609 CHECK_EQU(i, uc16_stream.pos()); | 616 CHECK_EQU(i, uc16_stream.pos()); |
610 CHECK_EQU(i, string_stream.pos()); | 617 CHECK_EQU(i, string_stream.pos()); |
611 CHECK_EQU(i, utf8_stream.pos()); | 618 CHECK_EQU(i, utf8_stream.pos()); |
| 619 CHECK_EQU(i, one_byte_stream.pos()); |
612 int32_t c0 = one_byte_source[i]; | 620 int32_t c0 = one_byte_source[i]; |
613 int32_t c1 = uc16_stream.Advance(); | 621 int32_t c1 = uc16_stream.Advance(); |
614 int32_t c2 = string_stream.Advance(); | 622 int32_t c2 = string_stream.Advance(); |
615 int32_t c3 = utf8_stream.Advance(); | 623 int32_t c3 = utf8_stream.Advance(); |
| 624 int32_t c4 = one_byte_stream.Advance(); |
616 i++; | 625 i++; |
617 CHECK_EQ(c0, c1); | 626 CHECK_EQ(c0, c1); |
618 CHECK_EQ(c0, c2); | 627 CHECK_EQ(c0, c2); |
619 CHECK_EQ(c0, c3); | 628 CHECK_EQ(c0, c3); |
| 629 CHECK_EQ(c0, c4); |
620 CHECK_EQU(i, uc16_stream.pos()); | 630 CHECK_EQU(i, uc16_stream.pos()); |
621 CHECK_EQU(i, string_stream.pos()); | 631 CHECK_EQU(i, string_stream.pos()); |
622 CHECK_EQU(i, utf8_stream.pos()); | 632 CHECK_EQU(i, utf8_stream.pos()); |
| 633 CHECK_EQU(i, one_byte_stream.pos()); |
623 } | 634 } |
624 while (i > start + sub_length / 4) { | 635 while (i > start + sub_length / 4) { |
625 // Pushback, re-read, pushback again. | 636 // Pushback, re-read, pushback again. |
626 int32_t c0 = one_byte_source[i - 1]; | 637 int32_t c0 = one_byte_source[i - 1]; |
627 CHECK_EQU(i, uc16_stream.pos()); | 638 CHECK_EQU(i, uc16_stream.pos()); |
628 CHECK_EQU(i, string_stream.pos()); | 639 CHECK_EQU(i, string_stream.pos()); |
629 CHECK_EQU(i, utf8_stream.pos()); | 640 CHECK_EQU(i, utf8_stream.pos()); |
| 641 CHECK_EQU(i, one_byte_stream.pos()); |
630 uc16_stream.PushBack(c0); | 642 uc16_stream.PushBack(c0); |
631 string_stream.PushBack(c0); | 643 string_stream.PushBack(c0); |
632 utf8_stream.PushBack(c0); | 644 utf8_stream.PushBack(c0); |
| 645 one_byte_stream.PushBack(c0); |
633 i--; | 646 i--; |
634 CHECK_EQU(i, uc16_stream.pos()); | 647 CHECK_EQU(i, uc16_stream.pos()); |
635 CHECK_EQU(i, string_stream.pos()); | 648 CHECK_EQU(i, string_stream.pos()); |
636 CHECK_EQU(i, utf8_stream.pos()); | 649 CHECK_EQU(i, utf8_stream.pos()); |
| 650 CHECK_EQU(i, one_byte_stream.pos()); |
637 int32_t c1 = uc16_stream.Advance(); | 651 int32_t c1 = uc16_stream.Advance(); |
638 int32_t c2 = string_stream.Advance(); | 652 int32_t c2 = string_stream.Advance(); |
639 int32_t c3 = utf8_stream.Advance(); | 653 int32_t c3 = utf8_stream.Advance(); |
| 654 int32_t c4 = one_byte_stream.Advance(); |
640 i++; | 655 i++; |
641 CHECK_EQU(i, uc16_stream.pos()); | 656 CHECK_EQU(i, uc16_stream.pos()); |
642 CHECK_EQU(i, string_stream.pos()); | 657 CHECK_EQU(i, string_stream.pos()); |
643 CHECK_EQU(i, utf8_stream.pos()); | 658 CHECK_EQU(i, utf8_stream.pos()); |
| 659 CHECK_EQU(i, one_byte_stream.pos()); |
644 CHECK_EQ(c0, c1); | 660 CHECK_EQ(c0, c1); |
645 CHECK_EQ(c0, c2); | 661 CHECK_EQ(c0, c2); |
646 CHECK_EQ(c0, c3); | 662 CHECK_EQ(c0, c3); |
| 663 CHECK_EQ(c0, c4); |
647 uc16_stream.PushBack(c0); | 664 uc16_stream.PushBack(c0); |
648 string_stream.PushBack(c0); | 665 string_stream.PushBack(c0); |
649 utf8_stream.PushBack(c0); | 666 utf8_stream.PushBack(c0); |
| 667 one_byte_stream.PushBack(c0); |
650 i--; | 668 i--; |
651 CHECK_EQU(i, uc16_stream.pos()); | 669 CHECK_EQU(i, uc16_stream.pos()); |
652 CHECK_EQU(i, string_stream.pos()); | 670 CHECK_EQU(i, string_stream.pos()); |
653 CHECK_EQU(i, utf8_stream.pos()); | 671 CHECK_EQU(i, utf8_stream.pos()); |
| 672 CHECK_EQU(i, one_byte_stream.pos()); |
654 } | 673 } |
655 unsigned halfway = start + sub_length / 2; | 674 unsigned halfway = start + sub_length / 2; |
656 uc16_stream.SeekForward(halfway - i); | 675 uc16_stream.SeekForward(halfway - i); |
657 string_stream.SeekForward(halfway - i); | 676 string_stream.SeekForward(halfway - i); |
658 utf8_stream.SeekForward(halfway - i); | 677 utf8_stream.SeekForward(halfway - i); |
| 678 one_byte_stream.SeekForward(halfway - i); |
659 i = halfway; | 679 i = halfway; |
660 CHECK_EQU(i, uc16_stream.pos()); | 680 CHECK_EQU(i, uc16_stream.pos()); |
661 CHECK_EQU(i, string_stream.pos()); | 681 CHECK_EQU(i, string_stream.pos()); |
662 CHECK_EQU(i, utf8_stream.pos()); | 682 CHECK_EQU(i, utf8_stream.pos()); |
| 683 CHECK_EQU(i, one_byte_stream.pos()); |
663 | 684 |
664 while (i < end) { | 685 while (i < end) { |
665 // Read streams one char at a time | 686 // Read streams one char at a time |
666 CHECK_EQU(i, uc16_stream.pos()); | 687 CHECK_EQU(i, uc16_stream.pos()); |
667 CHECK_EQU(i, string_stream.pos()); | 688 CHECK_EQU(i, string_stream.pos()); |
668 CHECK_EQU(i, utf8_stream.pos()); | 689 CHECK_EQU(i, utf8_stream.pos()); |
| 690 CHECK_EQU(i, one_byte_stream.pos()); |
669 int32_t c0 = one_byte_source[i]; | 691 int32_t c0 = one_byte_source[i]; |
670 int32_t c1 = uc16_stream.Advance(); | 692 int32_t c1 = uc16_stream.Advance(); |
671 int32_t c2 = string_stream.Advance(); | 693 int32_t c2 = string_stream.Advance(); |
672 int32_t c3 = utf8_stream.Advance(); | 694 int32_t c3 = utf8_stream.Advance(); |
| 695 int32_t c4 = one_byte_stream.Advance(); |
673 i++; | 696 i++; |
674 CHECK_EQ(c0, c1); | 697 CHECK_EQ(c0, c1); |
675 CHECK_EQ(c0, c2); | 698 CHECK_EQ(c0, c2); |
676 CHECK_EQ(c0, c3); | 699 CHECK_EQ(c0, c3); |
| 700 CHECK_EQ(c0, c4); |
677 CHECK_EQU(i, uc16_stream.pos()); | 701 CHECK_EQU(i, uc16_stream.pos()); |
678 CHECK_EQU(i, string_stream.pos()); | 702 CHECK_EQU(i, string_stream.pos()); |
679 CHECK_EQU(i, utf8_stream.pos()); | 703 CHECK_EQU(i, utf8_stream.pos()); |
| 704 CHECK_EQU(i, one_byte_stream.pos()); |
680 } | 705 } |
681 | 706 |
682 int32_t c1 = uc16_stream.Advance(); | 707 int32_t c1 = uc16_stream.Advance(); |
683 int32_t c2 = string_stream.Advance(); | 708 int32_t c2 = string_stream.Advance(); |
684 int32_t c3 = utf8_stream.Advance(); | 709 int32_t c3 = utf8_stream.Advance(); |
| 710 int32_t c4 = one_byte_stream.Advance(); |
685 CHECK_LT(c1, 0); | 711 CHECK_LT(c1, 0); |
686 CHECK_LT(c2, 0); | 712 CHECK_LT(c2, 0); |
687 CHECK_LT(c3, 0); | 713 CHECK_LT(c3, 0); |
| 714 CHECK_LT(c4, 0); |
688 } | 715 } |
689 | 716 |
690 | 717 |
691 TEST(CharacterStreams) { | 718 TEST(CharacterStreams) { |
692 v8::Isolate* isolate = CcTest::isolate(); | 719 v8::Isolate* isolate = CcTest::isolate(); |
693 v8::HandleScope handles(isolate); | 720 v8::HandleScope handles(isolate); |
694 v8::Local<v8::Context> context = v8::Context::New(isolate); | 721 v8::Local<v8::Context> context = v8::Context::New(isolate); |
695 v8::Context::Scope context_scope(context); | 722 v8::Context::Scope context_scope(context); |
696 | 723 |
697 TestCharacterStream("abc\0\n\r\x7f", 7); | 724 TestCharacterStream("abc\0\n\r\x7f", 7); |
(...skipping 7261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7959 "(a,);", | 7986 "(a,);", |
7960 "(a,b,c,);", | 7987 "(a,b,c,);", |
7961 NULL | 7988 NULL |
7962 }; | 7989 }; |
7963 // clang-format on | 7990 // clang-format on |
7964 | 7991 |
7965 static const ParserFlag always_flags[] = {kAllowHarmonyTrailingCommas}; | 7992 static const ParserFlag always_flags[] = {kAllowHarmonyTrailingCommas}; |
7966 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, | 7993 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, |
7967 arraysize(always_flags)); | 7994 arraysize(always_flags)); |
7968 } | 7995 } |
OLD | NEW |