OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "platform/globals.h" | 5 #include "platform/globals.h" |
6 | 6 |
7 #include "include/dart_tools_api.h" | 7 #include "include/dart_tools_api.h" |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/class_finalizer.h" | 9 #include "vm/class_finalizer.h" |
10 #include "vm/dart_api_impl.h" | 10 #include "vm/dart_api_impl.h" |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 // Read object back from the snapshot into a C structure. | 248 // Read object back from the snapshot into a C structure. |
249 ApiMessageReader api_reader(buffer, buffer_len); | 249 ApiMessageReader api_reader(buffer, buffer_len); |
250 Dart_CObject* root = api_reader.ReadMessage(); | 250 Dart_CObject* root = api_reader.ReadMessage(); |
251 EXPECT_NOTNULL(root); | 251 EXPECT_NOTNULL(root); |
252 CheckEncodeDecodeMessage(root); | 252 CheckEncodeDecodeMessage(root); |
253 return root; | 253 return root; |
254 } | 254 } |
255 | 255 |
256 | 256 |
257 void CheckMint(int64_t value) { | 257 void CheckMint(int64_t value) { |
| 258 ApiNativeScope scope; |
258 StackZone zone(Thread::Current()); | 259 StackZone zone(Thread::Current()); |
259 | 260 |
260 Mint& mint = Mint::Handle(); | 261 Mint& mint = Mint::Handle(); |
261 mint ^= Integer::New(value); | 262 mint ^= Integer::New(value); |
262 ApiNativeScope scope; | |
263 Dart_CObject* mint_cobject = SerializeAndDeserializeMint(mint); | 263 Dart_CObject* mint_cobject = SerializeAndDeserializeMint(mint); |
264 // On 64-bit platforms mints always require 64-bits as the smi range | 264 // On 64-bit platforms mints always require 64-bits as the smi range |
265 // here covers most of the 64-bit range. On 32-bit platforms the smi | 265 // here covers most of the 64-bit range. On 32-bit platforms the smi |
266 // range covers most of the 32-bit range and values outside that | 266 // range covers most of the 32-bit range and values outside that |
267 // range are also represented as mints. | 267 // range are also represented as mints. |
268 #if defined(ARCH_IS_64_BIT) | 268 #if defined(ARCH_IS_64_BIT) |
269 EXPECT_EQ(Dart_CObject_kInt64, mint_cobject->type); | 269 EXPECT_EQ(Dart_CObject_kInt64, mint_cobject->type); |
270 EXPECT_EQ(value, mint_cobject->value.as_int64); | 270 EXPECT_EQ(value, mint_cobject->value.as_int64); |
271 #else | 271 #else |
272 if (kMinInt32 < value && value < kMaxInt32) { | 272 if (kMinInt32 < value && value < kMaxInt32) { |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
469 ApiMessageReader api_reader(buffer, buffer_len); | 469 ApiMessageReader api_reader(buffer, buffer_len); |
470 Dart_CObject* root = api_reader.ReadMessage(); | 470 Dart_CObject* root = api_reader.ReadMessage(); |
471 // Bigint not supported. | 471 // Bigint not supported. |
472 EXPECT_NOTNULL(root); | 472 EXPECT_NOTNULL(root); |
473 CheckEncodeDecodeMessage(root); | 473 CheckEncodeDecodeMessage(root); |
474 return root; | 474 return root; |
475 } | 475 } |
476 | 476 |
477 | 477 |
478 void CheckBigint(const char* bigint_value) { | 478 void CheckBigint(const char* bigint_value) { |
| 479 ApiNativeScope scope; |
479 StackZone zone(Thread::Current()); | 480 StackZone zone(Thread::Current()); |
480 Bigint& bigint = Bigint::Handle(); | 481 Bigint& bigint = Bigint::Handle(); |
481 bigint ^= Bigint::NewFromCString(bigint_value); | 482 bigint ^= Bigint::NewFromCString(bigint_value); |
482 ApiNativeScope scope; | |
483 Dart_CObject* bigint_cobject = SerializeAndDeserializeBigint(bigint); | 483 Dart_CObject* bigint_cobject = SerializeAndDeserializeBigint(bigint); |
484 EXPECT_EQ(Dart_CObject_kBigint, bigint_cobject->type); | 484 EXPECT_EQ(Dart_CObject_kBigint, bigint_cobject->type); |
485 char* hex_value = TestCase::BigintToHexValue(bigint_cobject); | 485 char* hex_value = TestCase::BigintToHexValue(bigint_cobject); |
486 EXPECT_STREQ(bigint_value, hex_value); | 486 EXPECT_STREQ(bigint_value, hex_value); |
487 free(hex_value); | 487 free(hex_value); |
488 } | 488 } |
489 | 489 |
490 | 490 |
491 TEST_CASE(SerializeBigint2) { | 491 TEST_CASE(SerializeBigint2) { |
492 CheckBigint("0x0"); | 492 CheckBigint("0x0"); |
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
824 EXPECT(root->value.as_typed_data.values == NULL); | 824 EXPECT(root->value.as_typed_data.values == NULL); |
825 CheckEncodeDecodeMessage(root); | 825 CheckEncodeDecodeMessage(root); |
826 } | 826 } |
827 | 827 |
828 | 828 |
829 class TestSnapshotWriter : public SnapshotWriter { | 829 class TestSnapshotWriter : public SnapshotWriter { |
830 public: | 830 public: |
831 static const intptr_t kInitialSize = 64 * KB; | 831 static const intptr_t kInitialSize = 64 * KB; |
832 TestSnapshotWriter(uint8_t** buffer, ReAlloc alloc) | 832 TestSnapshotWriter(uint8_t** buffer, ReAlloc alloc) |
833 : SnapshotWriter(Snapshot::kScript, | 833 : SnapshotWriter(Snapshot::kScript, |
| 834 Thread::Current(), |
834 buffer, | 835 buffer, |
835 alloc, | 836 alloc, |
836 kInitialSize, | 837 kInitialSize, |
837 &forward_list_, | 838 &forward_list_, |
838 NULL, /* test_writer */ | 839 NULL, /* test_writer */ |
839 true, /* can_send_any_object */ | 840 true, /* can_send_any_object */ |
840 false, /* snapshot_code */ | 841 false, /* snapshot_code */ |
841 true /* vm_isolate_is_symbolic */), | 842 true /* vm_isolate_is_symbolic */), |
842 forward_list_(kMaxPredefinedObjectIds) { | 843 forward_list_(thread(), kMaxPredefinedObjectIds) { |
843 ASSERT(buffer != NULL); | 844 ASSERT(buffer != NULL); |
844 ASSERT(alloc != NULL); | 845 ASSERT(alloc != NULL); |
845 } | 846 } |
846 ~TestSnapshotWriter() { } | 847 ~TestSnapshotWriter() { } |
847 | 848 |
848 // Writes just a script object | 849 // Writes just a script object |
849 void WriteScript(const Script& script) { | 850 void WriteScript(const Script& script) { |
850 WriteObject(script.raw()); | 851 WriteObject(script.raw()); |
851 UnmarkAll(); | |
852 } | 852 } |
853 | 853 |
854 private: | 854 private: |
855 ForwardList forward_list_; | 855 ForwardList forward_list_; |
856 | 856 |
857 DISALLOW_COPY_AND_ASSIGN(TestSnapshotWriter); | 857 DISALLOW_COPY_AND_ASSIGN(TestSnapshotWriter); |
858 }; | 858 }; |
859 | 859 |
860 | 860 |
861 static void GenerateSourceAndCheck(const Script& script) { | 861 static void GenerateSourceAndCheck(const Script& script) { |
(...skipping 2134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2996 StackZone zone(Thread::Current()); | 2996 StackZone zone(Thread::Current()); |
2997 uint8_t* buffer; | 2997 uint8_t* buffer; |
2998 MessageWriter writer(&buffer, &zone_allocator, true); | 2998 MessageWriter writer(&buffer, &zone_allocator, true); |
2999 writer.WriteInlinedObjectHeader(kOmittedObjectId); | 2999 writer.WriteInlinedObjectHeader(kOmittedObjectId); |
3000 // For performance, we'd like single-byte headers when ids are omitted. | 3000 // For performance, we'd like single-byte headers when ids are omitted. |
3001 // If this starts failing, consider renumbering the snapshot ids. | 3001 // If this starts failing, consider renumbering the snapshot ids. |
3002 EXPECT_EQ(1, writer.BytesWritten()); | 3002 EXPECT_EQ(1, writer.BytesWritten()); |
3003 } | 3003 } |
3004 | 3004 |
3005 } // namespace dart | 3005 } // namespace dart |
OLD | NEW |