| 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 |