OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "platform/globals.h" | 5 #include "platform/globals.h" |
6 | 6 |
7 #include "include/dart_tools_api.h" | 7 #include "include/dart_tools_api.h" |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/class_finalizer.h" | 9 #include "vm/class_finalizer.h" |
10 #include "vm/dart_api_impl.h" | 10 #include "vm/dart_api_impl.h" |
(...skipping 841 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 ForwardList forward_list_; | 852 ForwardList forward_list_; |
853 | 853 |
854 DISALLOW_COPY_AND_ASSIGN(TestSnapshotWriter); | 854 DISALLOW_COPY_AND_ASSIGN(TestSnapshotWriter); |
855 }; | 855 }; |
856 | 856 |
857 | 857 |
858 static void GenerateSourceAndCheck(const Script& script) { | 858 static void GenerateSourceAndCheck(const Script& script) { |
859 // Check if we are able to generate the source from the token stream. | 859 // Check if we are able to generate the source from the token stream. |
860 // Rescan this source and compare the token stream to see if they are | 860 // Rescan this source and compare the token stream to see if they are |
861 // the same. | 861 // the same. |
862 const TokenStream& expected_tokens = TokenStream::Handle(script.tokens()); | 862 Zone* zone = Thread::Current()->zone(); |
| 863 const TokenStream& expected_tokens = |
| 864 TokenStream::Handle(zone, script.tokens()); |
863 TokenStream::Iterator expected_iterator( | 865 TokenStream::Iterator expected_iterator( |
| 866 zone, |
864 expected_tokens, | 867 expected_tokens, |
865 TokenPosition::kMinSource, | 868 TokenPosition::kMinSource, |
866 TokenStream::Iterator::kAllTokens); | 869 TokenStream::Iterator::kAllTokens); |
867 const String& str = String::Handle(expected_tokens.GenerateSource()); | 870 const String& str = String::Handle(zone, expected_tokens.GenerateSource()); |
868 const String& private_key = String::Handle(expected_tokens.PrivateKey()); | 871 const String& private_key = |
| 872 String::Handle(zone, expected_tokens.PrivateKey()); |
869 Scanner scanner(str, private_key); | 873 Scanner scanner(str, private_key); |
870 const TokenStream& reconstructed_tokens = | 874 const TokenStream& reconstructed_tokens = |
871 TokenStream::Handle(TokenStream::New(scanner.GetStream(), | 875 TokenStream::Handle(zone, TokenStream::New(scanner.GetStream(), |
872 private_key, | 876 private_key, |
873 false)); | 877 false)); |
874 expected_iterator.SetCurrentPosition(TokenPosition::kMinSource); | 878 expected_iterator.SetCurrentPosition(TokenPosition::kMinSource); |
875 TokenStream::Iterator reconstructed_iterator( | 879 TokenStream::Iterator reconstructed_iterator( |
| 880 zone, |
876 reconstructed_tokens, | 881 reconstructed_tokens, |
877 TokenPosition::kMinSource, | 882 TokenPosition::kMinSource, |
878 TokenStream::Iterator::kAllTokens); | 883 TokenStream::Iterator::kAllTokens); |
879 Token::Kind expected_kind = expected_iterator.CurrentTokenKind(); | 884 Token::Kind expected_kind = expected_iterator.CurrentTokenKind(); |
880 Token::Kind reconstructed_kind = reconstructed_iterator.CurrentTokenKind(); | 885 Token::Kind reconstructed_kind = reconstructed_iterator.CurrentTokenKind(); |
881 String& expected_literal = String::Handle(); | 886 String& expected_literal = String::Handle(zone); |
882 String& actual_literal = String::Handle(); | 887 String& actual_literal = String::Handle(zone); |
883 while (expected_kind != Token::kEOS && reconstructed_kind != Token::kEOS) { | 888 while (expected_kind != Token::kEOS && reconstructed_kind != Token::kEOS) { |
884 EXPECT_EQ(expected_kind, reconstructed_kind); | 889 EXPECT_EQ(expected_kind, reconstructed_kind); |
885 expected_literal ^= expected_iterator.CurrentLiteral(); | 890 expected_literal ^= expected_iterator.CurrentLiteral(); |
886 actual_literal ^= reconstructed_iterator.CurrentLiteral(); | 891 actual_literal ^= reconstructed_iterator.CurrentLiteral(); |
887 EXPECT_STREQ(expected_literal.ToCString(), actual_literal.ToCString()); | 892 EXPECT_STREQ(expected_literal.ToCString(), actual_literal.ToCString()); |
888 expected_iterator.Advance(); | 893 expected_iterator.Advance(); |
889 reconstructed_iterator.Advance(); | 894 reconstructed_iterator.Advance(); |
890 expected_kind = expected_iterator.CurrentTokenKind(); | 895 expected_kind = expected_iterator.CurrentTokenKind(); |
891 reconstructed_kind = reconstructed_iterator.CurrentTokenKind(); | 896 reconstructed_kind = reconstructed_iterator.CurrentTokenKind(); |
892 } | 897 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
930 " return '''\n" | 935 " return '''\n" |
931 "a b c\n" | 936 "a b c\n" |
932 "d ${d} e\n" | 937 "d ${d} e\n" |
933 "g h i''';\n" | 938 "g h i''';\n" |
934 " }\n" | 939 " }\n" |
935 " static ms6() {\n" | 940 " static ms6() {\n" |
936 " return '\\t \\n \\x00 \\xFF';\n" | 941 " return '\\t \\n \\x00 \\xFF';\n" |
937 " }\n" | 942 " }\n" |
938 "}\n"; | 943 "}\n"; |
939 | 944 |
940 String& url = String::Handle(String::New("dart-test:SerializeScript")); | 945 Zone* zone = thread->zone(); |
941 String& source = String::Handle(String::New(kScriptChars)); | 946 String& url = String::Handle(zone, String::New("dart-test:SerializeScript")); |
942 Script& script = Script::Handle(Script::New(url, | 947 String& source = String::Handle(zone, String::New(kScriptChars)); |
943 source, | 948 Script& script = Script::Handle(zone, Script::New(url, |
944 RawScript::kScriptTag)); | 949 source, |
945 const String& lib_url = String::Handle(Symbols::New(thread, "TestLib")); | 950 RawScript::kScriptTag)); |
946 Library& lib = Library::Handle(Library::New(lib_url)); | 951 const String& lib_url = String::Handle(zone, Symbols::New(thread, "TestLib")); |
| 952 Library& lib = Library::Handle(zone, Library::New(lib_url)); |
947 lib.Register(); | 953 lib.Register(); |
948 EXPECT(CompilerTest::TestCompileScript(lib, script)); | 954 EXPECT(CompilerTest::TestCompileScript(lib, script)); |
949 | 955 |
950 // Write snapshot with script content. | 956 // Write snapshot with script content. |
951 uint8_t* buffer; | 957 uint8_t* buffer; |
952 TestSnapshotWriter writer(&buffer, &malloc_allocator); | 958 TestSnapshotWriter writer(&buffer, &malloc_allocator); |
953 writer.WriteScript(script); | 959 writer.WriteScript(script); |
954 | 960 |
955 // Read object back from the snapshot. | 961 // Read object back from the snapshot. |
956 ScriptSnapshotReader reader(buffer, writer.BytesWritten(), thread); | 962 ScriptSnapshotReader reader(buffer, writer.BytesWritten(), thread); |
957 Script& serialized_script = Script::Handle(thread->zone()); | 963 Script& serialized_script = Script::Handle(zone); |
958 serialized_script ^= reader.ReadObject(); | 964 serialized_script ^= reader.ReadObject(); |
959 | 965 |
960 // Check if the serialized script object matches the original script. | 966 // Check if the serialized script object matches the original script. |
961 String& expected_literal = String::Handle(); | 967 String& expected_literal = String::Handle(zone); |
962 String& actual_literal = String::Handle(); | 968 String& actual_literal = String::Handle(zone); |
963 String& str = String::Handle(); | 969 String& str = String::Handle(zone); |
964 str ^= serialized_script.url(); | 970 str ^= serialized_script.url(); |
965 EXPECT(url.Equals(str)); | 971 EXPECT(url.Equals(str)); |
966 | 972 |
967 const TokenStream& expected_tokens = TokenStream::Handle(script.tokens()); | 973 const TokenStream& expected_tokens = |
| 974 TokenStream::Handle(zone, script.tokens()); |
968 const TokenStream& serialized_tokens = | 975 const TokenStream& serialized_tokens = |
969 TokenStream::Handle(serialized_script.tokens()); | 976 TokenStream::Handle(zone, serialized_script.tokens()); |
970 const ExternalTypedData& expected_data = | 977 const ExternalTypedData& expected_data = |
971 ExternalTypedData::Handle(expected_tokens.GetStream()); | 978 ExternalTypedData::Handle(zone, expected_tokens.GetStream()); |
972 const ExternalTypedData& serialized_data = | 979 const ExternalTypedData& serialized_data = |
973 ExternalTypedData::Handle(serialized_tokens.GetStream()); | 980 ExternalTypedData::Handle(zone, serialized_tokens.GetStream()); |
974 EXPECT_EQ(expected_data.Length(), serialized_data.Length()); | 981 EXPECT_EQ(expected_data.Length(), serialized_data.Length()); |
975 TokenStream::Iterator expected_iterator(expected_tokens, | 982 TokenStream::Iterator expected_iterator(zone, |
| 983 expected_tokens, |
976 TokenPosition::kMinSource); | 984 TokenPosition::kMinSource); |
977 TokenStream::Iterator serialized_iterator(serialized_tokens, | 985 TokenStream::Iterator serialized_iterator(zone, |
| 986 serialized_tokens, |
978 TokenPosition::kMinSource); | 987 TokenPosition::kMinSource); |
979 Token::Kind expected_kind = expected_iterator.CurrentTokenKind(); | 988 Token::Kind expected_kind = expected_iterator.CurrentTokenKind(); |
980 Token::Kind serialized_kind = serialized_iterator.CurrentTokenKind(); | 989 Token::Kind serialized_kind = serialized_iterator.CurrentTokenKind(); |
981 while (expected_kind != Token::kEOS && serialized_kind != Token::kEOS) { | 990 while (expected_kind != Token::kEOS && serialized_kind != Token::kEOS) { |
982 EXPECT_EQ(expected_kind, serialized_kind); | 991 EXPECT_EQ(expected_kind, serialized_kind); |
983 expected_literal ^= expected_iterator.CurrentLiteral(); | 992 expected_literal ^= expected_iterator.CurrentLiteral(); |
984 actual_literal ^= serialized_iterator.CurrentLiteral(); | 993 actual_literal ^= serialized_iterator.CurrentLiteral(); |
985 EXPECT(expected_literal.Equals(actual_literal)); | 994 EXPECT(expected_literal.Equals(actual_literal)); |
986 expected_iterator.Advance(); | 995 expected_iterator.Advance(); |
987 serialized_iterator.Advance(); | 996 serialized_iterator.Advance(); |
(...skipping 2020 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3008 StackZone zone(Thread::Current()); | 3017 StackZone zone(Thread::Current()); |
3009 uint8_t* buffer; | 3018 uint8_t* buffer; |
3010 MessageWriter writer(&buffer, &zone_allocator, true); | 3019 MessageWriter writer(&buffer, &zone_allocator, true); |
3011 writer.WriteInlinedObjectHeader(kOmittedObjectId); | 3020 writer.WriteInlinedObjectHeader(kOmittedObjectId); |
3012 // For performance, we'd like single-byte headers when ids are omitted. | 3021 // For performance, we'd like single-byte headers when ids are omitted. |
3013 // If this starts failing, consider renumbering the snapshot ids. | 3022 // If this starts failing, consider renumbering the snapshot ids. |
3014 EXPECT_EQ(1, writer.BytesWritten()); | 3023 EXPECT_EQ(1, writer.BytesWritten()); |
3015 } | 3024 } |
3016 | 3025 |
3017 } // namespace dart | 3026 } // namespace dart |
OLD | NEW |