Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Side by Side Diff: runtime/vm/snapshot_test.cc

Issue 9159066: Allocate a Dart_CMessage structure when decoding a message into C structures (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« runtime/vm/snapshot.cc ('K') | « runtime/vm/snapshot.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 24 matching lines...) Expand all
35 } 35 }
36 return false; 36 return false;
37 } 37 }
38 38
39 39
40 static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) { 40 static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) {
41 return reinterpret_cast<uint8_t*>(realloc(ptr, new_size)); 41 return reinterpret_cast<uint8_t*>(realloc(ptr, new_size));
42 } 42 }
43 43
44 44
45 static void FreeDeserializedDartMessage(Dart_CMessage* cmessage) {
46 for (int i = 0; i < cmessage->allocated_length; i++) {
47 free(cmessage->allocated[i]);
48 }
49 free(cmessage->original_message - Snapshot::kHeaderSize);
50 free(cmessage);
51 }
52
53
45 TEST_CASE(SerializeNull) { 54 TEST_CASE(SerializeNull) {
46 // Write snapshot with object content. 55 // Write snapshot with object content.
47 uint8_t* buffer; 56 uint8_t* buffer;
48 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 57 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
49 const Object& null_object = Object::Handle(); 58 const Object& null_object = Object::Handle();
50 writer.WriteObject(null_object.raw()); 59 writer.WriteObject(null_object.raw());
51 writer.FinalizeBuffer(); 60 writer.FinalizeBuffer();
52 61
53 // Create a snapshot object using the buffer. 62 // Create a snapshot object using the buffer.
54 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 63 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
55 64
56 // Read object back from the snapshot. 65 // Read object back from the snapshot.
57 SnapshotReader reader(snapshot, Isolate::Current()); 66 SnapshotReader reader(snapshot, Isolate::Current());
58 const Object& serialized_object = Object::Handle(reader.ReadObject()); 67 const Object& serialized_object = Object::Handle(reader.ReadObject());
59 EXPECT(Equals(null_object, serialized_object)); 68 EXPECT(Equals(null_object, serialized_object));
60 69
61 // Read object back from the snapshot into a C structure. 70 // Read object back from the snapshot into a C structure.
siva 2012/02/01 01:48:36 If you start a Zone here and use a zone allocator
Søren Gjesse 2012/02/01 12:12:23 Agree. But I wanted to cover the case where the em
62 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 71 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
63 writer.BytesWritten(), 72 writer.BytesWritten(),
64 &allocator); 73 &allocator);
65 Dart_CObject* cobject = mreader.ReadObject(); 74 Dart_CObject* cobject = cmessage->object;
66 EXPECT_NOTNULL(cobject); 75 EXPECT_NOTNULL(cobject);
67 EXPECT_EQ(Dart_CObject::kNull, cobject->type); 76 EXPECT_EQ(Dart_CObject::kNull, cobject->type);
68 free(cobject); 77 FreeDeserializedDartMessage(cmessage);
69 } 78 }
70 79
71 80
72 TEST_CASE(SerializeSmi1) { 81 TEST_CASE(SerializeSmi1) {
73 // Write snapshot with object content. 82 // Write snapshot with object content.
74 uint8_t* buffer; 83 uint8_t* buffer;
75 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 84 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
76 const Smi& smi = Smi::Handle(Smi::New(124)); 85 const Smi& smi = Smi::Handle(Smi::New(124));
77 writer.WriteObject(smi.raw()); 86 writer.WriteObject(smi.raw());
78 writer.FinalizeBuffer(); 87 writer.FinalizeBuffer();
79 88
80 // Create a snapshot object using the buffer. 89 // Create a snapshot object using the buffer.
81 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 90 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
82 91
83 // Read object back from the snapshot. 92 // Read object back from the snapshot.
84 SnapshotReader reader(snapshot, Isolate::Current()); 93 SnapshotReader reader(snapshot, Isolate::Current());
85 const Object& serialized_object = Object::Handle(reader.ReadObject()); 94 const Object& serialized_object = Object::Handle(reader.ReadObject());
86 EXPECT(Equals(smi, serialized_object)); 95 EXPECT(Equals(smi, serialized_object));
87 96
88 // Read object back from the snapshot into a C structure. 97 // Read object back from the snapshot into a C structure.
89 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 98 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
90 writer.BytesWritten(), 99 writer.BytesWritten(),
91 &allocator); 100 &allocator);
92 Dart_CObject* cobject = mreader.ReadObject(); 101 Dart_CObject* cobject = cmessage->object;
93 EXPECT_NOTNULL(cobject); 102 EXPECT_NOTNULL(cobject);
94 EXPECT_EQ(Dart_CObject::kInt32, cobject->type); 103 EXPECT_EQ(Dart_CObject::kInt32, cobject->type);
95 EXPECT_EQ(smi.Value(), cobject->value.as_int32); 104 EXPECT_EQ(smi.Value(), cobject->value.as_int32);
96 free(cobject); 105 FreeDeserializedDartMessage(cmessage);
siva 2012/02/01 01:48:36 Ditto comment here and below about not needing Fre
Søren Gjesse 2012/02/01 12:12:23 See above.
97 } 106 }
98 107
99 108
100 TEST_CASE(SerializeSmi2) { 109 TEST_CASE(SerializeSmi2) {
101 // Write snapshot with object content. 110 // Write snapshot with object content.
102 uint8_t* buffer; 111 uint8_t* buffer;
103 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 112 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
104 const Smi& smi = Smi::Handle(Smi::New(-1)); 113 const Smi& smi = Smi::Handle(Smi::New(-1));
105 writer.WriteObject(smi.raw()); 114 writer.WriteObject(smi.raw());
106 writer.FinalizeBuffer(); 115 writer.FinalizeBuffer();
107 116
108 // Create a snapshot object using the buffer. 117 // Create a snapshot object using the buffer.
109 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 118 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
110 119
111 // Read object back from the snapshot. 120 // Read object back from the snapshot.
112 SnapshotReader reader(snapshot, Isolate::Current()); 121 SnapshotReader reader(snapshot, Isolate::Current());
113 const Object& serialized_object = Object::Handle(reader.ReadObject()); 122 const Object& serialized_object = Object::Handle(reader.ReadObject());
114 EXPECT(Equals(smi, serialized_object)); 123 EXPECT(Equals(smi, serialized_object));
115 124
116 // Read object back from the snapshot into a C structure. 125 // Read object back from the snapshot into a C structure.
117 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 126 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
118 writer.BytesWritten(), 127 writer.BytesWritten(),
119 &allocator); 128 &allocator);
120 Dart_CObject* cobject = mreader.ReadObject(); 129 Dart_CObject* cobject = cmessage->object;
121 EXPECT_NOTNULL(cobject); 130 EXPECT_NOTNULL(cobject);
122 EXPECT_EQ(Dart_CObject::kInt32, cobject->type); 131 EXPECT_EQ(Dart_CObject::kInt32, cobject->type);
123 EXPECT_EQ(smi.Value(), cobject->value.as_int32); 132 EXPECT_EQ(smi.Value(), cobject->value.as_int32);
124 free(cobject); 133 FreeDeserializedDartMessage(cmessage);
125 } 134 }
126 135
127 136
128 TEST_CASE(SerializeDouble) { 137 TEST_CASE(SerializeDouble) {
129 // Write snapshot with object content. 138 // Write snapshot with object content.
130 uint8_t* buffer; 139 uint8_t* buffer;
131 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 140 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
132 const Double& dbl = Double::Handle(Double::New(101.29)); 141 const Double& dbl = Double::Handle(Double::New(101.29));
133 writer.WriteObject(dbl.raw()); 142 writer.WriteObject(dbl.raw());
134 writer.FinalizeBuffer(); 143 writer.FinalizeBuffer();
135 144
136 // Create a snapshot object using the buffer. 145 // Create a snapshot object using the buffer.
137 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 146 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
138 147
139 // Read object back from the snapshot. 148 // Read object back from the snapshot.
140 SnapshotReader reader(snapshot, Isolate::Current()); 149 SnapshotReader reader(snapshot, Isolate::Current());
141 const Object& serialized_object = Object::Handle(reader.ReadObject()); 150 const Object& serialized_object = Object::Handle(reader.ReadObject());
142 EXPECT(Equals(dbl, serialized_object)); 151 EXPECT(Equals(dbl, serialized_object));
143 152
144 // Read object back from the snapshot into a C structure. 153 // Read object back from the snapshot into a C structure.
145 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 154 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
146 writer.BytesWritten(), 155 writer.BytesWritten(),
147 &allocator); 156 &allocator);
148 Dart_CObject* cobject = mreader.ReadObject(); 157 Dart_CObject* cobject = cmessage->object;
149 EXPECT_NOTNULL(cobject); 158 EXPECT_NOTNULL(cobject);
150 EXPECT_EQ(Dart_CObject::kDouble, cobject->type); 159 EXPECT_EQ(Dart_CObject::kDouble, cobject->type);
151 EXPECT_EQ(dbl.value(), cobject->value.as_double); 160 EXPECT_EQ(dbl.value(), cobject->value.as_double);
152 free(cobject); 161 FreeDeserializedDartMessage(cmessage);
153 } 162 }
154 163
155 164
156 TEST_CASE(SerializeBool) { 165 TEST_CASE(SerializeBool) {
157 // Write snapshot with object content. 166 // Write snapshot with object content.
158 uint8_t* buffer; 167 uint8_t* buffer;
159 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 168 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
160 const Bool& bool1 = Bool::Handle(Bool::True()); 169 const Bool& bool1 = Bool::Handle(Bool::True());
161 const Bool& bool2 = Bool::Handle(Bool::False()); 170 const Bool& bool2 = Bool::Handle(Bool::False());
162 writer.WriteObject(bool1.raw()); 171 writer.WriteObject(bool1.raw());
163 writer.WriteObject(bool2.raw()); 172 writer.WriteObject(bool2.raw());
164 writer.FinalizeBuffer(); 173 writer.FinalizeBuffer();
165 174
166 // Create a snapshot object using the buffer. 175 // Create a snapshot object using the buffer.
167 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 176 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
168 177
169 // Read object back from the snapshot. 178 // Read object back from the snapshot.
170 SnapshotReader reader(snapshot, Isolate::Current()); 179 SnapshotReader reader(snapshot, Isolate::Current());
171 EXPECT(Bool::True() == reader.ReadObject()); 180 EXPECT(Bool::True() == reader.ReadObject());
172 EXPECT(Bool::False() == reader.ReadObject()); 181 EXPECT(Bool::False() == reader.ReadObject());
173
174 // Read object back from the snapshot into a C structure.
175 CMessageReader mreader(buffer + Snapshot::kHeaderSize,
176 writer.BytesWritten(),
177 &allocator);
178 Dart_CObject* cobject1 = mreader.ReadObject();
179 EXPECT_NOTNULL(cobject1);
180 EXPECT_EQ(Dart_CObject::kBool, cobject1->type);
181 EXPECT_EQ(true, cobject1->value.as_bool);
182 Dart_CObject* cobject2 = mreader.ReadObject();
183 EXPECT_NOTNULL(cobject2);
184 EXPECT_EQ(Dart_CObject::kBool, cobject2->type);
185 EXPECT_EQ(false, cobject2->value.as_bool);
186 free(cobject1);
187 free(cobject2);
188 } 182 }
189 183
190 184
185 TEST_CASE(SerializeTrue) {
186 // Write snapshot with true object.
187 uint8_t* buffer;
188 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
189 const Bool& bl = Bool::Handle(Bool::True());
190 writer.WriteObject(bl.raw());
191 writer.FinalizeBuffer();
192
193 // Create a snapshot object using the buffer.
194 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
195 USE(snapshot);
siva 2012/02/01 01:48:36 Why not just Snapshot::SetupFromBuffer(buffer);
Søren Gjesse 2012/02/01 12:12:23 Done.
196
197 // Read object back from the snapshot into a C structure.
198 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
199 writer.BytesWritten(),
200 &allocator);
201 Dart_CObject* cobject = cmessage->object;
202 EXPECT_NOTNULL(cobject);
203 EXPECT_EQ(Dart_CObject::kBool, cobject->type);
204 EXPECT_EQ(true, cobject->value.as_bool);
205 FreeDeserializedDartMessage(cmessage);
206 }
207
208
209 TEST_CASE(SerializeFalse) {
210 // Write snapshot with false object.
211 uint8_t* buffer;
212 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
213 const Bool& bl = Bool::Handle(Bool::False());
214 writer.WriteObject(bl.raw());
215 writer.FinalizeBuffer();
216
217 // Create a snapshot object using the buffer.
218 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
219 USE(snapshot);
siva 2012/02/01 01:48:36 Ditto.
Søren Gjesse 2012/02/01 12:12:23 Done.
220
221 // Read object back from the snapshot into a C structure.
222 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
223 writer.BytesWritten(),
224 &allocator);
225 Dart_CObject* cobject = cmessage->object;
226 EXPECT_NOTNULL(cobject);
227 EXPECT_EQ(Dart_CObject::kBool, cobject->type);
228 EXPECT_EQ(false, cobject->value.as_bool);
229 FreeDeserializedDartMessage(cmessage);
230 }
231
232
191 TEST_CASE(SerializeBigint) { 233 TEST_CASE(SerializeBigint) {
192 // Write snapshot with object content. 234 // Write snapshot with object content.
193 uint8_t* buffer; 235 uint8_t* buffer;
194 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 236 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
195 const Bigint& bigint = Bigint::Handle(Bigint::New(0xfffffffffLL)); 237 const Bigint& bigint = Bigint::Handle(Bigint::New(0xfffffffffLL));
196 writer.WriteObject(bigint.raw()); 238 writer.WriteObject(bigint.raw());
197 writer.FinalizeBuffer(); 239 writer.FinalizeBuffer();
198 240
199 // Create a snapshot object using the buffer. 241 // Create a snapshot object using the buffer.
200 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 242 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
201 243
202 // Read object back from the snapshot. 244 // Read object back from the snapshot.
203 SnapshotReader reader(snapshot, Isolate::Current()); 245 SnapshotReader reader(snapshot, Isolate::Current());
204 Bigint& obj = Bigint::Handle(); 246 Bigint& obj = Bigint::Handle();
205 obj ^= reader.ReadObject(); 247 obj ^= reader.ReadObject();
206 OS::Print("%lld", BigintOperations::ToInt64(obj)); 248 OS::Print("%lld", BigintOperations::ToInt64(obj));
207 EXPECT_EQ(BigintOperations::ToInt64(bigint), BigintOperations::ToInt64(obj)); 249 EXPECT_EQ(BigintOperations::ToInt64(bigint), BigintOperations::ToInt64(obj));
208 250
209 // Read object back from the snapshot into a C structure. 251 // Read object back from the snapshot into a C structure.
210 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 252 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
211 writer.BytesWritten(), 253 writer.BytesWritten(),
212 &allocator); 254 &allocator);
213 Dart_CObject* cobject = mreader.ReadObject(); 255 Dart_CObject* cobject = cmessage->object;
214 // Bigint not supported. 256 // Bigint not supported.
215 EXPECT(cobject == NULL); 257 EXPECT(cobject == NULL);
258 FreeDeserializedDartMessage(cmessage);
216 } 259 }
217 260
218 261
219 TEST_CASE(SerializeSingletons) { 262 TEST_CASE(SerializeSingletons) {
220 // Write snapshot with object content. 263 // Write snapshot with object content.
221 uint8_t* buffer; 264 uint8_t* buffer;
222 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 265 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
223 writer.WriteObject(Object::class_class()); 266 writer.WriteObject(Object::class_class());
224 writer.WriteObject(Object::null_class()); 267 writer.WriteObject(Object::null_class());
225 writer.WriteObject(Object::type_class()); 268 writer.WriteObject(Object::type_class());
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 // Create a snapshot object using the buffer. 323 // Create a snapshot object using the buffer.
281 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 324 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
282 325
283 // Read object back from the snapshot. 326 // Read object back from the snapshot.
284 SnapshotReader reader(snapshot, Isolate::Current()); 327 SnapshotReader reader(snapshot, Isolate::Current());
285 String& serialized_str = String::Handle(); 328 String& serialized_str = String::Handle();
286 serialized_str ^= reader.ReadObject(); 329 serialized_str ^= reader.ReadObject();
287 EXPECT(str.Equals(serialized_str)); 330 EXPECT(str.Equals(serialized_str));
288 331
289 // Read object back from the snapshot into a C structure. 332 // Read object back from the snapshot into a C structure.
290 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 333 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
291 writer.BytesWritten(), 334 writer.BytesWritten(),
292 &allocator); 335 &allocator);
293 Dart_CObject* cobject = mreader.ReadObject(); 336 Dart_CObject* cobject = cmessage->object;
294 EXPECT_EQ(Dart_CObject::kString, cobject->type); 337 EXPECT_EQ(Dart_CObject::kString, cobject->type);
295 EXPECT_STREQ(cstr, cobject->value.as_string); 338 EXPECT_STREQ(cstr, cobject->value.as_string);
296 free(cobject); 339 FreeDeserializedDartMessage(cmessage);
297 } 340 }
298 341
299 342
300 TEST_CASE(SerializeArray) { 343 TEST_CASE(SerializeArray) {
301 // Write snapshot with object content. 344 // Write snapshot with object content.
302 uint8_t* buffer; 345 uint8_t* buffer;
303 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 346 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
304 const int kArrayLength = 10; 347 const int kArrayLength = 10;
305 Array& array = Array::Handle(Array::New(kArrayLength)); 348 Array& array = Array::Handle(Array::New(kArrayLength));
306 Smi& smi = Smi::Handle(); 349 Smi& smi = Smi::Handle();
307 for (int i = 0; i < kArrayLength; i++) { 350 for (int i = 0; i < kArrayLength; i++) {
308 smi ^= Smi::New(i); 351 smi ^= Smi::New(i);
309 array.SetAt(i, smi); 352 array.SetAt(i, smi);
310 } 353 }
311 writer.WriteObject(array.raw()); 354 writer.WriteObject(array.raw());
312 writer.FinalizeBuffer(); 355 writer.FinalizeBuffer();
313 356
314 // Create a snapshot object using the buffer. 357 // Create a snapshot object using the buffer.
315 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 358 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
316 359
317 // Read object back from the snapshot. 360 // Read object back from the snapshot.
318 SnapshotReader reader(snapshot, Isolate::Current()); 361 SnapshotReader reader(snapshot, Isolate::Current());
319 Array& serialized_array = Array::Handle(); 362 Array& serialized_array = Array::Handle();
320 serialized_array ^= reader.ReadObject(); 363 serialized_array ^= reader.ReadObject();
321 EXPECT(array.Equals(serialized_array)); 364 EXPECT(array.Equals(serialized_array));
322 365
323 // Read object back from the snapshot into a C structure. 366 // Read object back from the snapshot into a C structure.
324 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 367 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
325 writer.BytesWritten(), 368 writer.BytesWritten(),
326 &allocator); 369 &allocator);
327 Dart_CObject* cobject = mreader.ReadObject(); 370 Dart_CObject* cobject = cmessage->object;
328 EXPECT_EQ(Dart_CObject::kArray, cobject->type); 371 EXPECT_EQ(Dart_CObject::kArray, cobject->type);
329 EXPECT_EQ(kArrayLength, cobject->value.as_array.length); 372 EXPECT_EQ(kArrayLength, cobject->value.as_array.length);
330 for (int i = 0; i < kArrayLength; i++) { 373 for (int i = 0; i < kArrayLength; i++) {
331 Dart_CObject* element = cobject->value.as_array.values[i]; 374 Dart_CObject* element = cobject->value.as_array.values[i];
332 EXPECT_EQ(Dart_CObject::kInt32, element->type); 375 EXPECT_EQ(Dart_CObject::kInt32, element->type);
333 EXPECT_EQ(i, element->value.as_int32); 376 EXPECT_EQ(i, element->value.as_int32);
334 free(element);
335 } 377 }
336 free(cobject); 378 FreeDeserializedDartMessage(cmessage);
337 } 379 }
338 380
339 381
340 TEST_CASE(SerializeEmptyArray) { 382 TEST_CASE(SerializeEmptyArray) {
341 // Write snapshot with object content. 383 // Write snapshot with object content.
342 uint8_t* buffer; 384 uint8_t* buffer;
343 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 385 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
344 const int kArrayLength = 0; 386 const int kArrayLength = 0;
345 Array& array = Array::Handle(Array::New(kArrayLength)); 387 Array& array = Array::Handle(Array::New(kArrayLength));
346 writer.WriteObject(array.raw()); 388 writer.WriteObject(array.raw());
347 writer.FinalizeBuffer(); 389 writer.FinalizeBuffer();
348 390
349 // Create a snapshot object using the buffer. 391 // Create a snapshot object using the buffer.
350 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 392 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
351 393
352 // Read object back from the snapshot. 394 // Read object back from the snapshot.
353 SnapshotReader reader(snapshot, Isolate::Current()); 395 SnapshotReader reader(snapshot, Isolate::Current());
354 Array& serialized_array = Array::Handle(); 396 Array& serialized_array = Array::Handle();
355 serialized_array ^= reader.ReadObject(); 397 serialized_array ^= reader.ReadObject();
356 EXPECT(array.Equals(serialized_array)); 398 EXPECT(array.Equals(serialized_array));
357 399
358 // Read object back from the snapshot into a C structure. 400 // Read object back from the snapshot into a C structure.
359 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 401 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
360 writer.BytesWritten(), 402 writer.BytesWritten(),
361 &allocator); 403 &allocator);
362 Dart_CObject* cobject = mreader.ReadObject(); 404 Dart_CObject* cobject = cmessage->object;
363 EXPECT_EQ(Dart_CObject::kArray, cobject->type); 405 EXPECT_EQ(Dart_CObject::kArray, cobject->type);
364 EXPECT_EQ(kArrayLength, cobject->value.as_array.length); 406 EXPECT_EQ(kArrayLength, cobject->value.as_array.length);
365 EXPECT(cobject->value.as_array.values == NULL); 407 EXPECT(cobject->value.as_array.values == NULL);
366 free(cobject); 408 FreeDeserializedDartMessage(cmessage);
367 } 409 }
368 410
369 411
370 TEST_CASE(SerializeScript) { 412 TEST_CASE(SerializeScript) {
371 const char* kScriptChars = 413 const char* kScriptChars =
372 "class A {\n" 414 "class A {\n"
373 " static bar() { return 42; }\n" 415 " static bar() { return 42; }\n"
374 " static fly() { return 5; }\n" 416 " static fly() { return 5; }\n"
375 "}\n"; 417 "}\n";
376 418
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 TEST_CASE(IntArrayMessage) { 689 TEST_CASE(IntArrayMessage) {
648 uint8_t* buffer = NULL; 690 uint8_t* buffer = NULL;
649 MessageWriter writer(&buffer, &allocator); 691 MessageWriter writer(&buffer, &allocator);
650 692
651 static const int kArrayLength = 2; 693 static const int kArrayLength = 2;
652 intptr_t data[kArrayLength] = {1, 2}; 694 intptr_t data[kArrayLength] = {1, 2};
653 int len = kArrayLength; 695 int len = kArrayLength;
654 writer.WriteMessage(len, data); 696 writer.WriteMessage(len, data);
655 697
656 // Read object back from the snapshot into a C structure. 698 // Read object back from the snapshot into a C structure.
657 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 699 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
658 writer.BytesWritten(), 700 writer.BytesWritten(),
659 &allocator); 701 &allocator);
660 Dart_CObject* value = mreader.ReadObject(); 702 Dart_CObject* cobject = cmessage->object;
661 EXPECT_EQ(Dart_CObject::kArray, value->type); 703 EXPECT_EQ(Dart_CObject::kArray, cobject->type);
662 EXPECT_EQ(kArrayLength, value->value.as_array.length); 704 EXPECT_EQ(kArrayLength, cobject->value.as_array.length);
663 for (int i = 0; i < kArrayLength; i++) { 705 for (int i = 0; i < kArrayLength; i++) {
664 Dart_CObject* element = value->value.as_array.values[i]; 706 Dart_CObject* element = cobject->value.as_array.values[i];
665 EXPECT_EQ(Dart_CObject::kInt32, element->type); 707 EXPECT_EQ(Dart_CObject::kInt32, element->type);
666 EXPECT_EQ(i + 1, element->value.as_int32); 708 EXPECT_EQ(i + 1, element->value.as_int32);
667 free(element);
668 } 709 }
669 free(value); 710 FreeDeserializedDartMessage(cmessage);
670 } 711 }
671 712
672 713
673 // Helper function to call a top level Dart function, serialize the 714 // Helper function to call a top level Dart function, serialize the
674 // result and deserialize the result into a Dart_CObject structure. 715 // result and deserialize the result into a Dart_CObject structure.
675 static Dart_CObject* GetDeserializedDartObject(Dart_Handle lib, 716 static Dart_CMessage* GetDeserializedDartMessage(Dart_Handle lib,
676 const char* dart_function) { 717 const char* dart_function) {
677 Dart_Handle result; 718 Dart_Handle result;
678 result = Dart_InvokeStatic(lib, 719 result = Dart_InvokeStatic(lib,
679 Dart_NewString(""), 720 Dart_NewString(""),
680 Dart_NewString(dart_function), 721 Dart_NewString(dart_function),
681 0, 722 0,
682 NULL); 723 NULL);
683 EXPECT_VALID(result); 724 EXPECT_VALID(result);
684 725
685 // Serialize the list into a message. 726 // Serialize the list into a message.
686 uint8_t* buffer; 727 uint8_t* buffer;
687 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 728 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
688 const Object& list = Object::Handle(Api::UnwrapHandle(result)); 729 const Object& list = Object::Handle(Api::UnwrapHandle(result));
689 writer.WriteObject(list.raw()); 730 writer.WriteObject(list.raw());
690 writer.FinalizeBuffer(); 731 writer.FinalizeBuffer();
691 732
692 // Read object back from the snapshot into a C structure. 733 // Read object back from the snapshot into a C structure.
693 CMessageReader reader(buffer + Snapshot::kHeaderSize, 734 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
694 writer.BytesWritten(), 735 writer.BytesWritten(),
695 &allocator); 736 &allocator);
696 Dart_CObject* value = reader.ReadObject(); 737 return cmessage;
697 free(buffer);
698 return value;
699 } 738 }
700 739
701 740
702 UNIT_TEST_CASE(DartGeneratedMessages) { 741 UNIT_TEST_CASE(DartGeneratedMessages) {
703 static const char* kCustomIsolateScriptChars = 742 static const char* kCustomIsolateScriptChars =
704 "getSmi() {\n" 743 "getSmi() {\n"
705 " return 42;\n" 744 " return 42;\n"
706 "}\n" 745 "}\n"
707 "getString() {\n" 746 "getString() {\n"
708 " return \"Hello, world!\";\n" 747 " return \"Hello, world!\";\n"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 779
741 { 780 {
742 uint8_t* buffer; 781 uint8_t* buffer;
743 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 782 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
744 Smi& smi = Smi::Handle(); 783 Smi& smi = Smi::Handle();
745 smi ^= Api::UnwrapHandle(smi_result); 784 smi ^= Api::UnwrapHandle(smi_result);
746 writer.WriteObject(smi.raw()); 785 writer.WriteObject(smi.raw());
747 writer.FinalizeBuffer(); 786 writer.FinalizeBuffer();
748 787
749 // Read object back from the snapshot into a C structure. 788 // Read object back from the snapshot into a C structure.
750 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 789 Dart_CMessage* cmessage =
790 Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
751 writer.BytesWritten(), 791 writer.BytesWritten(),
752 &allocator); 792 &allocator);
753 Dart_CObject* value = mreader.ReadObject(); 793 Dart_CObject* cobject = cmessage->object;
754 EXPECT_NOTNULL(value); 794 EXPECT_NOTNULL(cobject);
755 EXPECT_EQ(Dart_CObject::kInt32, value->type); 795 EXPECT_EQ(Dart_CObject::kInt32, cobject->type);
756 EXPECT_EQ(42, value->value.as_int32); 796 EXPECT_EQ(42, cobject->value.as_int32);
757 free(value); 797 FreeDeserializedDartMessage(cmessage);
758 free(buffer);
759 } 798 }
760 { 799 {
761 uint8_t* buffer; 800 uint8_t* buffer;
762 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 801 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
763 String& str = String::Handle(); 802 String& str = String::Handle();
764 str ^= Api::UnwrapHandle(string_result); 803 str ^= Api::UnwrapHandle(string_result);
765 writer.WriteObject(str.raw()); 804 writer.WriteObject(str.raw());
766 writer.FinalizeBuffer(); 805 writer.FinalizeBuffer();
767 806
768 // Read object back from the snapshot into a C structure. 807 // Read object back from the snapshot into a C structure.
769 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 808 Dart_CMessage* cmessage =
809 Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
770 writer.BytesWritten(), 810 writer.BytesWritten(),
771 &allocator); 811 &allocator);
772 Dart_CObject* value = mreader.ReadObject(); 812 Dart_CObject* cobject = cmessage->object;
773 EXPECT_NOTNULL(value); 813 EXPECT_NOTNULL(cobject);
774 EXPECT_EQ(Dart_CObject::kString, value->type); 814 EXPECT_EQ(Dart_CObject::kString, cobject->type);
775 EXPECT_STREQ("Hello, world!", value->value.as_string); 815 EXPECT_STREQ("Hello, world!", cobject->value.as_string);
776 free(value); 816 FreeDeserializedDartMessage(cmessage);
777 free(buffer);
778 } 817 }
779 } 818 }
780 Dart_ExitScope(); 819 Dart_ExitScope();
781 Dart_ShutdownIsolate(); 820 Dart_ShutdownIsolate();
782 } 821 }
783 822
784 823
785 UNIT_TEST_CASE(DartGeneratedListMessages) { 824 UNIT_TEST_CASE(DartGeneratedListMessages) {
786 const int kArrayLength = 10; 825 const int kArrayLength = 10;
787 static const char* kScriptChars = 826 static const char* kScriptChars =
(...skipping 26 matching lines...) Expand all
814 Dart_EnterScope(); 853 Dart_EnterScope();
815 854
816 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 855 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
817 EXPECT_VALID(lib); 856 EXPECT_VALID(lib);
818 857
819 { 858 {
820 DARTSCOPE_NOCHECKS(isolate); 859 DARTSCOPE_NOCHECKS(isolate);
821 860
822 { 861 {
823 // Generate a list of nulls from Dart code. 862 // Generate a list of nulls from Dart code.
824 Dart_CObject* value = GetDeserializedDartObject(lib, "getList"); 863 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getList");
864 Dart_CObject* value = cmessage->object;
825 EXPECT_NOTNULL(value); 865 EXPECT_NOTNULL(value);
826 EXPECT_EQ(Dart_CObject::kArray, value->type); 866 EXPECT_EQ(Dart_CObject::kArray, value->type);
827 EXPECT_EQ(kArrayLength, value->value.as_array.length); 867 EXPECT_EQ(kArrayLength, value->value.as_array.length);
828 for (int i = 0; i < kArrayLength; i++) { 868 for (int i = 0; i < kArrayLength; i++) {
829 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type); 869 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type);
830 free(value->value.as_array.values[i]);
831 } 870 }
832 free(value); 871 FreeDeserializedDartMessage(cmessage);
833 } 872 }
834 { 873 {
835 // Generate a list of ints from Dart code. 874 // Generate a list of ints from Dart code.
836 Dart_CObject* value = GetDeserializedDartObject(lib, "getIntList"); 875 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getIntList");
876 Dart_CObject* value = cmessage->object;
837 EXPECT_NOTNULL(value); 877 EXPECT_NOTNULL(value);
838 EXPECT_EQ(Dart_CObject::kArray, value->type); 878 EXPECT_EQ(Dart_CObject::kArray, value->type);
839 EXPECT_EQ(kArrayLength, value->value.as_array.length); 879 EXPECT_EQ(kArrayLength, value->value.as_array.length);
840 for (int i = 0; i < kArrayLength; i++) { 880 for (int i = 0; i < kArrayLength; i++) {
841 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[i]->type); 881 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[i]->type);
842 EXPECT_EQ(i, value->value.as_array.values[i]->value.as_int32); 882 EXPECT_EQ(i, value->value.as_array.values[i]->value.as_int32);
843 free(value->value.as_array.values[i]);
844 } 883 }
845 free(value); 884 FreeDeserializedDartMessage(cmessage);
846 } 885 }
847 { 886 {
848 // Generate a list of strings from Dart code. 887 // Generate a list of strings from Dart code.
849 Dart_CObject* value = GetDeserializedDartObject(lib, "getStringList"); 888 Dart_CMessage* cmessage =
889 GetDeserializedDartMessage(lib, "getStringList");
890 Dart_CObject* value = cmessage->object;
850 EXPECT_NOTNULL(value); 891 EXPECT_NOTNULL(value);
851 EXPECT_EQ(Dart_CObject::kArray, value->type); 892 EXPECT_EQ(Dart_CObject::kArray, value->type);
852 EXPECT_EQ(kArrayLength, value->value.as_array.length); 893 EXPECT_EQ(kArrayLength, value->value.as_array.length);
853 for (int i = 0; i < kArrayLength; i++) { 894 for (int i = 0; i < kArrayLength; i++) {
854 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[i]->type); 895 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[i]->type);
855 char buffer[3]; 896 char buffer[3];
856 snprintf(buffer, sizeof(buffer), "%d", i); 897 snprintf(buffer, sizeof(buffer), "%d", i);
857 EXPECT_STREQ(buffer, value->value.as_array.values[i]->value.as_string); 898 EXPECT_STREQ(buffer, value->value.as_array.values[i]->value.as_string);
858 free(value->value.as_array.values[i]);
859 } 899 }
860 free(value); 900 FreeDeserializedDartMessage(cmessage);
861 } 901 }
862 { 902 {
863 // Generate a list of objects of different types from Dart code. 903 // Generate a list of objects of different types from Dart code.
864 Dart_CObject* value = GetDeserializedDartObject(lib, "getMixedList"); 904 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getMixedList");
905 Dart_CObject* value = cmessage->object;
865 EXPECT_NOTNULL(value); 906 EXPECT_NOTNULL(value);
866 EXPECT_EQ(Dart_CObject::kArray, value->type); 907 EXPECT_EQ(Dart_CObject::kArray, value->type);
867 EXPECT_EQ(kArrayLength, value->value.as_array.length); 908 EXPECT_EQ(kArrayLength, value->value.as_array.length);
868 909
869 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[0]->type); 910 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[0]->type);
870 EXPECT_EQ(0, value->value.as_array.values[0]->value.as_int32); 911 EXPECT_EQ(0, value->value.as_array.values[0]->value.as_int32);
871 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[1]->type); 912 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[1]->type);
872 EXPECT_STREQ("1", value->value.as_array.values[1]->value.as_string); 913 EXPECT_STREQ("1", value->value.as_array.values[1]->value.as_string);
873 EXPECT_EQ(Dart_CObject::kDouble, value->value.as_array.values[2]->type); 914 EXPECT_EQ(Dart_CObject::kDouble, value->value.as_array.values[2]->type);
874 EXPECT_EQ(2.2, value->value.as_array.values[2]->value.as_double); 915 EXPECT_EQ(2.2, value->value.as_array.values[2]->value.as_double);
875 EXPECT_EQ(Dart_CObject::kBool, value->value.as_array.values[3]->type); 916 EXPECT_EQ(Dart_CObject::kBool, value->value.as_array.values[3]->type);
876 EXPECT_EQ(true, value->value.as_array.values[3]->value.as_bool); 917 EXPECT_EQ(true, value->value.as_array.values[3]->value.as_bool);
877 918
878 for (int i = 0; i < kArrayLength; i++) { 919 for (int i = 0; i < kArrayLength; i++) {
879 if (i > 3) { 920 if (i > 3) {
880 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type); 921 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type);
881 } 922 }
882 free(value->value.as_array.values[i]);
883 } 923 }
884 free(value); 924 FreeDeserializedDartMessage(cmessage);
885 } 925 }
886 } 926 }
887 Dart_ExitScope(); 927 Dart_ExitScope();
888 Dart_ShutdownIsolate(); 928 Dart_ShutdownIsolate();
889 } 929 }
890 930
891 931
892 UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) { 932 UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
893 const int kArrayLength = 10; 933 const int kArrayLength = 10;
894 static const char* kScriptChars = 934 static const char* kScriptChars =
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
926 Dart_EnterScope(); 966 Dart_EnterScope();
927 967
928 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 968 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
929 EXPECT_VALID(lib); 969 EXPECT_VALID(lib);
930 970
931 { 971 {
932 DARTSCOPE_NOCHECKS(isolate); 972 DARTSCOPE_NOCHECKS(isolate);
933 973
934 { 974 {
935 // Generate a list of strings from Dart code. 975 // Generate a list of strings from Dart code.
936 Dart_CObject* object = GetDeserializedDartObject(lib, "getStringList"); 976 Dart_CMessage* cmessage =
977 GetDeserializedDartMessage(lib, "getStringList");
978 Dart_CObject* object = cmessage->object;
937 EXPECT_NOTNULL(object); 979 EXPECT_NOTNULL(object);
938 EXPECT_EQ(Dart_CObject::kArray, object->type); 980 EXPECT_EQ(Dart_CObject::kArray, object->type);
939 EXPECT_EQ(kArrayLength, object->value.as_array.length); 981 EXPECT_EQ(kArrayLength, object->value.as_array.length);
940 for (int i = 0; i < kArrayLength; i++) { 982 for (int i = 0; i < kArrayLength; i++) {
941 Dart_CObject* element = object->value.as_array.values[i]; 983 Dart_CObject* element = object->value.as_array.values[i];
942 EXPECT_EQ(object->value.as_array.values[0], element); 984 EXPECT_EQ(object->value.as_array.values[0], element);
943 EXPECT_EQ(Dart_CObject::kString, element->type); 985 EXPECT_EQ(Dart_CObject::kString, element->type);
944 EXPECT_STREQ("Hello, world!", element->value.as_string); 986 EXPECT_STREQ("Hello, world!", element->value.as_string);
945 } 987 }
946 free(object->value.as_array.values[0]); 988 FreeDeserializedDartMessage(cmessage);
947 free(object);
948 } 989 }
949 { 990 {
950 // Generate a list of doubles from Dart code. 991 // Generate a list of doubles from Dart code.
951 Dart_CObject* object = GetDeserializedDartObject(lib, "getDoubleList"); 992 Dart_CMessage* cmessage =
993 GetDeserializedDartMessage(lib, "getDoubleList");
994 Dart_CObject* object = cmessage->object;
952 EXPECT_NOTNULL(object); 995 EXPECT_NOTNULL(object);
953 EXPECT_EQ(Dart_CObject::kArray, object->type); 996 EXPECT_EQ(Dart_CObject::kArray, object->type);
954 EXPECT_EQ(kArrayLength, object->value.as_array.length); 997 EXPECT_EQ(kArrayLength, object->value.as_array.length);
955 for (int i = 0; i < kArrayLength; i++) { 998 for (int i = 0; i < kArrayLength; i++) {
956 Dart_CObject* element = object->value.as_array.values[i]; 999 Dart_CObject* element = object->value.as_array.values[i];
957 EXPECT_EQ(object->value.as_array.values[0], element); 1000 EXPECT_EQ(object->value.as_array.values[0], element);
958 EXPECT_EQ(Dart_CObject::kDouble, element->type); 1001 EXPECT_EQ(Dart_CObject::kDouble, element->type);
959 EXPECT_EQ(3.14, element->value.as_double); 1002 EXPECT_EQ(3.14, element->value.as_double);
960 } 1003 }
961 free(object->value.as_array.values[0]); 1004 FreeDeserializedDartMessage(cmessage);
962 free(object);
963 } 1005 }
964 { 1006 {
965 // Generate a list of objects of different types from Dart code. 1007 // Generate a list of objects of different types from Dart code.
966 Dart_CObject* object = GetDeserializedDartObject(lib, "getMixedList"); 1008 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getMixedList");
1009 Dart_CObject* object = cmessage->object;
967 EXPECT_NOTNULL(object); 1010 EXPECT_NOTNULL(object);
968 EXPECT_EQ(Dart_CObject::kArray, object->type); 1011 EXPECT_EQ(Dart_CObject::kArray, object->type);
969 EXPECT_EQ(kArrayLength, object->value.as_array.length); 1012 EXPECT_EQ(kArrayLength, object->value.as_array.length);
970 for (int i = 0; i < kArrayLength; i++) { 1013 for (int i = 0; i < kArrayLength; i++) {
971 Dart_CObject* element = object->value.as_array.values[i]; 1014 Dart_CObject* element = object->value.as_array.values[i];
972 if ((i % 2) == 0) { 1015 if ((i % 2) == 0) {
973 EXPECT_EQ(object->value.as_array.values[0], element); 1016 EXPECT_EQ(object->value.as_array.values[0], element);
974 EXPECT_EQ(Dart_CObject::kString, element->type); 1017 EXPECT_EQ(Dart_CObject::kString, element->type);
975 EXPECT_STREQ("A", element->value.as_string); 1018 EXPECT_STREQ("A", element->value.as_string);
976 } else { 1019 } else {
977 EXPECT_EQ(object->value.as_array.values[1], element); 1020 EXPECT_EQ(object->value.as_array.values[1], element);
978 EXPECT_EQ(Dart_CObject::kDouble, element->type); 1021 EXPECT_EQ(Dart_CObject::kDouble, element->type);
979 EXPECT_STREQ(2.72, element->value.as_double); 1022 EXPECT_STREQ(2.72, element->value.as_double);
980 } 1023 }
981 } 1024 }
982 free(object->value.as_array.values[0]); 1025 FreeDeserializedDartMessage(cmessage);
983 free(object->value.as_array.values[1]);
984 free(object);
985 } 1026 }
986 { 1027 {
987 // Generate a list of objects of different types from Dart code. 1028 // Generate a list of objects of different types from Dart code.
988 Dart_CObject* object = GetDeserializedDartObject(lib, "getSelfRefList"); 1029 Dart_CMessage* cmessage =
1030 GetDeserializedDartMessage(lib, "getSelfRefList");
1031 Dart_CObject* object = cmessage->object;
989 EXPECT_NOTNULL(object); 1032 EXPECT_NOTNULL(object);
990 EXPECT_EQ(Dart_CObject::kArray, object->type); 1033 EXPECT_EQ(Dart_CObject::kArray, object->type);
991 EXPECT_EQ(kArrayLength, object->value.as_array.length); 1034 EXPECT_EQ(kArrayLength, object->value.as_array.length);
992 for (int i = 0; i < kArrayLength; i++) { 1035 for (int i = 0; i < kArrayLength; i++) {
993 Dart_CObject* element = object->value.as_array.values[i]; 1036 Dart_CObject* element = object->value.as_array.values[i];
994 EXPECT_EQ(Dart_CObject::kArray, element->type); 1037 EXPECT_EQ(Dart_CObject::kArray, element->type);
995 EXPECT_EQ(object, element); 1038 EXPECT_EQ(object, element);
996 } 1039 }
997 free(object); 1040 FreeDeserializedDartMessage(cmessage);
998 } 1041 }
999 } 1042 }
1000 Dart_ExitScope(); 1043 Dart_ExitScope();
1001 Dart_ShutdownIsolate(); 1044 Dart_ShutdownIsolate();
1002 } 1045 }
1003 1046
1004 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). 1047 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
1005 1048
1006 } // namespace dart 1049 } // namespace dart
OLDNEW
« runtime/vm/snapshot.cc ('K') | « runtime/vm/snapshot.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698