| 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/clustered_snapshot.h" | 10 #include "vm/clustered_snapshot.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 if (expected.IsBool()) { | 43 if (expected.IsBool()) { |
| 44 if (actual.IsBool()) { | 44 if (actual.IsBool()) { |
| 45 return expected.raw() == actual.raw(); | 45 return expected.raw() == actual.raw(); |
| 46 } | 46 } |
| 47 return false; | 47 return false; |
| 48 } | 48 } |
| 49 return false; | 49 return false; |
| 50 } | 50 } |
| 51 | 51 |
| 52 | 52 |
| 53 static uint8_t* malloc_allocator( | 53 static uint8_t* malloc_allocator(uint8_t* ptr, |
| 54 uint8_t* ptr, intptr_t old_size, intptr_t new_size) { | 54 intptr_t old_size, |
| 55 intptr_t new_size) { |
| 55 return reinterpret_cast<uint8_t*>(realloc(ptr, new_size)); | 56 return reinterpret_cast<uint8_t*>(realloc(ptr, new_size)); |
| 56 } | 57 } |
| 57 | 58 |
| 58 | 59 |
| 59 static uint8_t* zone_allocator( | 60 static uint8_t* zone_allocator(uint8_t* ptr, |
| 60 uint8_t* ptr, intptr_t old_size, intptr_t new_size) { | 61 intptr_t old_size, |
| 62 intptr_t new_size) { |
| 61 Zone* zone = Thread::Current()->zone(); | 63 Zone* zone = Thread::Current()->zone(); |
| 62 return zone->Realloc<uint8_t>(ptr, old_size, new_size); | 64 return zone->Realloc<uint8_t>(ptr, old_size, new_size); |
| 63 } | 65 } |
| 64 | 66 |
| 65 | 67 |
| 66 // Compare two Dart_CObject object graphs rooted in first and | 68 // Compare two Dart_CObject object graphs rooted in first and |
| 67 // second. The second graph will be destroyed by this operation no matter | 69 // second. The second graph will be destroyed by this operation no matter |
| 68 // whether the graphs are equal or not. | 70 // whether the graphs are equal or not. |
| 69 static void CompareDartCObjects(Dart_CObject* first, Dart_CObject* second) { | 71 static void CompareDartCObjects(Dart_CObject* first, Dart_CObject* second) { |
| 70 // Return immediately if entering a cycle. | 72 // Return immediately if entering a cycle. |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 } | 253 } |
| 252 | 254 |
| 253 | 255 |
| 254 void CheckMint(int64_t value) { | 256 void CheckMint(int64_t value) { |
| 255 ApiNativeScope scope; | 257 ApiNativeScope scope; |
| 256 StackZone zone(Thread::Current()); | 258 StackZone zone(Thread::Current()); |
| 257 | 259 |
| 258 Mint& mint = Mint::Handle(); | 260 Mint& mint = Mint::Handle(); |
| 259 mint ^= Integer::New(value); | 261 mint ^= Integer::New(value); |
| 260 Dart_CObject* mint_cobject = SerializeAndDeserializeMint(mint); | 262 Dart_CObject* mint_cobject = SerializeAndDeserializeMint(mint); |
| 261 // On 64-bit platforms mints always require 64-bits as the smi range | 263 // On 64-bit platforms mints always require 64-bits as the smi range |
| 262 // here covers most of the 64-bit range. On 32-bit platforms the smi | 264 // here covers most of the 64-bit range. On 32-bit platforms the smi |
| 263 // range covers most of the 32-bit range and values outside that | 265 // range covers most of the 32-bit range and values outside that |
| 264 // range are also represented as mints. | 266 // range are also represented as mints. |
| 265 #if defined(ARCH_IS_64_BIT) | 267 #if defined(ARCH_IS_64_BIT) |
| 266 EXPECT_EQ(Dart_CObject_kInt64, mint_cobject->type); | 268 EXPECT_EQ(Dart_CObject_kInt64, mint_cobject->type); |
| 267 EXPECT_EQ(value, mint_cobject->value.as_int64); | 269 EXPECT_EQ(value, mint_cobject->value.as_int64); |
| 268 #else | 270 #else |
| 269 if (kMinInt32 < value && value < kMaxInt32) { | 271 if (kMinInt32 < value && value < kMaxInt32) { |
| 270 EXPECT_EQ(Dart_CObject_kInt32, mint_cobject->type); | 272 EXPECT_EQ(Dart_CObject_kInt32, mint_cobject->type); |
| 271 EXPECT_EQ(value, mint_cobject->value.as_int32); | 273 EXPECT_EQ(value, mint_cobject->value.as_int32); |
| 272 } else { | 274 } else { |
| 273 EXPECT_EQ(Dart_CObject_kInt64, mint_cobject->type); | 275 EXPECT_EQ(Dart_CObject_kInt64, mint_cobject->type); |
| 274 EXPECT_EQ(value, mint_cobject->value.as_int64); | 276 EXPECT_EQ(value, mint_cobject->value.as_int64); |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 550 Dart_CObject* root = api_reader.ReadMessage(); | 552 Dart_CObject* root = api_reader.ReadMessage(); |
| 551 EXPECT_EQ(Dart_CObject_kString, root->type); | 553 EXPECT_EQ(Dart_CObject_kString, root->type); |
| 552 EXPECT_STREQ(cstr, root->value.as_string); | 554 EXPECT_STREQ(cstr, root->value.as_string); |
| 553 CheckEncodeDecodeMessage(root); | 555 CheckEncodeDecodeMessage(root); |
| 554 } | 556 } |
| 555 | 557 |
| 556 | 558 |
| 557 TEST_CASE(SerializeString) { | 559 TEST_CASE(SerializeString) { |
| 558 TestString("This string shall be serialized"); | 560 TestString("This string shall be serialized"); |
| 559 TestString("æøå"); // This file is UTF-8 encoded. | 561 TestString("æøå"); // This file is UTF-8 encoded. |
| 560 const char* data = "\x01" | 562 const char* data = |
| 561 "\x7F" | 563 "\x01" |
| 562 "\xC2\x80" // U+0080 | 564 "\x7F" |
| 563 "\xDF\xBF" // U+07FF | 565 "\xC2\x80" // U+0080 |
| 564 "\xE0\xA0\x80" // U+0800 | 566 "\xDF\xBF" // U+07FF |
| 565 "\xEF\xBF\xBF"; // U+FFFF | 567 "\xE0\xA0\x80" // U+0800 |
| 568 "\xEF\xBF\xBF"; // U+FFFF |
| 566 | 569 |
| 567 TestString(data); | 570 TestString(data); |
| 568 // TODO(sgjesse): Add tests with non-BMP characters. | 571 // TODO(sgjesse): Add tests with non-BMP characters. |
| 569 } | 572 } |
| 570 | 573 |
| 571 | 574 |
| 572 TEST_CASE(SerializeArray) { | 575 TEST_CASE(SerializeArray) { |
| 573 // Write snapshot with object content. | 576 // Write snapshot with object content. |
| 574 const int kArrayLength = 10; | 577 const int kArrayLength = 10; |
| 575 Array& array = Array::Handle(Array::New(kArrayLength)); | 578 Array& array = Array::Handle(Array::New(kArrayLength)); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 609 root.type = Dart_CObject_kArray; | 612 root.type = Dart_CObject_kArray; |
| 610 root.value.as_array.length = Array::kMaxElements + 1; | 613 root.value.as_array.length = Array::kMaxElements + 1; |
| 611 root.value.as_array.values = NULL; | 614 root.value.as_array.values = NULL; |
| 612 ExpectEncodeFail(&root); | 615 ExpectEncodeFail(&root); |
| 613 } | 616 } |
| 614 | 617 |
| 615 | 618 |
| 616 TEST_CASE(FailSerializeLargeNestedArray) { | 619 TEST_CASE(FailSerializeLargeNestedArray) { |
| 617 Dart_CObject parent; | 620 Dart_CObject parent; |
| 618 Dart_CObject child; | 621 Dart_CObject child; |
| 619 Dart_CObject* values[1] = { &child }; | 622 Dart_CObject* values[1] = {&child}; |
| 620 | 623 |
| 621 parent.type = Dart_CObject_kArray; | 624 parent.type = Dart_CObject_kArray; |
| 622 parent.value.as_array.length = 1; | 625 parent.value.as_array.length = 1; |
| 623 parent.value.as_array.values = values; | 626 parent.value.as_array.values = values; |
| 624 child.type = Dart_CObject_kArray; | 627 child.type = Dart_CObject_kArray; |
| 625 child.value.as_array.length = Array::kMaxElements + 1; | 628 child.value.as_array.length = Array::kMaxElements + 1; |
| 626 ExpectEncodeFail(&parent); | 629 ExpectEncodeFail(&parent); |
| 627 } | 630 } |
| 628 | 631 |
| 629 | 632 |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 726 } \ | 729 } \ |
| 727 uint8_t* buffer; \ | 730 uint8_t* buffer; \ |
| 728 MessageWriter writer(&buffer, &zone_allocator, true); \ | 731 MessageWriter writer(&buffer, &zone_allocator, true); \ |
| 729 writer.WriteMessage(array); \ | 732 writer.WriteMessage(array); \ |
| 730 intptr_t buffer_len = writer.BytesWritten(); \ | 733 intptr_t buffer_len = writer.BytesWritten(); \ |
| 731 MessageSnapshotReader reader(buffer, buffer_len, thread); \ | 734 MessageSnapshotReader reader(buffer, buffer_len, thread); \ |
| 732 TypedData& serialized_array = TypedData::Handle(); \ | 735 TypedData& serialized_array = TypedData::Handle(); \ |
| 733 serialized_array ^= reader.ReadObject(); \ | 736 serialized_array ^= reader.ReadObject(); \ |
| 734 for (int i = 0; i < kArrayLength; i++) { \ | 737 for (int i = 0; i < kArrayLength; i++) { \ |
| 735 EXPECT_EQ(static_cast<ctype>(i), \ | 738 EXPECT_EQ(static_cast<ctype>(i), \ |
| 736 serialized_array.Get##darttype(i*scale)); \ | 739 serialized_array.Get##darttype(i* scale)); \ |
| 737 } \ | 740 } \ |
| 738 } | 741 } |
| 739 | 742 |
| 740 | 743 |
| 741 #define TEST_EXTERNAL_TYPED_ARRAY(darttype, ctype) \ | 744 #define TEST_EXTERNAL_TYPED_ARRAY(darttype, ctype) \ |
| 742 { \ | 745 { \ |
| 743 StackZone zone(thread); \ | 746 StackZone zone(thread); \ |
| 744 ctype data[] = { 0, 11, 22, 33, 44, 55, 66, 77 }; \ | 747 ctype data[] = {0, 11, 22, 33, 44, 55, 66, 77}; \ |
| 745 intptr_t length = ARRAY_SIZE(data); \ | 748 intptr_t length = ARRAY_SIZE(data); \ |
| 746 ExternalTypedData& array = ExternalTypedData::Handle( \ | 749 ExternalTypedData& array = ExternalTypedData::Handle( \ |
| 747 ExternalTypedData::New(kExternalTypedData##darttype##ArrayCid, \ | 750 ExternalTypedData::New(kExternalTypedData##darttype##ArrayCid, \ |
| 748 reinterpret_cast<uint8_t*>(data), length)); \ | 751 reinterpret_cast<uint8_t*>(data), length)); \ |
| 749 intptr_t scale = array.ElementSizeInBytes(); \ | 752 intptr_t scale = array.ElementSizeInBytes(); \ |
| 750 uint8_t* buffer; \ | 753 uint8_t* buffer; \ |
| 751 MessageWriter writer(&buffer, &zone_allocator, true); \ | 754 MessageWriter writer(&buffer, &zone_allocator, true); \ |
| 752 writer.WriteMessage(array); \ | 755 writer.WriteMessage(array); \ |
| 753 intptr_t buffer_len = writer.BytesWritten(); \ | 756 intptr_t buffer_len = writer.BytesWritten(); \ |
| 754 MessageSnapshotReader reader(buffer, buffer_len, thread); \ | 757 MessageSnapshotReader reader(buffer, buffer_len, thread); \ |
| 755 TypedData& serialized_array = TypedData::Handle(); \ | 758 TypedData& serialized_array = TypedData::Handle(); \ |
| 756 serialized_array ^= reader.ReadObject(); \ | 759 serialized_array ^= reader.ReadObject(); \ |
| 757 for (int i = 0; i < length; i++) { \ | 760 for (int i = 0; i < length; i++) { \ |
| 758 EXPECT_EQ(static_cast<ctype>(data[i]), \ | 761 EXPECT_EQ(static_cast<ctype>(data[i]), \ |
| 759 serialized_array.Get##darttype(i*scale)); \ | 762 serialized_array.Get##darttype(i* scale)); \ |
| 760 } \ | 763 } \ |
| 761 } | 764 } |
| 762 | 765 |
| 763 | 766 |
| 764 TEST_CASE(SerializeTypedArray) { | 767 TEST_CASE(SerializeTypedArray) { |
| 765 TEST_TYPED_ARRAY(Int8, int8_t); | 768 TEST_TYPED_ARRAY(Int8, int8_t); |
| 766 TEST_TYPED_ARRAY(Uint8, uint8_t); | 769 TEST_TYPED_ARRAY(Uint8, uint8_t); |
| 767 TEST_TYPED_ARRAY(Int16, int16_t); | 770 TEST_TYPED_ARRAY(Int16, int16_t); |
| 768 TEST_TYPED_ARRAY(Uint16, uint16_t); | 771 TEST_TYPED_ARRAY(Uint16, uint16_t); |
| 769 TEST_TYPED_ARRAY(Int32, int32_t); | 772 TEST_TYPED_ARRAY(Int32, int32_t); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 825 Snapshot::kScript, | 828 Snapshot::kScript, |
| 826 buffer, | 829 buffer, |
| 827 alloc, | 830 alloc, |
| 828 kInitialSize, | 831 kInitialSize, |
| 829 &forward_list_, | 832 &forward_list_, |
| 830 true /* can_send_any_object */), | 833 true /* can_send_any_object */), |
| 831 forward_list_(thread(), kMaxPredefinedObjectIds) { | 834 forward_list_(thread(), kMaxPredefinedObjectIds) { |
| 832 ASSERT(buffer != NULL); | 835 ASSERT(buffer != NULL); |
| 833 ASSERT(alloc != NULL); | 836 ASSERT(alloc != NULL); |
| 834 } | 837 } |
| 835 ~TestSnapshotWriter() { } | 838 ~TestSnapshotWriter() {} |
| 836 | 839 |
| 837 // Writes just a script object | 840 // Writes just a script object |
| 838 void WriteScript(const Script& script) { | 841 void WriteScript(const Script& script) { WriteObject(script.raw()); } |
| 839 WriteObject(script.raw()); | |
| 840 } | |
| 841 | 842 |
| 842 private: | 843 private: |
| 843 ForwardList forward_list_; | 844 ForwardList forward_list_; |
| 844 | 845 |
| 845 DISALLOW_COPY_AND_ASSIGN(TestSnapshotWriter); | 846 DISALLOW_COPY_AND_ASSIGN(TestSnapshotWriter); |
| 846 }; | 847 }; |
| 847 | 848 |
| 848 | 849 |
| 849 static void GenerateSourceAndCheck(const Script& script) { | 850 static void GenerateSourceAndCheck(const Script& script) { |
| 850 // Check if we are able to generate the source from the token stream. | 851 // Check if we are able to generate the source from the token stream. |
| 851 // Rescan this source and compare the token stream to see if they are | 852 // Rescan this source and compare the token stream to see if they are |
| 852 // the same. | 853 // the same. |
| 853 Zone* zone = Thread::Current()->zone(); | 854 Zone* zone = Thread::Current()->zone(); |
| 854 const TokenStream& expected_tokens = | 855 const TokenStream& expected_tokens = |
| 855 TokenStream::Handle(zone, script.tokens()); | 856 TokenStream::Handle(zone, script.tokens()); |
| 856 TokenStream::Iterator expected_iterator( | 857 TokenStream::Iterator expected_iterator(zone, expected_tokens, |
| 857 zone, | 858 TokenPosition::kMinSource, |
| 858 expected_tokens, | 859 TokenStream::Iterator::kAllTokens); |
| 859 TokenPosition::kMinSource, | |
| 860 TokenStream::Iterator::kAllTokens); | |
| 861 const String& str = String::Handle(zone, expected_tokens.GenerateSource()); | 860 const String& str = String::Handle(zone, expected_tokens.GenerateSource()); |
| 862 const String& private_key = | 861 const String& private_key = |
| 863 String::Handle(zone, expected_tokens.PrivateKey()); | 862 String::Handle(zone, expected_tokens.PrivateKey()); |
| 864 const TokenStream& reconstructed_tokens = | 863 const TokenStream& reconstructed_tokens = |
| 865 TokenStream::Handle(zone, TokenStream::New(str, | 864 TokenStream::Handle(zone, TokenStream::New(str, private_key, false)); |
| 866 private_key, | |
| 867 false)); | |
| 868 expected_iterator.SetCurrentPosition(TokenPosition::kMinSource); | 865 expected_iterator.SetCurrentPosition(TokenPosition::kMinSource); |
| 869 TokenStream::Iterator reconstructed_iterator( | 866 TokenStream::Iterator reconstructed_iterator( |
| 870 zone, | 867 zone, reconstructed_tokens, TokenPosition::kMinSource, |
| 871 reconstructed_tokens, | |
| 872 TokenPosition::kMinSource, | |
| 873 TokenStream::Iterator::kAllTokens); | 868 TokenStream::Iterator::kAllTokens); |
| 874 Token::Kind expected_kind = expected_iterator.CurrentTokenKind(); | 869 Token::Kind expected_kind = expected_iterator.CurrentTokenKind(); |
| 875 Token::Kind reconstructed_kind = reconstructed_iterator.CurrentTokenKind(); | 870 Token::Kind reconstructed_kind = reconstructed_iterator.CurrentTokenKind(); |
| 876 String& expected_literal = String::Handle(zone); | 871 String& expected_literal = String::Handle(zone); |
| 877 String& actual_literal = String::Handle(zone); | 872 String& actual_literal = String::Handle(zone); |
| 878 while (expected_kind != Token::kEOS && reconstructed_kind != Token::kEOS) { | 873 while (expected_kind != Token::kEOS && reconstructed_kind != Token::kEOS) { |
| 879 EXPECT_EQ(expected_kind, reconstructed_kind); | 874 EXPECT_EQ(expected_kind, reconstructed_kind); |
| 880 expected_literal ^= expected_iterator.CurrentLiteral(); | 875 expected_literal ^= expected_iterator.CurrentLiteral(); |
| 881 actual_literal ^= reconstructed_iterator.CurrentLiteral(); | 876 actual_literal ^= reconstructed_iterator.CurrentLiteral(); |
| 882 EXPECT_STREQ(expected_literal.ToCString(), actual_literal.ToCString()); | 877 EXPECT_STREQ(expected_literal.ToCString(), actual_literal.ToCString()); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 928 "g h i''';\n" | 923 "g h i''';\n" |
| 929 " }\n" | 924 " }\n" |
| 930 " static ms6() {\n" | 925 " static ms6() {\n" |
| 931 " return '\\t \\n \\x00 \\xFF';\n" | 926 " return '\\t \\n \\x00 \\xFF';\n" |
| 932 " }\n" | 927 " }\n" |
| 933 "}\n"; | 928 "}\n"; |
| 934 | 929 |
| 935 Zone* zone = thread->zone(); | 930 Zone* zone = thread->zone(); |
| 936 String& url = String::Handle(zone, String::New("dart-test:SerializeScript")); | 931 String& url = String::Handle(zone, String::New("dart-test:SerializeScript")); |
| 937 String& source = String::Handle(zone, String::New(kScriptChars)); | 932 String& source = String::Handle(zone, String::New(kScriptChars)); |
| 938 Script& script = Script::Handle(zone, Script::New(url, | 933 Script& script = |
| 939 source, | 934 Script::Handle(zone, Script::New(url, source, RawScript::kScriptTag)); |
| 940 RawScript::kScriptTag)); | |
| 941 const String& lib_url = String::Handle(zone, Symbols::New(thread, "TestLib")); | 935 const String& lib_url = String::Handle(zone, Symbols::New(thread, "TestLib")); |
| 942 Library& lib = Library::Handle(zone, Library::New(lib_url)); | 936 Library& lib = Library::Handle(zone, Library::New(lib_url)); |
| 943 lib.Register(thread); | 937 lib.Register(thread); |
| 944 EXPECT(CompilerTest::TestCompileScript(lib, script)); | 938 EXPECT(CompilerTest::TestCompileScript(lib, script)); |
| 945 | 939 |
| 946 // Write snapshot with script content. | 940 // Write snapshot with script content. |
| 947 uint8_t* buffer; | 941 uint8_t* buffer; |
| 948 TestSnapshotWriter writer(&buffer, &malloc_allocator); | 942 TestSnapshotWriter writer(&buffer, &malloc_allocator); |
| 949 writer.WriteScript(script); | 943 writer.WriteScript(script); |
| 950 | 944 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 962 | 956 |
| 963 const TokenStream& expected_tokens = | 957 const TokenStream& expected_tokens = |
| 964 TokenStream::Handle(zone, script.tokens()); | 958 TokenStream::Handle(zone, script.tokens()); |
| 965 const TokenStream& serialized_tokens = | 959 const TokenStream& serialized_tokens = |
| 966 TokenStream::Handle(zone, serialized_script.tokens()); | 960 TokenStream::Handle(zone, serialized_script.tokens()); |
| 967 const ExternalTypedData& expected_data = | 961 const ExternalTypedData& expected_data = |
| 968 ExternalTypedData::Handle(zone, expected_tokens.GetStream()); | 962 ExternalTypedData::Handle(zone, expected_tokens.GetStream()); |
| 969 const ExternalTypedData& serialized_data = | 963 const ExternalTypedData& serialized_data = |
| 970 ExternalTypedData::Handle(zone, serialized_tokens.GetStream()); | 964 ExternalTypedData::Handle(zone, serialized_tokens.GetStream()); |
| 971 EXPECT_EQ(expected_data.Length(), serialized_data.Length()); | 965 EXPECT_EQ(expected_data.Length(), serialized_data.Length()); |
| 972 TokenStream::Iterator expected_iterator(zone, | 966 TokenStream::Iterator expected_iterator(zone, expected_tokens, |
| 973 expected_tokens, | |
| 974 TokenPosition::kMinSource); | 967 TokenPosition::kMinSource); |
| 975 TokenStream::Iterator serialized_iterator(zone, | 968 TokenStream::Iterator serialized_iterator(zone, serialized_tokens, |
| 976 serialized_tokens, | |
| 977 TokenPosition::kMinSource); | 969 TokenPosition::kMinSource); |
| 978 Token::Kind expected_kind = expected_iterator.CurrentTokenKind(); | 970 Token::Kind expected_kind = expected_iterator.CurrentTokenKind(); |
| 979 Token::Kind serialized_kind = serialized_iterator.CurrentTokenKind(); | 971 Token::Kind serialized_kind = serialized_iterator.CurrentTokenKind(); |
| 980 while (expected_kind != Token::kEOS && serialized_kind != Token::kEOS) { | 972 while (expected_kind != Token::kEOS && serialized_kind != Token::kEOS) { |
| 981 EXPECT_EQ(expected_kind, serialized_kind); | 973 EXPECT_EQ(expected_kind, serialized_kind); |
| 982 expected_literal ^= expected_iterator.CurrentLiteral(); | 974 expected_literal ^= expected_iterator.CurrentLiteral(); |
| 983 actual_literal ^= serialized_iterator.CurrentLiteral(); | 975 actual_literal ^= serialized_iterator.CurrentLiteral(); |
| 984 EXPECT(expected_literal.Equals(actual_literal)); | 976 EXPECT(expected_literal.Equals(actual_literal)); |
| 985 expected_iterator.Advance(); | 977 expected_iterator.Advance(); |
| 986 serialized_iterator.Advance(); | 978 serialized_iterator.Advance(); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1027 uint8_t* script_snapshot = NULL; | 1019 uint8_t* script_snapshot = NULL; |
| 1028 | 1020 |
| 1029 bool saved_load_deferred_eagerly_mode = FLAG_load_deferred_eagerly; | 1021 bool saved_load_deferred_eagerly_mode = FLAG_load_deferred_eagerly; |
| 1030 FLAG_load_deferred_eagerly = true; | 1022 FLAG_load_deferred_eagerly = true; |
| 1031 { | 1023 { |
| 1032 // Start an Isolate, and create a full snapshot of it. | 1024 // Start an Isolate, and create a full snapshot of it. |
| 1033 TestIsolateScope __test_isolate__; | 1025 TestIsolateScope __test_isolate__; |
| 1034 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. | 1026 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. |
| 1035 | 1027 |
| 1036 // Write out the script snapshot. | 1028 // Write out the script snapshot. |
| 1037 result = Dart_CreateSnapshot(NULL, | 1029 result = Dart_CreateSnapshot(NULL, &vm_isolate_snapshot_size, |
| 1038 &vm_isolate_snapshot_size, | 1030 &isolate_snapshot, &isolate_snapshot_size); |
| 1039 &isolate_snapshot, | |
| 1040 &isolate_snapshot_size); | |
| 1041 EXPECT_VALID(result); | 1031 EXPECT_VALID(result); |
| 1042 full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size)); | 1032 full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size)); |
| 1043 memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size); | 1033 memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size); |
| 1044 Dart_ExitScope(); | 1034 Dart_ExitScope(); |
| 1045 } | 1035 } |
| 1046 FLAG_load_deferred_eagerly = saved_load_deferred_eagerly_mode; | 1036 FLAG_load_deferred_eagerly = saved_load_deferred_eagerly_mode; |
| 1047 | 1037 |
| 1048 { | 1038 { |
| 1049 // Now Create an Isolate using the full snapshot and load the | 1039 // Now Create an Isolate using the full snapshot and load the |
| 1050 // script and execute it. | 1040 // script and execute it. |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1115 EXPECT(!script.IsNull()); | 1105 EXPECT(!script.IsNull()); |
| 1116 uri = script.url(); | 1106 uri = script.url(); |
| 1117 OS::Print("Generating source for part: %s\n", uri.ToCString()); | 1107 OS::Print("Generating source for part: %s\n", uri.ToCString()); |
| 1118 GenerateSourceAndCheck(script); | 1108 GenerateSourceAndCheck(script); |
| 1119 } | 1109 } |
| 1120 } | 1110 } |
| 1121 | 1111 |
| 1122 VM_TEST_CASE(GenerateSource) { | 1112 VM_TEST_CASE(GenerateSource) { |
| 1123 Zone* zone = thread->zone(); | 1113 Zone* zone = thread->zone(); |
| 1124 Isolate* isolate = thread->isolate(); | 1114 Isolate* isolate = thread->isolate(); |
| 1125 const GrowableObjectArray& libs = GrowableObjectArray::Handle( | 1115 const GrowableObjectArray& libs = |
| 1126 zone, isolate->object_store()->libraries()); | 1116 GrowableObjectArray::Handle(zone, isolate->object_store()->libraries()); |
| 1127 Library& lib = Library::Handle(); | 1117 Library& lib = Library::Handle(); |
| 1128 String& uri = String::Handle(); | 1118 String& uri = String::Handle(); |
| 1129 for (intptr_t i = 0; i < libs.Length(); i++) { | 1119 for (intptr_t i = 0; i < libs.Length(); i++) { |
| 1130 lib ^= libs.At(i); | 1120 lib ^= libs.At(i); |
| 1131 EXPECT(!lib.IsNull()); | 1121 EXPECT(!lib.IsNull()); |
| 1132 uri = lib.url(); | 1122 uri = lib.url(); |
| 1133 OS::Print("Generating source for library: %s\n", uri.ToCString()); | 1123 OS::Print("Generating source for library: %s\n", uri.ToCString()); |
| 1134 IterateScripts(lib); | 1124 IterateScripts(lib); |
| 1135 } | 1125 } |
| 1136 } | 1126 } |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1175 HandleScope scope(thread); | 1165 HandleScope scope(thread); |
| 1176 | 1166 |
| 1177 // Create a test library and Load up a test script in it. | 1167 // Create a test library and Load up a test script in it. |
| 1178 TestCase::LoadTestScript(kScriptChars, NULL); | 1168 TestCase::LoadTestScript(kScriptChars, NULL); |
| 1179 EXPECT_VALID(Api::CheckAndFinalizePendingClasses(thread)); | 1169 EXPECT_VALID(Api::CheckAndFinalizePendingClasses(thread)); |
| 1180 timer1.Stop(); | 1170 timer1.Stop(); |
| 1181 OS::PrintErr("Without Snapshot: %" Pd64 "us\n", timer1.TotalElapsedTime()); | 1171 OS::PrintErr("Without Snapshot: %" Pd64 "us\n", timer1.TotalElapsedTime()); |
| 1182 | 1172 |
| 1183 // Write snapshot with object content. | 1173 // Write snapshot with object content. |
| 1184 { | 1174 { |
| 1185 FullSnapshotWriter writer(Snapshot::kCore, | 1175 FullSnapshotWriter writer(Snapshot::kCore, NULL, &isolate_snapshot_buffer, |
| 1186 NULL, | |
| 1187 &isolate_snapshot_buffer, | |
| 1188 &malloc_allocator, | 1176 &malloc_allocator, |
| 1189 NULL /* instructions_writer */); | 1177 NULL /* instructions_writer */); |
| 1190 writer.WriteFullSnapshot(); | 1178 writer.WriteFullSnapshot(); |
| 1191 } | 1179 } |
| 1192 } | 1180 } |
| 1193 | 1181 |
| 1194 // Now Create another isolate using the snapshot and execute a method | 1182 // Now Create another isolate using the snapshot and execute a method |
| 1195 // from the script. | 1183 // from the script. |
| 1196 Timer timer2(true, "Snapshot_test"); | 1184 Timer timer2(true, "Snapshot_test"); |
| 1197 timer2.Start(); | 1185 timer2.Start(); |
| 1198 TestCase::CreateTestIsolateFromSnapshot(isolate_snapshot_buffer); | 1186 TestCase::CreateTestIsolateFromSnapshot(isolate_snapshot_buffer); |
| 1199 { | 1187 { |
| 1200 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. | 1188 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. |
| 1201 timer2.Stop(); | 1189 timer2.Stop(); |
| 1202 OS::PrintErr("From Snapshot: %" Pd64 "us\n", timer2.TotalElapsedTime()); | 1190 OS::PrintErr("From Snapshot: %" Pd64 "us\n", timer2.TotalElapsedTime()); |
| 1203 | 1191 |
| 1204 // Invoke a function which returns an object. | 1192 // Invoke a function which returns an object. |
| 1205 Dart_Handle cls = | 1193 Dart_Handle cls = Dart_GetClass(TestCase::lib(), NewString("FieldsTest")); |
| 1206 Dart_GetClass(TestCase::lib(), NewString("FieldsTest")); | |
| 1207 result = Dart_Invoke(cls, NewString("testMain"), 0, NULL); | 1194 result = Dart_Invoke(cls, NewString("testMain"), 0, NULL); |
| 1208 EXPECT_VALID(result); | 1195 EXPECT_VALID(result); |
| 1209 Dart_ExitScope(); | 1196 Dart_ExitScope(); |
| 1210 } | 1197 } |
| 1211 Dart_ShutdownIsolate(); | 1198 Dart_ShutdownIsolate(); |
| 1212 free(isolate_snapshot_buffer); | 1199 free(isolate_snapshot_buffer); |
| 1213 } | 1200 } |
| 1214 | 1201 |
| 1215 | 1202 |
| 1216 UNIT_TEST_CASE(FullSnapshot1) { | 1203 UNIT_TEST_CASE(FullSnapshot1) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1235 HandleScope scope(thread); | 1222 HandleScope scope(thread); |
| 1236 | 1223 |
| 1237 // Create a test library and Load up a test script in it. | 1224 // Create a test library and Load up a test script in it. |
| 1238 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 1225 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
| 1239 EXPECT_VALID(Api::CheckAndFinalizePendingClasses(thread)); | 1226 EXPECT_VALID(Api::CheckAndFinalizePendingClasses(thread)); |
| 1240 timer1.Stop(); | 1227 timer1.Stop(); |
| 1241 OS::PrintErr("Without Snapshot: %" Pd64 "us\n", timer1.TotalElapsedTime()); | 1228 OS::PrintErr("Without Snapshot: %" Pd64 "us\n", timer1.TotalElapsedTime()); |
| 1242 | 1229 |
| 1243 // Write snapshot with object content. | 1230 // Write snapshot with object content. |
| 1244 { | 1231 { |
| 1245 FullSnapshotWriter writer(Snapshot::kCore, | 1232 FullSnapshotWriter writer(Snapshot::kCore, NULL, &isolate_snapshot_buffer, |
| 1246 NULL, | |
| 1247 &isolate_snapshot_buffer, | |
| 1248 &malloc_allocator, | 1233 &malloc_allocator, |
| 1249 NULL /* instructions_writer */); | 1234 NULL /* instructions_writer */); |
| 1250 writer.WriteFullSnapshot(); | 1235 writer.WriteFullSnapshot(); |
| 1251 } | 1236 } |
| 1252 | 1237 |
| 1253 // Invoke a function which returns an object. | 1238 // Invoke a function which returns an object. |
| 1254 Dart_Handle cls = Dart_GetClass(lib, NewString("FieldsTest")); | 1239 Dart_Handle cls = Dart_GetClass(lib, NewString("FieldsTest")); |
| 1255 Dart_Handle result = Dart_Invoke(cls, NewString("testMain"), 0, NULL); | 1240 Dart_Handle result = Dart_Invoke(cls, NewString("testMain"), 0, NULL); |
| 1256 EXPECT_VALID(result); | 1241 EXPECT_VALID(result); |
| 1257 } | 1242 } |
| 1258 | 1243 |
| 1259 // Now Create another isolate using the snapshot and execute a method | 1244 // Now Create another isolate using the snapshot and execute a method |
| 1260 // from the script. | 1245 // from the script. |
| 1261 Timer timer2(true, "Snapshot_test"); | 1246 Timer timer2(true, "Snapshot_test"); |
| 1262 timer2.Start(); | 1247 timer2.Start(); |
| 1263 TestCase::CreateTestIsolateFromSnapshot(isolate_snapshot_buffer); | 1248 TestCase::CreateTestIsolateFromSnapshot(isolate_snapshot_buffer); |
| 1264 { | 1249 { |
| 1265 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. | 1250 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. |
| 1266 timer2.Stop(); | 1251 timer2.Stop(); |
| 1267 OS::PrintErr("From Snapshot: %" Pd64 "us\n", timer2.TotalElapsedTime()); | 1252 OS::PrintErr("From Snapshot: %" Pd64 "us\n", timer2.TotalElapsedTime()); |
| 1268 | 1253 |
| 1269 // Invoke a function which returns an object. | 1254 // Invoke a function which returns an object. |
| 1270 Dart_Handle cls = Dart_GetClass(TestCase::lib(), | 1255 Dart_Handle cls = Dart_GetClass(TestCase::lib(), NewString("FieldsTest")); |
| 1271 NewString("FieldsTest")); | |
| 1272 Dart_Handle result = Dart_Invoke(cls, NewString("testMain"), 0, NULL); | 1256 Dart_Handle result = Dart_Invoke(cls, NewString("testMain"), 0, NULL); |
| 1273 if (Dart_IsError(result)) { | 1257 if (Dart_IsError(result)) { |
| 1274 // Print the error. It is probably an unhandled exception. | 1258 // Print the error. It is probably an unhandled exception. |
| 1275 fprintf(stderr, "%s\n", Dart_GetError(result)); | 1259 fprintf(stderr, "%s\n", Dart_GetError(result)); |
| 1276 } | 1260 } |
| 1277 EXPECT_VALID(result); | 1261 EXPECT_VALID(result); |
| 1278 Dart_ExitScope(); | 1262 Dart_ExitScope(); |
| 1279 } | 1263 } |
| 1280 Dart_ShutdownIsolate(); | 1264 Dart_ShutdownIsolate(); |
| 1281 free(isolate_snapshot_buffer); | 1265 free(isolate_snapshot_buffer); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1340 intptr_t actual_num_libs; | 1324 intptr_t actual_num_libs; |
| 1341 | 1325 |
| 1342 bool saved_load_deferred_eagerly_mode = FLAG_load_deferred_eagerly; | 1326 bool saved_load_deferred_eagerly_mode = FLAG_load_deferred_eagerly; |
| 1343 FLAG_load_deferred_eagerly = true; | 1327 FLAG_load_deferred_eagerly = true; |
| 1344 { | 1328 { |
| 1345 // Start an Isolate, and create a full snapshot of it. | 1329 // Start an Isolate, and create a full snapshot of it. |
| 1346 TestIsolateScope __test_isolate__; | 1330 TestIsolateScope __test_isolate__; |
| 1347 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. | 1331 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. |
| 1348 | 1332 |
| 1349 // Write out the script snapshot. | 1333 // Write out the script snapshot. |
| 1350 result = Dart_CreateSnapshot(NULL, | 1334 result = Dart_CreateSnapshot(NULL, &vm_isolate_snapshot_size, |
| 1351 &vm_isolate_snapshot_size, | 1335 &isolate_snapshot, &isolate_snapshot_size); |
| 1352 &isolate_snapshot, | |
| 1353 &isolate_snapshot_size); | |
| 1354 EXPECT_VALID(result); | 1336 EXPECT_VALID(result); |
| 1355 full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size)); | 1337 full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size)); |
| 1356 memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size); | 1338 memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size); |
| 1357 Dart_ExitScope(); | 1339 Dart_ExitScope(); |
| 1358 } | 1340 } |
| 1359 FLAG_load_deferred_eagerly = saved_load_deferred_eagerly_mode; | 1341 FLAG_load_deferred_eagerly = saved_load_deferred_eagerly_mode; |
| 1360 | 1342 |
| 1361 // Test for Dart_CreateScriptSnapshot. | 1343 // Test for Dart_CreateScriptSnapshot. |
| 1362 { | 1344 { |
| 1363 // Create an Isolate using the full snapshot, load a script and create | 1345 // Create an Isolate using the full snapshot, load a script and create |
| 1364 // a script snapshot of the script. | 1346 // a script snapshot of the script. |
| 1365 TestCase::CreateTestIsolateFromSnapshot(full_snapshot); | 1347 TestCase::CreateTestIsolateFromSnapshot(full_snapshot); |
| 1366 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. | 1348 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. |
| 1367 | 1349 |
| 1368 // Load the library. | 1350 // Load the library. |
| 1369 Dart_Handle import_lib = Dart_LoadLibrary(NewString("dart_import_lib"), | 1351 Dart_Handle import_lib = |
| 1370 Dart_Null(), | 1352 Dart_LoadLibrary(NewString("dart_import_lib"), Dart_Null(), |
| 1371 NewString(kLibScriptChars), | 1353 NewString(kLibScriptChars), 0, 0); |
| 1372 0, 0); | |
| 1373 EXPECT_VALID(import_lib); | 1354 EXPECT_VALID(import_lib); |
| 1374 | 1355 |
| 1375 // Create a test library and Load up a test script in it. | 1356 // Create a test library and Load up a test script in it. |
| 1376 TestCase::LoadTestScript(kScriptChars, NULL); | 1357 TestCase::LoadTestScript(kScriptChars, NULL); |
| 1377 | 1358 |
| 1378 EXPECT_VALID(Dart_LibraryImportLibrary(TestCase::lib(), | 1359 EXPECT_VALID( |
| 1379 import_lib, | 1360 Dart_LibraryImportLibrary(TestCase::lib(), import_lib, Dart_Null())); |
| 1380 Dart_Null())); | |
| 1381 EXPECT_VALID(Api::CheckAndFinalizePendingClasses(Thread::Current())); | 1361 EXPECT_VALID(Api::CheckAndFinalizePendingClasses(Thread::Current())); |
| 1382 | 1362 |
| 1383 // Get list of library URLs loaded and save the count. | 1363 // Get list of library URLs loaded and save the count. |
| 1384 Dart_Handle libs = Dart_GetLibraryIds(); | 1364 Dart_Handle libs = Dart_GetLibraryIds(); |
| 1385 EXPECT(Dart_IsList(libs)); | 1365 EXPECT(Dart_IsList(libs)); |
| 1386 Dart_ListLength(libs, &expected_num_libs); | 1366 Dart_ListLength(libs, &expected_num_libs); |
| 1387 | 1367 |
| 1388 // Write out the script snapshot. | 1368 // Write out the script snapshot. |
| 1389 result = Dart_CreateScriptSnapshot(&buffer, &size); | 1369 result = Dart_CreateScriptSnapshot(&buffer, &size); |
| 1390 EXPECT_VALID(result); | 1370 EXPECT_VALID(result); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1422 free(script_snapshot); | 1402 free(script_snapshot); |
| 1423 | 1403 |
| 1424 // Test for Dart_CreateLibrarySnapshot. | 1404 // Test for Dart_CreateLibrarySnapshot. |
| 1425 { | 1405 { |
| 1426 // Create an Isolate using the full snapshot, load a script and create | 1406 // Create an Isolate using the full snapshot, load a script and create |
| 1427 // a script snapshot of the script. | 1407 // a script snapshot of the script. |
| 1428 TestCase::CreateTestIsolateFromSnapshot(full_snapshot); | 1408 TestCase::CreateTestIsolateFromSnapshot(full_snapshot); |
| 1429 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. | 1409 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. |
| 1430 | 1410 |
| 1431 // Load the library. | 1411 // Load the library. |
| 1432 Dart_Handle lib = Dart_LoadLibrary(NewString("dart_lib"), | 1412 Dart_Handle lib = Dart_LoadLibrary(NewString("dart_lib"), Dart_Null(), |
| 1433 Dart_Null(), | 1413 NewString(kScriptChars), 0, 0); |
| 1434 NewString(kScriptChars), | |
| 1435 0, 0); | |
| 1436 EXPECT_VALID(lib); | 1414 EXPECT_VALID(lib); |
| 1437 | 1415 |
| 1438 // Write out the script snapshot. | 1416 // Write out the script snapshot. |
| 1439 result = Dart_CreateLibrarySnapshot(lib, &buffer, &size); | 1417 result = Dart_CreateLibrarySnapshot(lib, &buffer, &size); |
| 1440 EXPECT_VALID(result); | 1418 EXPECT_VALID(result); |
| 1441 script_snapshot = reinterpret_cast<uint8_t*>(malloc(size)); | 1419 script_snapshot = reinterpret_cast<uint8_t*>(malloc(size)); |
| 1442 memmove(script_snapshot, buffer, size); | 1420 memmove(script_snapshot, buffer, size); |
| 1443 Dart_ExitScope(); | 1421 Dart_ExitScope(); |
| 1444 Dart_ShutdownIsolate(); | 1422 Dart_ShutdownIsolate(); |
| 1445 } | 1423 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1462 Dart_ExitScope(); | 1440 Dart_ExitScope(); |
| 1463 Dart_ShutdownIsolate(); | 1441 Dart_ShutdownIsolate(); |
| 1464 } | 1442 } |
| 1465 free(full_snapshot); | 1443 free(full_snapshot); |
| 1466 free(script_snapshot); | 1444 free(script_snapshot); |
| 1467 } | 1445 } |
| 1468 | 1446 |
| 1469 | 1447 |
| 1470 UNIT_TEST_CASE(ScriptSnapshot1) { | 1448 UNIT_TEST_CASE(ScriptSnapshot1) { |
| 1471 const char* kScriptChars = | 1449 const char* kScriptChars = |
| 1472 "class _SimpleNumEnumerable<T extends num> {" | 1450 "class _SimpleNumEnumerable<T extends num> {" |
| 1473 "final Iterable<T> _source;" | 1451 "final Iterable<T> _source;" |
| 1474 "const _SimpleNumEnumerable(this._source) : super();" | 1452 "const _SimpleNumEnumerable(this._source) : super();" |
| 1475 "}"; | 1453 "}"; |
| 1476 | 1454 |
| 1477 Dart_Handle result; | 1455 Dart_Handle result; |
| 1478 uint8_t* buffer; | 1456 uint8_t* buffer; |
| 1479 intptr_t size; | 1457 intptr_t size; |
| 1480 intptr_t vm_isolate_snapshot_size; | 1458 intptr_t vm_isolate_snapshot_size; |
| 1481 uint8_t* isolate_snapshot = NULL; | 1459 uint8_t* isolate_snapshot = NULL; |
| 1482 intptr_t isolate_snapshot_size; | 1460 intptr_t isolate_snapshot_size; |
| 1483 uint8_t* full_snapshot = NULL; | 1461 uint8_t* full_snapshot = NULL; |
| 1484 uint8_t* script_snapshot = NULL; | 1462 uint8_t* script_snapshot = NULL; |
| 1485 | 1463 |
| 1486 bool saved_load_deferred_eagerly_mode = FLAG_load_deferred_eagerly; | 1464 bool saved_load_deferred_eagerly_mode = FLAG_load_deferred_eagerly; |
| 1487 FLAG_load_deferred_eagerly = true; | 1465 FLAG_load_deferred_eagerly = true; |
| 1488 bool saved_concurrent_sweep_mode = FLAG_concurrent_sweep; | 1466 bool saved_concurrent_sweep_mode = FLAG_concurrent_sweep; |
| 1489 FLAG_concurrent_sweep = false; | 1467 FLAG_concurrent_sweep = false; |
| 1490 { | 1468 { |
| 1491 // Start an Isolate, and create a full snapshot of it. | 1469 // Start an Isolate, and create a full snapshot of it. |
| 1492 TestIsolateScope __test_isolate__; | 1470 TestIsolateScope __test_isolate__; |
| 1493 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. | 1471 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. |
| 1494 | 1472 |
| 1495 // Write out the script snapshot. | 1473 // Write out the script snapshot. |
| 1496 result = Dart_CreateSnapshot(NULL, | 1474 result = Dart_CreateSnapshot(NULL, &vm_isolate_snapshot_size, |
| 1497 &vm_isolate_snapshot_size, | 1475 &isolate_snapshot, &isolate_snapshot_size); |
| 1498 &isolate_snapshot, | |
| 1499 &isolate_snapshot_size); | |
| 1500 EXPECT_VALID(result); | 1476 EXPECT_VALID(result); |
| 1501 full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size)); | 1477 full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size)); |
| 1502 memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size); | 1478 memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size); |
| 1503 Dart_ExitScope(); | 1479 Dart_ExitScope(); |
| 1504 } | 1480 } |
| 1505 FLAG_concurrent_sweep = saved_concurrent_sweep_mode; | 1481 FLAG_concurrent_sweep = saved_concurrent_sweep_mode; |
| 1506 | 1482 |
| 1507 { | 1483 { |
| 1508 // Create an Isolate using the full snapshot, load a script and create | 1484 // Create an Isolate using the full snapshot, load a script and create |
| 1509 // a script snapshot of the script. | 1485 // a script snapshot of the script. |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1580 bool saved_load_deferred_eagerly_mode = FLAG_load_deferred_eagerly; | 1556 bool saved_load_deferred_eagerly_mode = FLAG_load_deferred_eagerly; |
| 1581 FLAG_load_deferred_eagerly = true; | 1557 FLAG_load_deferred_eagerly = true; |
| 1582 bool saved_concurrent_sweep_mode = FLAG_concurrent_sweep; | 1558 bool saved_concurrent_sweep_mode = FLAG_concurrent_sweep; |
| 1583 FLAG_concurrent_sweep = false; | 1559 FLAG_concurrent_sweep = false; |
| 1584 { | 1560 { |
| 1585 // Start an Isolate, and create a full snapshot of it. | 1561 // Start an Isolate, and create a full snapshot of it. |
| 1586 TestIsolateScope __test_isolate__; | 1562 TestIsolateScope __test_isolate__; |
| 1587 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. | 1563 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. |
| 1588 | 1564 |
| 1589 // Write out the script snapshot. | 1565 // Write out the script snapshot. |
| 1590 result = Dart_CreateSnapshot(NULL, | 1566 result = Dart_CreateSnapshot(NULL, &vm_isolate_snapshot_size, |
| 1591 &vm_isolate_snapshot_size, | 1567 &isolate_snapshot, &isolate_snapshot_size); |
| 1592 &isolate_snapshot, | |
| 1593 &isolate_snapshot_size); | |
| 1594 EXPECT_VALID(result); | 1568 EXPECT_VALID(result); |
| 1595 full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size)); | 1569 full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size)); |
| 1596 memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size); | 1570 memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size); |
| 1597 Dart_ExitScope(); | 1571 Dart_ExitScope(); |
| 1598 } | 1572 } |
| 1599 FLAG_concurrent_sweep = saved_concurrent_sweep_mode; | 1573 FLAG_concurrent_sweep = saved_concurrent_sweep_mode; |
| 1600 | 1574 |
| 1601 { | 1575 { |
| 1602 // Create an Isolate using the full snapshot, load a script and create | 1576 // Create an Isolate using the full snapshot, load a script and create |
| 1603 // a script snapshot of the script. | 1577 // a script snapshot of the script. |
| 1604 TestCase::CreateTestIsolateFromSnapshot(full_snapshot); | 1578 TestCase::CreateTestIsolateFromSnapshot(full_snapshot); |
| 1605 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. | 1579 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. |
| 1606 | 1580 |
| 1607 // Load the library. | 1581 // Load the library. |
| 1608 Dart_Handle import_lib = Dart_LoadLibrary(NewString("dart_import_lib"), | 1582 Dart_Handle import_lib = |
| 1609 Dart_Null(), | 1583 Dart_LoadLibrary(NewString("dart_import_lib"), Dart_Null(), |
| 1610 NewString(kLibScriptChars), | 1584 NewString(kLibScriptChars), 0, 0); |
| 1611 0, 0); | |
| 1612 EXPECT_VALID(import_lib); | 1585 EXPECT_VALID(import_lib); |
| 1613 | 1586 |
| 1614 // Create a test library and Load up a test script in it. | 1587 // Create a test library and Load up a test script in it. |
| 1615 TestCase::LoadTestScript(kScriptChars, NULL); | 1588 TestCase::LoadTestScript(kScriptChars, NULL); |
| 1616 | 1589 |
| 1617 EXPECT_VALID(Dart_LibraryImportLibrary(TestCase::lib(), | 1590 EXPECT_VALID( |
| 1618 import_lib, | 1591 Dart_LibraryImportLibrary(TestCase::lib(), import_lib, Dart_Null())); |
| 1619 Dart_Null())); | |
| 1620 EXPECT_VALID(Api::CheckAndFinalizePendingClasses(Thread::Current())); | 1592 EXPECT_VALID(Api::CheckAndFinalizePendingClasses(Thread::Current())); |
| 1621 | 1593 |
| 1622 // Write out the script snapshot. | 1594 // Write out the script snapshot. |
| 1623 result = Dart_CreateScriptSnapshot(&buffer, &size); | 1595 result = Dart_CreateScriptSnapshot(&buffer, &size); |
| 1624 EXPECT_VALID(result); | 1596 EXPECT_VALID(result); |
| 1625 script_snapshot = reinterpret_cast<uint8_t*>(malloc(size)); | 1597 script_snapshot = reinterpret_cast<uint8_t*>(malloc(size)); |
| 1626 memmove(script_snapshot, buffer, size); | 1598 memmove(script_snapshot, buffer, size); |
| 1627 Dart_ExitScope(); | 1599 Dart_ExitScope(); |
| 1628 Dart_ShutdownIsolate(); | 1600 Dart_ShutdownIsolate(); |
| 1629 } | 1601 } |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1785 "}\n" | 1757 "}\n" |
| 1786 "getList() {\n" | 1758 "getList() {\n" |
| 1787 " return new List(kArrayLength);\n" | 1759 " return new List(kArrayLength);\n" |
| 1788 "}\n"; | 1760 "}\n"; |
| 1789 | 1761 |
| 1790 TestCase::CreateTestIsolate(); | 1762 TestCase::CreateTestIsolate(); |
| 1791 Isolate* isolate = Isolate::Current(); | 1763 Isolate* isolate = Isolate::Current(); |
| 1792 EXPECT(isolate != NULL); | 1764 EXPECT(isolate != NULL); |
| 1793 Dart_EnterScope(); | 1765 Dart_EnterScope(); |
| 1794 | 1766 |
| 1795 Dart_Handle lib = TestCase::LoadTestScript(kCustomIsolateScriptChars, | 1767 Dart_Handle lib = TestCase::LoadTestScript(kCustomIsolateScriptChars, NULL); |
| 1796 NULL); | |
| 1797 EXPECT_VALID(lib); | 1768 EXPECT_VALID(lib); |
| 1798 Dart_Handle smi_result; | 1769 Dart_Handle smi_result; |
| 1799 smi_result = Dart_Invoke(lib, NewString("getSmi"), 0, NULL); | 1770 smi_result = Dart_Invoke(lib, NewString("getSmi"), 0, NULL); |
| 1800 EXPECT_VALID(smi_result); | 1771 EXPECT_VALID(smi_result); |
| 1801 Dart_Handle bigint_result; | 1772 Dart_Handle bigint_result; |
| 1802 bigint_result = Dart_Invoke(lib, NewString("getBigint"), 0, NULL); | 1773 bigint_result = Dart_Invoke(lib, NewString("getBigint"), 0, NULL); |
| 1803 EXPECT_VALID(bigint_result); | 1774 EXPECT_VALID(bigint_result); |
| 1804 | 1775 |
| 1805 Dart_Handle ascii_string_result; | 1776 Dart_Handle ascii_string_result; |
| 1806 ascii_string_result = Dart_Invoke(lib, NewString("getAsciiString"), 0, NULL); | 1777 ascii_string_result = Dart_Invoke(lib, NewString("getAsciiString"), 0, NULL); |
| (...skipping 871 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2678 } | 2649 } |
| 2679 } | 2650 } |
| 2680 Dart_ExitScope(); | 2651 Dart_ExitScope(); |
| 2681 Dart_ShutdownIsolate(); | 2652 Dart_ShutdownIsolate(); |
| 2682 } | 2653 } |
| 2683 | 2654 |
| 2684 | 2655 |
| 2685 static void CheckTypedData(Dart_CObject* object, | 2656 static void CheckTypedData(Dart_CObject* object, |
| 2686 Dart_TypedData_Type typed_data_type, | 2657 Dart_TypedData_Type typed_data_type, |
| 2687 int len) { | 2658 int len) { |
| 2688 EXPECT_EQ(Dart_CObject_kTypedData, object->type); | 2659 EXPECT_EQ(Dart_CObject_kTypedData, object->type); |
| 2689 EXPECT_EQ(typed_data_type, object->value.as_typed_data.type); | 2660 EXPECT_EQ(typed_data_type, object->value.as_typed_data.type); |
| 2690 EXPECT_EQ(len, object->value.as_typed_data.length); | 2661 EXPECT_EQ(len, object->value.as_typed_data.length); |
| 2691 } | 2662 } |
| 2692 | 2663 |
| 2693 UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) { | 2664 UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) { |
| 2694 static const char* kScriptChars = | 2665 static const char* kScriptChars = |
| 2695 "import 'dart:typed_data';\n" | 2666 "import 'dart:typed_data';\n" |
| 2696 "getTypedDataList() {\n" | 2667 "getTypedDataList() {\n" |
| 2697 " var list = new List(10);\n" | 2668 " var list = new List(10);\n" |
| 2698 " var index = 0;\n" | 2669 " var index = 0;\n" |
| 2699 " list[index++] = new Int8List(256);\n" | 2670 " list[index++] = new Int8List(256);\n" |
| 2700 " list[index++] = new Uint8List(256);\n" | 2671 " list[index++] = new Uint8List(256);\n" |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2779 // Generate a list of Uint8Lists from Dart code. | 2750 // Generate a list of Uint8Lists from Dart code. |
| 2780 uint8_t* buf = GetSerialized(lib, "getTypedDataList", &buf_len); | 2751 uint8_t* buf = GetSerialized(lib, "getTypedDataList", &buf_len); |
| 2781 ApiNativeScope scope; | 2752 ApiNativeScope scope; |
| 2782 Dart_CObject* root = GetDeserialized(buf, buf_len); | 2753 Dart_CObject* root = GetDeserialized(buf, buf_len); |
| 2783 EXPECT_NOTNULL(root); | 2754 EXPECT_NOTNULL(root); |
| 2784 EXPECT_EQ(Dart_CObject_kArray, root->type); | 2755 EXPECT_EQ(Dart_CObject_kArray, root->type); |
| 2785 struct { | 2756 struct { |
| 2786 Dart_TypedData_Type type; | 2757 Dart_TypedData_Type type; |
| 2787 int size; | 2758 int size; |
| 2788 } expected[] = { | 2759 } expected[] = { |
| 2789 { Dart_TypedData_kInt8, 256}, | 2760 {Dart_TypedData_kInt8, 256}, {Dart_TypedData_kUint8, 256}, |
| 2790 { Dart_TypedData_kUint8, 256}, | 2761 {Dart_TypedData_kInt16, 512}, {Dart_TypedData_kUint16, 512}, |
| 2791 { Dart_TypedData_kInt16, 512}, | 2762 {Dart_TypedData_kInt32, 1024}, {Dart_TypedData_kUint32, 1024}, |
| 2792 { Dart_TypedData_kUint16, 512}, | 2763 {Dart_TypedData_kInt64, 2048}, {Dart_TypedData_kUint64, 2048}, |
| 2793 { Dart_TypedData_kInt32, 1024}, | 2764 {Dart_TypedData_kFloat32, 1024}, {Dart_TypedData_kFloat64, 2048}, |
| 2794 { Dart_TypedData_kUint32, 1024}, | 2765 {Dart_TypedData_kInvalid, -1}}; |
| 2795 { Dart_TypedData_kInt64, 2048}, | |
| 2796 { Dart_TypedData_kUint64, 2048}, | |
| 2797 { Dart_TypedData_kFloat32, 1024}, | |
| 2798 { Dart_TypedData_kFloat64, 2048}, | |
| 2799 { Dart_TypedData_kInvalid, -1 } | |
| 2800 }; | |
| 2801 | 2766 |
| 2802 int i = 0; | 2767 int i = 0; |
| 2803 while (expected[i].type != Dart_TypedData_kInvalid) { | 2768 while (expected[i].type != Dart_TypedData_kInvalid) { |
| 2804 CheckTypedData(root->value.as_array.values[i], | 2769 CheckTypedData(root->value.as_array.values[i], expected[i].type, |
| 2805 expected[i].type, | |
| 2806 expected[i].size); | 2770 expected[i].size); |
| 2807 i++; | 2771 i++; |
| 2808 } | 2772 } |
| 2809 EXPECT_EQ(i, root->value.as_array.length); | 2773 EXPECT_EQ(i, root->value.as_array.length); |
| 2810 } | 2774 } |
| 2811 { | 2775 { |
| 2812 // Generate a list of Uint8List views from Dart code. | 2776 // Generate a list of Uint8List views from Dart code. |
| 2813 uint8_t* buf = GetSerialized(lib, "getTypedDataViewList", &buf_len); | 2777 uint8_t* buf = GetSerialized(lib, "getTypedDataViewList", &buf_len); |
| 2814 ApiNativeScope scope; | 2778 ApiNativeScope scope; |
| 2815 Dart_CObject* root = GetDeserialized(buf, buf_len); | 2779 Dart_CObject* root = GetDeserialized(buf, buf_len); |
| 2816 EXPECT_NOTNULL(root); | 2780 EXPECT_NOTNULL(root); |
| 2817 EXPECT_EQ(Dart_CObject_kArray, root->type); | 2781 EXPECT_EQ(Dart_CObject_kArray, root->type); |
| 2818 struct { | 2782 struct { |
| 2819 Dart_TypedData_Type type; | 2783 Dart_TypedData_Type type; |
| 2820 int size; | 2784 int size; |
| 2821 } expected[] = { | 2785 } expected[] = { |
| 2822 { Dart_TypedData_kInt8, 256}, | 2786 {Dart_TypedData_kInt8, 256}, {Dart_TypedData_kUint8, 256}, |
| 2823 { Dart_TypedData_kUint8, 256}, | 2787 {Dart_TypedData_kInt16, 512}, {Dart_TypedData_kUint16, 512}, |
| 2824 { Dart_TypedData_kInt16, 512}, | 2788 {Dart_TypedData_kInt32, 1024}, {Dart_TypedData_kUint32, 1024}, |
| 2825 { Dart_TypedData_kUint16, 512}, | 2789 {Dart_TypedData_kInt64, 2048}, {Dart_TypedData_kUint64, 2048}, |
| 2826 { Dart_TypedData_kInt32, 1024}, | 2790 {Dart_TypedData_kFloat32, 1024}, {Dart_TypedData_kFloat64, 2048}, |
| 2827 { Dart_TypedData_kUint32, 1024}, | |
| 2828 { Dart_TypedData_kInt64, 2048}, | |
| 2829 { Dart_TypedData_kUint64, 2048}, | |
| 2830 { Dart_TypedData_kFloat32, 1024}, | |
| 2831 { Dart_TypedData_kFloat64, 2048}, | |
| 2832 | 2791 |
| 2833 { Dart_TypedData_kInt8, 512}, | 2792 {Dart_TypedData_kInt8, 512}, {Dart_TypedData_kUint8, 512}, |
| 2834 { Dart_TypedData_kUint8, 512}, | 2793 {Dart_TypedData_kInt8, 1024}, {Dart_TypedData_kUint8, 1024}, |
| 2835 { Dart_TypedData_kInt8, 1024}, | 2794 {Dart_TypedData_kInt8, 2048}, {Dart_TypedData_kUint8, 2048}, |
| 2836 { Dart_TypedData_kUint8, 1024}, | 2795 {Dart_TypedData_kInt8, 1024}, {Dart_TypedData_kUint8, 1024}, |
| 2837 { Dart_TypedData_kInt8, 2048}, | 2796 {Dart_TypedData_kInt8, 2048}, {Dart_TypedData_kUint8, 2048}, |
| 2838 { Dart_TypedData_kUint8, 2048}, | |
| 2839 { Dart_TypedData_kInt8, 1024}, | |
| 2840 { Dart_TypedData_kUint8, 1024}, | |
| 2841 { Dart_TypedData_kInt8, 2048}, | |
| 2842 { Dart_TypedData_kUint8, 2048}, | |
| 2843 | 2797 |
| 2844 { Dart_TypedData_kInt16, 256}, | 2798 {Dart_TypedData_kInt16, 256}, {Dart_TypedData_kUint16, 256}, |
| 2845 { Dart_TypedData_kUint16, 256}, | 2799 {Dart_TypedData_kInt16, 1024}, {Dart_TypedData_kUint16, 1024}, |
| 2846 { Dart_TypedData_kInt16, 1024}, | 2800 {Dart_TypedData_kInt16, 2048}, {Dart_TypedData_kUint16, 2048}, |
| 2847 { Dart_TypedData_kUint16, 1024}, | 2801 {Dart_TypedData_kInt16, 1024}, {Dart_TypedData_kUint16, 1024}, |
| 2848 { Dart_TypedData_kInt16, 2048}, | 2802 {Dart_TypedData_kInt16, 2048}, {Dart_TypedData_kUint16, 2048}, |
| 2849 { Dart_TypedData_kUint16, 2048}, | |
| 2850 { Dart_TypedData_kInt16, 1024}, | |
| 2851 { Dart_TypedData_kUint16, 1024}, | |
| 2852 { Dart_TypedData_kInt16, 2048}, | |
| 2853 { Dart_TypedData_kUint16, 2048}, | |
| 2854 | 2803 |
| 2855 { Dart_TypedData_kInvalid, -1 } | 2804 {Dart_TypedData_kInvalid, -1}}; |
| 2856 }; | |
| 2857 | 2805 |
| 2858 int i = 0; | 2806 int i = 0; |
| 2859 while (expected[i].type != Dart_TypedData_kInvalid) { | 2807 while (expected[i].type != Dart_TypedData_kInvalid) { |
| 2860 CheckTypedData(root->value.as_array.values[i], | 2808 CheckTypedData(root->value.as_array.values[i], expected[i].type, |
| 2861 expected[i].type, | |
| 2862 expected[i].size); | 2809 expected[i].size); |
| 2863 i++; | 2810 i++; |
| 2864 } | 2811 } |
| 2865 EXPECT_EQ(i, root->value.as_array.length); | 2812 EXPECT_EQ(i, root->value.as_array.length); |
| 2866 } | 2813 } |
| 2867 { | 2814 { |
| 2868 // Generate a list of Uint8Lists from Dart code. | 2815 // Generate a list of Uint8Lists from Dart code. |
| 2869 uint8_t* buf = | 2816 uint8_t* buf = |
| 2870 GetSerialized(lib, "getMultipleTypedDataViewList", &buf_len); | 2817 GetSerialized(lib, "getMultipleTypedDataViewList", &buf_len); |
| 2871 ApiNativeScope scope; | 2818 ApiNativeScope scope; |
| 2872 Dart_CObject* root = GetDeserialized(buf, buf_len); | 2819 Dart_CObject* root = GetDeserialized(buf, buf_len); |
| 2873 EXPECT_NOTNULL(root); | 2820 EXPECT_NOTNULL(root); |
| 2874 EXPECT_EQ(Dart_CObject_kArray, root->type); | 2821 EXPECT_EQ(Dart_CObject_kArray, root->type); |
| 2875 struct { | 2822 struct { |
| 2876 Dart_TypedData_Type type; | 2823 Dart_TypedData_Type type; |
| 2877 int size; | 2824 int size; |
| 2878 } expected[] = { | 2825 } expected[] = { |
| 2879 { Dart_TypedData_kInt8, 256}, | 2826 {Dart_TypedData_kInt8, 256}, {Dart_TypedData_kUint8, 256}, |
| 2880 { Dart_TypedData_kUint8, 256}, | 2827 {Dart_TypedData_kInt16, 256}, {Dart_TypedData_kUint16, 256}, |
| 2881 { Dart_TypedData_kInt16, 256}, | 2828 {Dart_TypedData_kInt32, 256}, {Dart_TypedData_kUint32, 256}, |
| 2882 { Dart_TypedData_kUint16, 256}, | 2829 {Dart_TypedData_kInt64, 256}, {Dart_TypedData_kUint64, 256}, |
| 2883 { Dart_TypedData_kInt32, 256}, | 2830 {Dart_TypedData_kFloat32, 256}, {Dart_TypedData_kFloat64, 256}, |
| 2884 { Dart_TypedData_kUint32, 256}, | 2831 {Dart_TypedData_kInvalid, -1}}; |
| 2885 { Dart_TypedData_kInt64, 256}, | |
| 2886 { Dart_TypedData_kUint64, 256}, | |
| 2887 { Dart_TypedData_kFloat32, 256}, | |
| 2888 { Dart_TypedData_kFloat64, 256}, | |
| 2889 { Dart_TypedData_kInvalid, -1 } | |
| 2890 }; | |
| 2891 | 2832 |
| 2892 int i = 0; | 2833 int i = 0; |
| 2893 while (expected[i].type != Dart_TypedData_kInvalid) { | 2834 while (expected[i].type != Dart_TypedData_kInvalid) { |
| 2894 CheckTypedData(root->value.as_array.values[i], | 2835 CheckTypedData(root->value.as_array.values[i], expected[i].type, |
| 2895 expected[i].type, | |
| 2896 expected[i].size); | 2836 expected[i].size); |
| 2897 | 2837 |
| 2898 // All views point to the same data. | 2838 // All views point to the same data. |
| 2899 EXPECT_EQ(root->value.as_array.values[0]->value.as_typed_data.values, | 2839 EXPECT_EQ(root->value.as_array.values[0]->value.as_typed_data.values, |
| 2900 root->value.as_array.values[i]->value.as_typed_data.values); | 2840 root->value.as_array.values[i]->value.as_typed_data.values); |
| 2901 i++; | 2841 i++; |
| 2902 } | 2842 } |
| 2903 EXPECT_EQ(i, root->value.as_array.length); | 2843 EXPECT_EQ(i, root->value.as_array.length); |
| 2904 } | 2844 } |
| 2905 } | 2845 } |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2973 | 2913 |
| 2974 object.type = Dart_CObject_kDouble; | 2914 object.type = Dart_CObject_kDouble; |
| 2975 object.value.as_double = 3.14; | 2915 object.value.as_double = 3.14; |
| 2976 EXPECT(Dart_PostCObject(port_id, &object)); | 2916 EXPECT(Dart_PostCObject(port_id, &object)); |
| 2977 | 2917 |
| 2978 object.type = Dart_CObject_kArray; | 2918 object.type = Dart_CObject_kArray; |
| 2979 object.value.as_array.length = 0; | 2919 object.value.as_array.length = 0; |
| 2980 EXPECT(Dart_PostCObject(port_id, &object)); | 2920 EXPECT(Dart_PostCObject(port_id, &object)); |
| 2981 | 2921 |
| 2982 static const int kArrayLength = 10; | 2922 static const int kArrayLength = 10; |
| 2983 Dart_CObject* array = | 2923 Dart_CObject* array = reinterpret_cast<Dart_CObject*>(Dart_ScopeAllocate( |
| 2984 reinterpret_cast<Dart_CObject*>( | 2924 sizeof(Dart_CObject) + sizeof(Dart_CObject*) * kArrayLength)); // NOLINT |
| 2985 Dart_ScopeAllocate( | |
| 2986 sizeof(Dart_CObject) + sizeof(Dart_CObject*) * kArrayLength)); //
NOLINT | |
| 2987 array->type = Dart_CObject_kArray; | 2925 array->type = Dart_CObject_kArray; |
| 2988 array->value.as_array.length = kArrayLength; | 2926 array->value.as_array.length = kArrayLength; |
| 2989 array->value.as_array.values = | 2927 array->value.as_array.values = reinterpret_cast<Dart_CObject**>(array + 1); |
| 2990 reinterpret_cast<Dart_CObject**>(array + 1); | |
| 2991 for (int i = 0; i < kArrayLength; i++) { | 2928 for (int i = 0; i < kArrayLength; i++) { |
| 2992 Dart_CObject* element = | 2929 Dart_CObject* element = reinterpret_cast<Dart_CObject*>( |
| 2993 reinterpret_cast<Dart_CObject*>( | 2930 Dart_ScopeAllocate(sizeof(Dart_CObject))); |
| 2994 Dart_ScopeAllocate(sizeof(Dart_CObject))); | |
| 2995 element->type = Dart_CObject_kInt32; | 2931 element->type = Dart_CObject_kInt32; |
| 2996 element->value.as_int32 = i; | 2932 element->value.as_int32 = i; |
| 2997 array->value.as_array.values[i] = element; | 2933 array->value.as_array.values[i] = element; |
| 2998 } | 2934 } |
| 2999 EXPECT(Dart_PostCObject(port_id, array)); | 2935 EXPECT(Dart_PostCObject(port_id, array)); |
| 3000 | 2936 |
| 3001 result = Dart_RunLoop(); | 2937 result = Dart_RunLoop(); |
| 3002 EXPECT(Dart_IsError(result)); | 2938 EXPECT(Dart_IsError(result)); |
| 3003 EXPECT(Dart_ErrorHasException(result)); | 2939 EXPECT(Dart_ErrorHasException(result)); |
| 3004 EXPECT_SUBSTRING("Exception: nulltruefalse123456æøå3.14[]100123456789\n", | 2940 EXPECT_SUBSTRING("Exception: nulltruefalse123456æøå3.14[]100123456789\n", |
| 3005 Dart_GetError(result)); | 2941 Dart_GetError(result)); |
| 3006 | 2942 |
| 3007 Dart_ExitScope(); | 2943 Dart_ExitScope(); |
| 3008 } | 2944 } |
| 3009 | 2945 |
| 3010 | 2946 |
| 3011 TEST_CASE(OmittedObjectEncodingLength) { | 2947 TEST_CASE(OmittedObjectEncodingLength) { |
| 3012 StackZone zone(Thread::Current()); | 2948 StackZone zone(Thread::Current()); |
| 3013 uint8_t* buffer; | 2949 uint8_t* buffer; |
| 3014 MessageWriter writer(&buffer, &zone_allocator, true); | 2950 MessageWriter writer(&buffer, &zone_allocator, true); |
| 3015 writer.WriteInlinedObjectHeader(kOmittedObjectId); | 2951 writer.WriteInlinedObjectHeader(kOmittedObjectId); |
| 3016 // For performance, we'd like single-byte headers when ids are omitted. | 2952 // For performance, we'd like single-byte headers when ids are omitted. |
| 3017 // If this starts failing, consider renumbering the snapshot ids. | 2953 // If this starts failing, consider renumbering the snapshot ids. |
| 3018 EXPECT_EQ(1, writer.BytesWritten()); | 2954 EXPECT_EQ(1, writer.BytesWritten()); |
| 3019 } | 2955 } |
| 3020 | 2956 |
| 3021 } // namespace dart | 2957 } // namespace dart |
| OLD | NEW |