| 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/assert.h" | 5 #include "platform/assert.h" |
| 6 #include "vm/bigint_operations.h" | 6 #include "vm/bigint_operations.h" |
| 7 #include "vm/class_finalizer.h" | 7 #include "vm/class_finalizer.h" |
| 8 #include "vm/dart_api_impl.h" | 8 #include "vm/dart_api_impl.h" |
| 9 #include "vm/dart_api_state.h" | 9 #include "vm/dart_api_state.h" |
| 10 #include "vm/snapshot.h" | 10 #include "vm/snapshot.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 | 44 |
| 45 static void FreeDeserializedDartMessage(Dart_CMessage* cmessage) { | 45 static void FreeDeserializedDartMessage(Dart_CMessage* cmessage) { |
| 46 for (int i = 0; i < cmessage->allocated_length; i++) { | 46 for (int i = 0; i < cmessage->allocated_length; i++) { |
| 47 free(cmessage->allocated[i]); | 47 free(cmessage->allocated[i]); |
| 48 } | 48 } |
| 49 free(cmessage->original_message - Snapshot::kHeaderSize); | 49 free(cmessage->original_message - Snapshot::kHeaderSize); |
| 50 free(cmessage); | 50 free(cmessage); |
| 51 } | 51 } |
| 52 | 52 |
| 53 | 53 |
| 54 static void CompareDartCObjects(Dart_CObject* first, Dart_CObject* second) { |
| 55 EXPECT_NE(first, second); |
| 56 EXPECT_EQ(first->type, second->type); |
| 57 switch (first->type) { |
| 58 case Dart_CObject::kNull: |
| 59 // Nothing more to compare. |
| 60 break; |
| 61 case Dart_CObject::kBool: |
| 62 EXPECT_EQ(first->value.as_bool, second->value.as_bool); |
| 63 break; |
| 64 case Dart_CObject::kInt32: |
| 65 EXPECT_EQ(first->value.as_int32, second->value.as_int32); |
| 66 break; |
| 67 case Dart_CObject::kDouble: |
| 68 EXPECT_EQ(first->value.as_double, second->value.as_double); |
| 69 break; |
| 70 case Dart_CObject::kString: |
| 71 EXPECT_STREQ(first->value.as_string, second->value.as_string); |
| 72 break; |
| 73 case Dart_CObject::kArray: |
| 74 EXPECT_EQ(first->value.as_array.length, second->value.as_array.length); |
| 75 for (int i = 0; i < first->value.as_array.length; i++) { |
| 76 CompareDartCObjects(first->value.as_array.values[i], |
| 77 second->value.as_array.values[i]); |
| 78 } |
| 79 break; |
| 80 default: |
| 81 EXPECT(false); |
| 82 } |
| 83 } |
| 84 |
| 85 |
| 86 static void CheckEncodeMessage(Dart_CMessage* cmessage) { |
| 87 // Encode and decode the message. |
| 88 uint8_t* again = Dart_EncodeMessage(cmessage, allocator); |
| 89 // TODO(sgjesse): Get the length of the encoded message instead of |
| 90 // 1000. The length is not currently used for decoding, so a large |
| 91 // value works for testing. |
| 92 Dart_CMessage* new_cmessage = |
| 93 Dart_DecodeMessage(again + Snapshot::kHeaderSize, 1000, &allocator); |
| 94 |
| 95 // Check that the two messages are the same. |
| 96 CompareDartCObjects(cmessage->object, new_cmessage->object); |
| 97 FreeDeserializedDartMessage(new_cmessage); |
| 98 } |
| 99 |
| 54 TEST_CASE(SerializeNull) { | 100 TEST_CASE(SerializeNull) { |
| 55 // Write snapshot with object content. | 101 // Write snapshot with object content. |
| 56 uint8_t* buffer; | 102 uint8_t* buffer; |
| 57 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); | 103 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| 58 const Object& null_object = Object::Handle(); | 104 const Object& null_object = Object::Handle(); |
| 59 writer.WriteObject(null_object.raw()); | 105 writer.WriteObject(null_object.raw()); |
| 60 writer.FinalizeBuffer(); | 106 writer.FinalizeBuffer(); |
| 61 | 107 |
| 62 // Create a snapshot object using the buffer. | 108 // Create a snapshot object using the buffer. |
| 63 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); | 109 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); |
| 64 | 110 |
| 65 // Read object back from the snapshot. | 111 // Read object back from the snapshot. |
| 66 SnapshotReader reader(snapshot, Isolate::Current()); | 112 SnapshotReader reader(snapshot, Isolate::Current()); |
| 67 const Object& serialized_object = Object::Handle(reader.ReadObject()); | 113 const Object& serialized_object = Object::Handle(reader.ReadObject()); |
| 68 EXPECT(Equals(null_object, serialized_object)); | 114 EXPECT(Equals(null_object, serialized_object)); |
| 69 | 115 |
| 70 // Read object back from the snapshot into a C structure. | 116 // Read object back from the snapshot into a C structure. |
| 71 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, | 117 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, |
| 72 writer.BytesWritten(), | 118 writer.BytesWritten(), |
| 73 &allocator); | 119 &allocator); |
| 74 Dart_CObject* cobject = cmessage->object; | 120 Dart_CObject* cobject = cmessage->object; |
| 75 EXPECT_NOTNULL(cobject); | 121 EXPECT_NOTNULL(cobject); |
| 76 EXPECT_EQ(Dart_CObject::kNull, cobject->type); | 122 EXPECT_EQ(Dart_CObject::kNull, cobject->type); |
| 123 CheckEncodeMessage(cmessage); |
| 77 FreeDeserializedDartMessage(cmessage); | 124 FreeDeserializedDartMessage(cmessage); |
| 78 } | 125 } |
| 79 | 126 |
| 80 | 127 |
| 81 TEST_CASE(SerializeSmi1) { | 128 TEST_CASE(SerializeSmi1) { |
| 82 // Write snapshot with object content. | 129 // Write snapshot with object content. |
| 83 uint8_t* buffer; | 130 uint8_t* buffer; |
| 84 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); | 131 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| 85 const Smi& smi = Smi::Handle(Smi::New(124)); | 132 const Smi& smi = Smi::Handle(Smi::New(124)); |
| 86 writer.WriteObject(smi.raw()); | 133 writer.WriteObject(smi.raw()); |
| 87 writer.FinalizeBuffer(); | 134 writer.FinalizeBuffer(); |
| 88 | 135 |
| 89 // Create a snapshot object using the buffer. | 136 // Create a snapshot object using the buffer. |
| 90 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); | 137 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); |
| 91 | 138 |
| 92 // Read object back from the snapshot. | 139 // Read object back from the snapshot. |
| 93 SnapshotReader reader(snapshot, Isolate::Current()); | 140 SnapshotReader reader(snapshot, Isolate::Current()); |
| 94 const Object& serialized_object = Object::Handle(reader.ReadObject()); | 141 const Object& serialized_object = Object::Handle(reader.ReadObject()); |
| 95 EXPECT(Equals(smi, serialized_object)); | 142 EXPECT(Equals(smi, serialized_object)); |
| 96 | 143 |
| 97 // Read object back from the snapshot into a C structure. | 144 // Read object back from the snapshot into a C structure. |
| 98 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, | 145 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, |
| 99 writer.BytesWritten(), | 146 writer.BytesWritten(), |
| 100 &allocator); | 147 &allocator); |
| 101 Dart_CObject* cobject = cmessage->object; | 148 Dart_CObject* cobject = cmessage->object; |
| 102 EXPECT_NOTNULL(cobject); | 149 EXPECT_NOTNULL(cobject); |
| 103 EXPECT_EQ(Dart_CObject::kInt32, cobject->type); | 150 EXPECT_EQ(Dart_CObject::kInt32, cobject->type); |
| 104 EXPECT_EQ(smi.Value(), cobject->value.as_int32); | 151 EXPECT_EQ(smi.Value(), cobject->value.as_int32); |
| 152 CheckEncodeMessage(cmessage); |
| 105 FreeDeserializedDartMessage(cmessage); | 153 FreeDeserializedDartMessage(cmessage); |
| 106 } | 154 } |
| 107 | 155 |
| 108 | 156 |
| 109 TEST_CASE(SerializeSmi2) { | 157 TEST_CASE(SerializeSmi2) { |
| 110 // Write snapshot with object content. | 158 // Write snapshot with object content. |
| 111 uint8_t* buffer; | 159 uint8_t* buffer; |
| 112 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); | 160 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| 113 const Smi& smi = Smi::Handle(Smi::New(-1)); | 161 const Smi& smi = Smi::Handle(Smi::New(-1)); |
| 114 writer.WriteObject(smi.raw()); | 162 writer.WriteObject(smi.raw()); |
| 115 writer.FinalizeBuffer(); | 163 writer.FinalizeBuffer(); |
| 116 | 164 |
| 117 // Create a snapshot object using the buffer. | 165 // Create a snapshot object using the buffer. |
| 118 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); | 166 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); |
| 119 | 167 |
| 120 // Read object back from the snapshot. | 168 // Read object back from the snapshot. |
| 121 SnapshotReader reader(snapshot, Isolate::Current()); | 169 SnapshotReader reader(snapshot, Isolate::Current()); |
| 122 const Object& serialized_object = Object::Handle(reader.ReadObject()); | 170 const Object& serialized_object = Object::Handle(reader.ReadObject()); |
| 123 EXPECT(Equals(smi, serialized_object)); | 171 EXPECT(Equals(smi, serialized_object)); |
| 124 | 172 |
| 125 // Read object back from the snapshot into a C structure. | 173 // Read object back from the snapshot into a C structure. |
| 126 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, | 174 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, |
| 127 writer.BytesWritten(), | 175 writer.BytesWritten(), |
| 128 &allocator); | 176 &allocator); |
| 129 Dart_CObject* cobject = cmessage->object; | 177 Dart_CObject* cobject = cmessage->object; |
| 130 EXPECT_NOTNULL(cobject); | 178 EXPECT_NOTNULL(cobject); |
| 131 EXPECT_EQ(Dart_CObject::kInt32, cobject->type); | 179 EXPECT_EQ(Dart_CObject::kInt32, cobject->type); |
| 132 EXPECT_EQ(smi.Value(), cobject->value.as_int32); | 180 EXPECT_EQ(smi.Value(), cobject->value.as_int32); |
| 181 CheckEncodeMessage(cmessage); |
| 133 FreeDeserializedDartMessage(cmessage); | 182 FreeDeserializedDartMessage(cmessage); |
| 134 } | 183 } |
| 135 | 184 |
| 136 | 185 |
| 137 TEST_CASE(SerializeDouble) { | 186 TEST_CASE(SerializeDouble) { |
| 138 // Write snapshot with object content. | 187 // Write snapshot with object content. |
| 139 uint8_t* buffer; | 188 uint8_t* buffer; |
| 140 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); | 189 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| 141 const Double& dbl = Double::Handle(Double::New(101.29)); | 190 const Double& dbl = Double::Handle(Double::New(101.29)); |
| 142 writer.WriteObject(dbl.raw()); | 191 writer.WriteObject(dbl.raw()); |
| 143 writer.FinalizeBuffer(); | 192 writer.FinalizeBuffer(); |
| 144 | 193 |
| 145 // Create a snapshot object using the buffer. | 194 // Create a snapshot object using the buffer. |
| 146 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); | 195 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); |
| 147 | 196 |
| 148 // Read object back from the snapshot. | 197 // Read object back from the snapshot. |
| 149 SnapshotReader reader(snapshot, Isolate::Current()); | 198 SnapshotReader reader(snapshot, Isolate::Current()); |
| 150 const Object& serialized_object = Object::Handle(reader.ReadObject()); | 199 const Object& serialized_object = Object::Handle(reader.ReadObject()); |
| 151 EXPECT(Equals(dbl, serialized_object)); | 200 EXPECT(Equals(dbl, serialized_object)); |
| 152 | 201 |
| 153 // Read object back from the snapshot into a C structure. | 202 // Read object back from the snapshot into a C structure. |
| 154 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, | 203 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, |
| 155 writer.BytesWritten(), | 204 writer.BytesWritten(), |
| 156 &allocator); | 205 &allocator); |
| 157 Dart_CObject* cobject = cmessage->object; | 206 Dart_CObject* cobject = cmessage->object; |
| 158 EXPECT_NOTNULL(cobject); | 207 EXPECT_NOTNULL(cobject); |
| 159 EXPECT_EQ(Dart_CObject::kDouble, cobject->type); | 208 EXPECT_EQ(Dart_CObject::kDouble, cobject->type); |
| 160 EXPECT_EQ(dbl.value(), cobject->value.as_double); | 209 EXPECT_EQ(dbl.value(), cobject->value.as_double); |
| 210 CheckEncodeMessage(cmessage); |
| 161 FreeDeserializedDartMessage(cmessage); | 211 FreeDeserializedDartMessage(cmessage); |
| 162 } | 212 } |
| 163 | 213 |
| 164 | 214 |
| 165 TEST_CASE(SerializeBool) { | 215 TEST_CASE(SerializeBool) { |
| 166 // Write snapshot with object content. | 216 // Write snapshot with object content. |
| 167 uint8_t* buffer; | 217 uint8_t* buffer; |
| 168 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); | 218 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| 169 const Bool& bool1 = Bool::Handle(Bool::True()); | 219 const Bool& bool1 = Bool::Handle(Bool::True()); |
| 170 const Bool& bool2 = Bool::Handle(Bool::False()); | 220 const Bool& bool2 = Bool::Handle(Bool::False()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 195 USE(snapshot); | 245 USE(snapshot); |
| 196 | 246 |
| 197 // Read object back from the snapshot into a C structure. | 247 // Read object back from the snapshot into a C structure. |
| 198 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, | 248 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, |
| 199 writer.BytesWritten(), | 249 writer.BytesWritten(), |
| 200 &allocator); | 250 &allocator); |
| 201 Dart_CObject* cobject = cmessage->object; | 251 Dart_CObject* cobject = cmessage->object; |
| 202 EXPECT_NOTNULL(cobject); | 252 EXPECT_NOTNULL(cobject); |
| 203 EXPECT_EQ(Dart_CObject::kBool, cobject->type); | 253 EXPECT_EQ(Dart_CObject::kBool, cobject->type); |
| 204 EXPECT_EQ(true, cobject->value.as_bool); | 254 EXPECT_EQ(true, cobject->value.as_bool); |
| 255 CheckEncodeMessage(cmessage); |
| 205 FreeDeserializedDartMessage(cmessage); | 256 FreeDeserializedDartMessage(cmessage); |
| 206 } | 257 } |
| 207 | 258 |
| 208 | 259 |
| 209 TEST_CASE(SerializeFalse) { | 260 TEST_CASE(SerializeFalse) { |
| 210 // Write snapshot with false object. | 261 // Write snapshot with false object. |
| 211 uint8_t* buffer; | 262 uint8_t* buffer; |
| 212 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); | 263 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| 213 const Bool& bl = Bool::Handle(Bool::False()); | 264 const Bool& bl = Bool::Handle(Bool::False()); |
| 214 writer.WriteObject(bl.raw()); | 265 writer.WriteObject(bl.raw()); |
| 215 writer.FinalizeBuffer(); | 266 writer.FinalizeBuffer(); |
| 216 | 267 |
| 217 // Create a snapshot object using the buffer. | 268 // Create a snapshot object using the buffer. |
| 218 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); | 269 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); |
| 219 USE(snapshot); | 270 USE(snapshot); |
| 220 | 271 |
| 221 // Read object back from the snapshot into a C structure. | 272 // Read object back from the snapshot into a C structure. |
| 222 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, | 273 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, |
| 223 writer.BytesWritten(), | 274 writer.BytesWritten(), |
| 224 &allocator); | 275 &allocator); |
| 225 Dart_CObject* cobject = cmessage->object; | 276 Dart_CObject* cobject = cmessage->object; |
| 226 EXPECT_NOTNULL(cobject); | 277 EXPECT_NOTNULL(cobject); |
| 227 EXPECT_EQ(Dart_CObject::kBool, cobject->type); | 278 EXPECT_EQ(Dart_CObject::kBool, cobject->type); |
| 228 EXPECT_EQ(false, cobject->value.as_bool); | 279 EXPECT_EQ(false, cobject->value.as_bool); |
| 280 CheckEncodeMessage(cmessage); |
| 229 FreeDeserializedDartMessage(cmessage); | 281 FreeDeserializedDartMessage(cmessage); |
| 230 } | 282 } |
| 231 | 283 |
| 232 | 284 |
| 233 TEST_CASE(SerializeBigint) { | 285 TEST_CASE(SerializeBigint) { |
| 234 // Write snapshot with object content. | 286 // Write snapshot with object content. |
| 235 uint8_t* buffer; | 287 uint8_t* buffer; |
| 236 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); | 288 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| 237 const Bigint& bigint = Bigint::Handle(Bigint::New(0xfffffffffLL)); | 289 const Bigint& bigint = Bigint::Handle(Bigint::New(0xfffffffffLL)); |
| 238 writer.WriteObject(bigint.raw()); | 290 writer.WriteObject(bigint.raw()); |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 serialized_str ^= reader.ReadObject(); | 381 serialized_str ^= reader.ReadObject(); |
| 330 EXPECT(str.Equals(serialized_str)); | 382 EXPECT(str.Equals(serialized_str)); |
| 331 | 383 |
| 332 // Read object back from the snapshot into a C structure. | 384 // Read object back from the snapshot into a C structure. |
| 333 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, | 385 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, |
| 334 writer.BytesWritten(), | 386 writer.BytesWritten(), |
| 335 &allocator); | 387 &allocator); |
| 336 Dart_CObject* cobject = cmessage->object; | 388 Dart_CObject* cobject = cmessage->object; |
| 337 EXPECT_EQ(Dart_CObject::kString, cobject->type); | 389 EXPECT_EQ(Dart_CObject::kString, cobject->type); |
| 338 EXPECT_STREQ(cstr, cobject->value.as_string); | 390 EXPECT_STREQ(cstr, cobject->value.as_string); |
| 391 CheckEncodeMessage(cmessage); |
| 339 FreeDeserializedDartMessage(cmessage); | 392 FreeDeserializedDartMessage(cmessage); |
| 340 } | 393 } |
| 341 | 394 |
| 342 | 395 |
| 343 TEST_CASE(SerializeArray) { | 396 TEST_CASE(SerializeArray) { |
| 344 // Write snapshot with object content. | 397 // Write snapshot with object content. |
| 345 uint8_t* buffer; | 398 uint8_t* buffer; |
| 346 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); | 399 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| 347 const int kArrayLength = 10; | 400 const int kArrayLength = 10; |
| 348 Array& array = Array::Handle(Array::New(kArrayLength)); | 401 Array& array = Array::Handle(Array::New(kArrayLength)); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 368 writer.BytesWritten(), | 421 writer.BytesWritten(), |
| 369 &allocator); | 422 &allocator); |
| 370 Dart_CObject* cobject = cmessage->object; | 423 Dart_CObject* cobject = cmessage->object; |
| 371 EXPECT_EQ(Dart_CObject::kArray, cobject->type); | 424 EXPECT_EQ(Dart_CObject::kArray, cobject->type); |
| 372 EXPECT_EQ(kArrayLength, cobject->value.as_array.length); | 425 EXPECT_EQ(kArrayLength, cobject->value.as_array.length); |
| 373 for (int i = 0; i < kArrayLength; i++) { | 426 for (int i = 0; i < kArrayLength; i++) { |
| 374 Dart_CObject* element = cobject->value.as_array.values[i]; | 427 Dart_CObject* element = cobject->value.as_array.values[i]; |
| 375 EXPECT_EQ(Dart_CObject::kInt32, element->type); | 428 EXPECT_EQ(Dart_CObject::kInt32, element->type); |
| 376 EXPECT_EQ(i, element->value.as_int32); | 429 EXPECT_EQ(i, element->value.as_int32); |
| 377 } | 430 } |
| 431 CheckEncodeMessage(cmessage); |
| 378 FreeDeserializedDartMessage(cmessage); | 432 FreeDeserializedDartMessage(cmessage); |
| 379 } | 433 } |
| 380 | 434 |
| 381 | 435 |
| 382 TEST_CASE(SerializeEmptyArray) { | 436 TEST_CASE(SerializeEmptyArray) { |
| 383 // Write snapshot with object content. | 437 // Write snapshot with object content. |
| 384 uint8_t* buffer; | 438 uint8_t* buffer; |
| 385 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); | 439 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| 386 const int kArrayLength = 0; | 440 const int kArrayLength = 0; |
| 387 Array& array = Array::Handle(Array::New(kArrayLength)); | 441 Array& array = Array::Handle(Array::New(kArrayLength)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 398 EXPECT(array.Equals(serialized_array)); | 452 EXPECT(array.Equals(serialized_array)); |
| 399 | 453 |
| 400 // Read object back from the snapshot into a C structure. | 454 // Read object back from the snapshot into a C structure. |
| 401 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, | 455 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, |
| 402 writer.BytesWritten(), | 456 writer.BytesWritten(), |
| 403 &allocator); | 457 &allocator); |
| 404 Dart_CObject* cobject = cmessage->object; | 458 Dart_CObject* cobject = cmessage->object; |
| 405 EXPECT_EQ(Dart_CObject::kArray, cobject->type); | 459 EXPECT_EQ(Dart_CObject::kArray, cobject->type); |
| 406 EXPECT_EQ(kArrayLength, cobject->value.as_array.length); | 460 EXPECT_EQ(kArrayLength, cobject->value.as_array.length); |
| 407 EXPECT(cobject->value.as_array.values == NULL); | 461 EXPECT(cobject->value.as_array.values == NULL); |
| 462 CheckEncodeMessage(cmessage); |
| 408 FreeDeserializedDartMessage(cmessage); | 463 FreeDeserializedDartMessage(cmessage); |
| 409 } | 464 } |
| 410 | 465 |
| 411 | 466 |
| 412 TEST_CASE(SerializeScript) { | 467 TEST_CASE(SerializeScript) { |
| 413 const char* kScriptChars = | 468 const char* kScriptChars = |
| 414 "class A {\n" | 469 "class A {\n" |
| 415 " static bar() { return 42; }\n" | 470 " static bar() { return 42; }\n" |
| 416 " static fly() { return 5; }\n" | 471 " static fly() { return 5; }\n" |
| 417 "}\n"; | 472 "}\n"; |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 700 writer.BytesWritten(), | 755 writer.BytesWritten(), |
| 701 &allocator); | 756 &allocator); |
| 702 Dart_CObject* cobject = cmessage->object; | 757 Dart_CObject* cobject = cmessage->object; |
| 703 EXPECT_EQ(Dart_CObject::kArray, cobject->type); | 758 EXPECT_EQ(Dart_CObject::kArray, cobject->type); |
| 704 EXPECT_EQ(kArrayLength, cobject->value.as_array.length); | 759 EXPECT_EQ(kArrayLength, cobject->value.as_array.length); |
| 705 for (int i = 0; i < kArrayLength; i++) { | 760 for (int i = 0; i < kArrayLength; i++) { |
| 706 Dart_CObject* element = cobject->value.as_array.values[i]; | 761 Dart_CObject* element = cobject->value.as_array.values[i]; |
| 707 EXPECT_EQ(Dart_CObject::kInt32, element->type); | 762 EXPECT_EQ(Dart_CObject::kInt32, element->type); |
| 708 EXPECT_EQ(i + 1, element->value.as_int32); | 763 EXPECT_EQ(i + 1, element->value.as_int32); |
| 709 } | 764 } |
| 765 CheckEncodeMessage(cmessage); |
| 710 FreeDeserializedDartMessage(cmessage); | 766 FreeDeserializedDartMessage(cmessage); |
| 711 } | 767 } |
| 712 | 768 |
| 713 | 769 |
| 714 // Helper function to call a top level Dart function, serialize the | 770 // Helper function to call a top level Dart function, serialize the |
| 715 // result and deserialize the result into a Dart_CObject structure. | 771 // result and deserialize the result into a Dart_CObject structure. |
| 716 static Dart_CMessage* GetDeserializedDartMessage(Dart_Handle lib, | 772 static Dart_CMessage* GetDeserializedDartMessage(Dart_Handle lib, |
| 717 const char* dart_function) { | 773 const char* dart_function) { |
| 718 Dart_Handle result; | 774 Dart_Handle result; |
| 719 result = Dart_InvokeStatic(lib, | 775 result = Dart_InvokeStatic(lib, |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 787 | 843 |
| 788 // Read object back from the snapshot into a C structure. | 844 // Read object back from the snapshot into a C structure. |
| 789 Dart_CMessage* cmessage = | 845 Dart_CMessage* cmessage = |
| 790 Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, | 846 Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, |
| 791 writer.BytesWritten(), | 847 writer.BytesWritten(), |
| 792 &allocator); | 848 &allocator); |
| 793 Dart_CObject* cobject = cmessage->object; | 849 Dart_CObject* cobject = cmessage->object; |
| 794 EXPECT_NOTNULL(cobject); | 850 EXPECT_NOTNULL(cobject); |
| 795 EXPECT_EQ(Dart_CObject::kInt32, cobject->type); | 851 EXPECT_EQ(Dart_CObject::kInt32, cobject->type); |
| 796 EXPECT_EQ(42, cobject->value.as_int32); | 852 EXPECT_EQ(42, cobject->value.as_int32); |
| 853 CheckEncodeMessage(cmessage); |
| 797 FreeDeserializedDartMessage(cmessage); | 854 FreeDeserializedDartMessage(cmessage); |
| 798 } | 855 } |
| 799 { | 856 { |
| 800 uint8_t* buffer; | 857 uint8_t* buffer; |
| 801 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); | 858 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| 802 String& str = String::Handle(); | 859 String& str = String::Handle(); |
| 803 str ^= Api::UnwrapHandle(string_result); | 860 str ^= Api::UnwrapHandle(string_result); |
| 804 writer.WriteObject(str.raw()); | 861 writer.WriteObject(str.raw()); |
| 805 writer.FinalizeBuffer(); | 862 writer.FinalizeBuffer(); |
| 806 | 863 |
| 807 // Read object back from the snapshot into a C structure. | 864 // Read object back from the snapshot into a C structure. |
| 808 Dart_CMessage* cmessage = | 865 Dart_CMessage* cmessage = |
| 809 Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, | 866 Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, |
| 810 writer.BytesWritten(), | 867 writer.BytesWritten(), |
| 811 &allocator); | 868 &allocator); |
| 812 Dart_CObject* cobject = cmessage->object; | 869 Dart_CObject* cobject = cmessage->object; |
| 813 EXPECT_NOTNULL(cobject); | 870 EXPECT_NOTNULL(cobject); |
| 814 EXPECT_EQ(Dart_CObject::kString, cobject->type); | 871 EXPECT_EQ(Dart_CObject::kString, cobject->type); |
| 815 EXPECT_STREQ("Hello, world!", cobject->value.as_string); | 872 EXPECT_STREQ("Hello, world!", cobject->value.as_string); |
| 873 CheckEncodeMessage(cmessage); |
| 816 FreeDeserializedDartMessage(cmessage); | 874 FreeDeserializedDartMessage(cmessage); |
| 817 } | 875 } |
| 818 } | 876 } |
| 819 Dart_ExitScope(); | 877 Dart_ExitScope(); |
| 820 Dart_ShutdownIsolate(); | 878 Dart_ShutdownIsolate(); |
| 821 } | 879 } |
| 822 | 880 |
| 823 | 881 |
| 824 UNIT_TEST_CASE(DartGeneratedListMessages) { | 882 UNIT_TEST_CASE(DartGeneratedListMessages) { |
| 825 const int kArrayLength = 10; | 883 const int kArrayLength = 10; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 850 TestCase::CreateTestIsolate(); | 908 TestCase::CreateTestIsolate(); |
| 851 Isolate* isolate = Isolate::Current(); | 909 Isolate* isolate = Isolate::Current(); |
| 852 EXPECT(isolate != NULL); | 910 EXPECT(isolate != NULL); |
| 853 Dart_EnterScope(); | 911 Dart_EnterScope(); |
| 854 | 912 |
| 855 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 913 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
| 856 EXPECT_VALID(lib); | 914 EXPECT_VALID(lib); |
| 857 | 915 |
| 858 { | 916 { |
| 859 DARTSCOPE_NOCHECKS(isolate); | 917 DARTSCOPE_NOCHECKS(isolate); |
| 860 | |
| 861 { | 918 { |
| 862 // Generate a list of nulls from Dart code. | 919 // Generate a list of nulls from Dart code. |
| 863 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getList"); | 920 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getList"); |
| 864 Dart_CObject* value = cmessage->object; | 921 Dart_CObject* value = cmessage->object; |
| 865 EXPECT_NOTNULL(value); | 922 EXPECT_NOTNULL(value); |
| 866 EXPECT_EQ(Dart_CObject::kArray, value->type); | 923 EXPECT_EQ(Dart_CObject::kArray, value->type); |
| 867 EXPECT_EQ(kArrayLength, value->value.as_array.length); | 924 EXPECT_EQ(kArrayLength, value->value.as_array.length); |
| 868 for (int i = 0; i < kArrayLength; i++) { | 925 for (int i = 0; i < kArrayLength; i++) { |
| 869 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type); | 926 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type); |
| 870 } | 927 } |
| 928 CheckEncodeMessage(cmessage); |
| 871 FreeDeserializedDartMessage(cmessage); | 929 FreeDeserializedDartMessage(cmessage); |
| 872 } | 930 } |
| 873 { | 931 { |
| 874 // Generate a list of ints from Dart code. | 932 // Generate a list of ints from Dart code. |
| 875 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getIntList"); | 933 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getIntList"); |
| 876 Dart_CObject* value = cmessage->object; | 934 Dart_CObject* value = cmessage->object; |
| 877 EXPECT_NOTNULL(value); | 935 EXPECT_NOTNULL(value); |
| 878 EXPECT_EQ(Dart_CObject::kArray, value->type); | 936 EXPECT_EQ(Dart_CObject::kArray, value->type); |
| 879 EXPECT_EQ(kArrayLength, value->value.as_array.length); | 937 EXPECT_EQ(kArrayLength, value->value.as_array.length); |
| 880 for (int i = 0; i < kArrayLength; i++) { | 938 for (int i = 0; i < kArrayLength; i++) { |
| 881 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[i]->type); | 939 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[i]->type); |
| 882 EXPECT_EQ(i, value->value.as_array.values[i]->value.as_int32); | 940 EXPECT_EQ(i, value->value.as_array.values[i]->value.as_int32); |
| 883 } | 941 } |
| 942 CheckEncodeMessage(cmessage); |
| 884 FreeDeserializedDartMessage(cmessage); | 943 FreeDeserializedDartMessage(cmessage); |
| 885 } | 944 } |
| 886 { | 945 { |
| 887 // Generate a list of strings from Dart code. | 946 // Generate a list of strings from Dart code. |
| 888 Dart_CMessage* cmessage = | 947 Dart_CMessage* cmessage = |
| 889 GetDeserializedDartMessage(lib, "getStringList"); | 948 GetDeserializedDartMessage(lib, "getStringList"); |
| 890 Dart_CObject* value = cmessage->object; | 949 Dart_CObject* value = cmessage->object; |
| 891 EXPECT_NOTNULL(value); | 950 EXPECT_NOTNULL(value); |
| 892 EXPECT_EQ(Dart_CObject::kArray, value->type); | 951 EXPECT_EQ(Dart_CObject::kArray, value->type); |
| 893 EXPECT_EQ(kArrayLength, value->value.as_array.length); | 952 EXPECT_EQ(kArrayLength, value->value.as_array.length); |
| 894 for (int i = 0; i < kArrayLength; i++) { | 953 for (int i = 0; i < kArrayLength; i++) { |
| 895 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[i]->type); | 954 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[i]->type); |
| 896 char buffer[3]; | 955 char buffer[3]; |
| 897 snprintf(buffer, sizeof(buffer), "%d", i); | 956 snprintf(buffer, sizeof(buffer), "%d", i); |
| 898 EXPECT_STREQ(buffer, value->value.as_array.values[i]->value.as_string); | 957 EXPECT_STREQ(buffer, value->value.as_array.values[i]->value.as_string); |
| 899 } | 958 } |
| 959 CheckEncodeMessage(cmessage); |
| 900 FreeDeserializedDartMessage(cmessage); | 960 FreeDeserializedDartMessage(cmessage); |
| 901 } | 961 } |
| 902 { | 962 { |
| 903 // Generate a list of objects of different types from Dart code. | 963 // Generate a list of objects of different types from Dart code. |
| 904 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getMixedList"); | 964 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getMixedList"); |
| 905 Dart_CObject* value = cmessage->object; | 965 Dart_CObject* value = cmessage->object; |
| 906 EXPECT_NOTNULL(value); | 966 EXPECT_NOTNULL(value); |
| 907 EXPECT_EQ(Dart_CObject::kArray, value->type); | 967 EXPECT_EQ(Dart_CObject::kArray, value->type); |
| 908 EXPECT_EQ(kArrayLength, value->value.as_array.length); | 968 EXPECT_EQ(kArrayLength, value->value.as_array.length); |
| 909 | 969 |
| 910 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[0]->type); | 970 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[0]->type); |
| 911 EXPECT_EQ(0, value->value.as_array.values[0]->value.as_int32); | 971 EXPECT_EQ(0, value->value.as_array.values[0]->value.as_int32); |
| 912 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[1]->type); | 972 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[1]->type); |
| 913 EXPECT_STREQ("1", value->value.as_array.values[1]->value.as_string); | 973 EXPECT_STREQ("1", value->value.as_array.values[1]->value.as_string); |
| 914 EXPECT_EQ(Dart_CObject::kDouble, value->value.as_array.values[2]->type); | 974 EXPECT_EQ(Dart_CObject::kDouble, value->value.as_array.values[2]->type); |
| 915 EXPECT_EQ(2.2, value->value.as_array.values[2]->value.as_double); | 975 EXPECT_EQ(2.2, value->value.as_array.values[2]->value.as_double); |
| 916 EXPECT_EQ(Dart_CObject::kBool, value->value.as_array.values[3]->type); | 976 EXPECT_EQ(Dart_CObject::kBool, value->value.as_array.values[3]->type); |
| 917 EXPECT_EQ(true, value->value.as_array.values[3]->value.as_bool); | 977 EXPECT_EQ(true, value->value.as_array.values[3]->value.as_bool); |
| 918 | 978 |
| 919 for (int i = 0; i < kArrayLength; i++) { | 979 for (int i = 0; i < kArrayLength; i++) { |
| 920 if (i > 3) { | 980 if (i > 3) { |
| 921 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type); | 981 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type); |
| 922 } | 982 } |
| 923 } | 983 } |
| 984 CheckEncodeMessage(cmessage); |
| 924 FreeDeserializedDartMessage(cmessage); | 985 FreeDeserializedDartMessage(cmessage); |
| 925 } | 986 } |
| 926 } | 987 } |
| 927 Dart_ExitScope(); | 988 Dart_ExitScope(); |
| 928 Dart_ShutdownIsolate(); | 989 Dart_ShutdownIsolate(); |
| 929 } | 990 } |
| 930 | 991 |
| 931 | 992 |
| 932 UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) { | 993 UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) { |
| 933 const int kArrayLength = 10; | 994 const int kArrayLength = 10; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 978 Dart_CObject* object = cmessage->object; | 1039 Dart_CObject* object = cmessage->object; |
| 979 EXPECT_NOTNULL(object); | 1040 EXPECT_NOTNULL(object); |
| 980 EXPECT_EQ(Dart_CObject::kArray, object->type); | 1041 EXPECT_EQ(Dart_CObject::kArray, object->type); |
| 981 EXPECT_EQ(kArrayLength, object->value.as_array.length); | 1042 EXPECT_EQ(kArrayLength, object->value.as_array.length); |
| 982 for (int i = 0; i < kArrayLength; i++) { | 1043 for (int i = 0; i < kArrayLength; i++) { |
| 983 Dart_CObject* element = object->value.as_array.values[i]; | 1044 Dart_CObject* element = object->value.as_array.values[i]; |
| 984 EXPECT_EQ(object->value.as_array.values[0], element); | 1045 EXPECT_EQ(object->value.as_array.values[0], element); |
| 985 EXPECT_EQ(Dart_CObject::kString, element->type); | 1046 EXPECT_EQ(Dart_CObject::kString, element->type); |
| 986 EXPECT_STREQ("Hello, world!", element->value.as_string); | 1047 EXPECT_STREQ("Hello, world!", element->value.as_string); |
| 987 } | 1048 } |
| 1049 CheckEncodeMessage(cmessage); |
| 988 FreeDeserializedDartMessage(cmessage); | 1050 FreeDeserializedDartMessage(cmessage); |
| 989 } | 1051 } |
| 990 { | 1052 { |
| 991 // Generate a list of doubles from Dart code. | 1053 // Generate a list of doubles from Dart code. |
| 992 Dart_CMessage* cmessage = | 1054 Dart_CMessage* cmessage = |
| 993 GetDeserializedDartMessage(lib, "getDoubleList"); | 1055 GetDeserializedDartMessage(lib, "getDoubleList"); |
| 994 Dart_CObject* object = cmessage->object; | 1056 Dart_CObject* object = cmessage->object; |
| 995 EXPECT_NOTNULL(object); | 1057 EXPECT_NOTNULL(object); |
| 996 EXPECT_EQ(Dart_CObject::kArray, object->type); | 1058 EXPECT_EQ(Dart_CObject::kArray, object->type); |
| 997 EXPECT_EQ(kArrayLength, object->value.as_array.length); | 1059 EXPECT_EQ(kArrayLength, object->value.as_array.length); |
| 998 for (int i = 0; i < kArrayLength; i++) { | 1060 for (int i = 0; i < kArrayLength; i++) { |
| 999 Dart_CObject* element = object->value.as_array.values[i]; | 1061 Dart_CObject* element = object->value.as_array.values[i]; |
| 1000 EXPECT_EQ(object->value.as_array.values[0], element); | 1062 EXPECT_EQ(object->value.as_array.values[0], element); |
| 1001 EXPECT_EQ(Dart_CObject::kDouble, element->type); | 1063 EXPECT_EQ(Dart_CObject::kDouble, element->type); |
| 1002 EXPECT_EQ(3.14, element->value.as_double); | 1064 EXPECT_EQ(3.14, element->value.as_double); |
| 1003 } | 1065 } |
| 1066 CheckEncodeMessage(cmessage); |
| 1004 FreeDeserializedDartMessage(cmessage); | 1067 FreeDeserializedDartMessage(cmessage); |
| 1005 } | 1068 } |
| 1006 { | 1069 { |
| 1007 // Generate a list of objects of different types from Dart code. | 1070 // Generate a list of objects of different types from Dart code. |
| 1008 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getMixedList"); | 1071 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getMixedList"); |
| 1009 Dart_CObject* object = cmessage->object; | 1072 Dart_CObject* object = cmessage->object; |
| 1010 EXPECT_NOTNULL(object); | 1073 EXPECT_NOTNULL(object); |
| 1011 EXPECT_EQ(Dart_CObject::kArray, object->type); | 1074 EXPECT_EQ(Dart_CObject::kArray, object->type); |
| 1012 EXPECT_EQ(kArrayLength, object->value.as_array.length); | 1075 EXPECT_EQ(kArrayLength, object->value.as_array.length); |
| 1013 for (int i = 0; i < kArrayLength; i++) { | 1076 for (int i = 0; i < kArrayLength; i++) { |
| 1014 Dart_CObject* element = object->value.as_array.values[i]; | 1077 Dart_CObject* element = object->value.as_array.values[i]; |
| 1015 if ((i % 2) == 0) { | 1078 if ((i % 2) == 0) { |
| 1016 EXPECT_EQ(object->value.as_array.values[0], element); | 1079 EXPECT_EQ(object->value.as_array.values[0], element); |
| 1017 EXPECT_EQ(Dart_CObject::kString, element->type); | 1080 EXPECT_EQ(Dart_CObject::kString, element->type); |
| 1018 EXPECT_STREQ("A", element->value.as_string); | 1081 EXPECT_STREQ("A", element->value.as_string); |
| 1019 } else { | 1082 } else { |
| 1020 EXPECT_EQ(object->value.as_array.values[1], element); | 1083 EXPECT_EQ(object->value.as_array.values[1], element); |
| 1021 EXPECT_EQ(Dart_CObject::kDouble, element->type); | 1084 EXPECT_EQ(Dart_CObject::kDouble, element->type); |
| 1022 EXPECT_STREQ(2.72, element->value.as_double); | 1085 EXPECT_STREQ(2.72, element->value.as_double); |
| 1023 } | 1086 } |
| 1024 } | 1087 } |
| 1088 CheckEncodeMessage(cmessage); |
| 1025 FreeDeserializedDartMessage(cmessage); | 1089 FreeDeserializedDartMessage(cmessage); |
| 1026 } | 1090 } |
| 1027 { | 1091 { |
| 1028 // Generate a list of objects of different types from Dart code. | 1092 // Generate a list of objects of different types from Dart code. |
| 1029 Dart_CMessage* cmessage = | 1093 Dart_CMessage* cmessage = |
| 1030 GetDeserializedDartMessage(lib, "getSelfRefList"); | 1094 GetDeserializedDartMessage(lib, "getSelfRefList"); |
| 1031 Dart_CObject* object = cmessage->object; | 1095 Dart_CObject* object = cmessage->object; |
| 1032 EXPECT_NOTNULL(object); | 1096 EXPECT_NOTNULL(object); |
| 1033 EXPECT_EQ(Dart_CObject::kArray, object->type); | 1097 EXPECT_EQ(Dart_CObject::kArray, object->type); |
| 1034 EXPECT_EQ(kArrayLength, object->value.as_array.length); | 1098 EXPECT_EQ(kArrayLength, object->value.as_array.length); |
| 1035 for (int i = 0; i < kArrayLength; i++) { | 1099 for (int i = 0; i < kArrayLength; i++) { |
| 1036 Dart_CObject* element = object->value.as_array.values[i]; | 1100 Dart_CObject* element = object->value.as_array.values[i]; |
| 1037 EXPECT_EQ(Dart_CObject::kArray, element->type); | 1101 EXPECT_EQ(Dart_CObject::kArray, element->type); |
| 1038 EXPECT_EQ(object, element); | 1102 EXPECT_EQ(object, element); |
| 1039 } | 1103 } |
| 1104 CheckEncodeMessage(cmessage); |
| 1040 FreeDeserializedDartMessage(cmessage); | 1105 FreeDeserializedDartMessage(cmessage); |
| 1041 } | 1106 } |
| 1042 } | 1107 } |
| 1043 Dart_ExitScope(); | 1108 Dart_ExitScope(); |
| 1044 Dart_ShutdownIsolate(); | 1109 Dart_ShutdownIsolate(); |
| 1045 } | 1110 } |
| 1046 | 1111 |
| 1047 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). | 1112 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). |
| 1048 | 1113 |
| 1049 } // namespace dart | 1114 } // namespace dart |
| OLD | NEW |