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

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: Removed dummy changes from dart_api_impl.cc 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
« no previous file with comments | « 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 19 matching lines...) Expand all
30 dbl1 ^= expected.raw(); 30 dbl1 ^= expected.raw();
31 dbl2 ^= actual.raw(); 31 dbl2 ^= actual.raw();
32 return dbl1.value() == dbl2.value(); 32 return dbl1.value() == dbl2.value();
33 } 33 }
34 return false; 34 return false;
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* malloc_allocator(
41 uint8_t* ptr, intptr_t old_size, intptr_t new_size) {
41 return reinterpret_cast<uint8_t*>(realloc(ptr, new_size)); 42 return reinterpret_cast<uint8_t*>(realloc(ptr, new_size));
42 } 43 }
43 44
44 45
46 static uint8_t* zone_allocator(
47 uint8_t* ptr, intptr_t old_size, intptr_t new_size) {
48 Zone* zone = Isolate::Current()->current_zone();
49 return reinterpret_cast<uint8_t*>(
50 zone->Reallocate(reinterpret_cast<uword>(ptr), old_size, new_size));
51 }
52
53
54 static Dart_CMessage* DecodeMessage(uint8_t* message,
55 intptr_t length,
56 ReAlloc allocator) {
57 CMessageReader message_reader(message, length, allocator);
58 return message_reader.ReadMessage();
59 }
60
61
45 TEST_CASE(SerializeNull) { 62 TEST_CASE(SerializeNull) {
46 // Write snapshot with object content. 63 // Write snapshot with object content.
47 uint8_t* buffer; 64 uint8_t* buffer;
48 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 65 SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
49 const Object& null_object = Object::Handle(); 66 const Object& null_object = Object::Handle();
50 writer.WriteObject(null_object.raw()); 67 writer.WriteObject(null_object.raw());
51 writer.FinalizeBuffer(); 68 writer.FinalizeBuffer();
52 69
53 // Create a snapshot object using the buffer. 70 // Create a snapshot object using the buffer.
54 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 71 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
55 72
56 // Read object back from the snapshot. 73 // Read object back from the snapshot.
57 SnapshotReader reader(snapshot, Isolate::Current()); 74 SnapshotReader reader(snapshot, Isolate::Current());
58 const Object& serialized_object = Object::Handle(reader.ReadObject()); 75 const Object& serialized_object = Object::Handle(reader.ReadObject());
59 EXPECT(Equals(null_object, serialized_object)); 76 EXPECT(Equals(null_object, serialized_object));
60 77
61 // Read object back from the snapshot into a C structure. 78 // Read object back from the snapshot into a C structure.
62 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 79 Zone zone(Isolate::Current());
63 writer.BytesWritten(), 80 Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize,
64 &allocator); 81 writer.BytesWritten(),
65 Dart_CObject* cobject = mreader.ReadObject(); 82 &zone_allocator);
83 Dart_CObject* cobject = cmessage->root;
66 EXPECT_NOTNULL(cobject); 84 EXPECT_NOTNULL(cobject);
67 EXPECT_EQ(Dart_CObject::kNull, cobject->type); 85 EXPECT_EQ(Dart_CObject::kNull, cobject->type);
siva 2012/02/02 03:46:45 I think there was a leak originally in this test c
Søren Gjesse 2012/02/02 10:49:33 Changed to use zone allocator in all tests involvi
68 free(cobject);
69 } 86 }
70 87
71 88
72 TEST_CASE(SerializeSmi1) { 89 TEST_CASE(SerializeSmi1) {
73 // Write snapshot with object content. 90 // Write snapshot with object content.
74 uint8_t* buffer; 91 uint8_t* buffer;
75 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 92 SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
76 const Smi& smi = Smi::Handle(Smi::New(124)); 93 const Smi& smi = Smi::Handle(Smi::New(124));
77 writer.WriteObject(smi.raw()); 94 writer.WriteObject(smi.raw());
78 writer.FinalizeBuffer(); 95 writer.FinalizeBuffer();
79 96
80 // Create a snapshot object using the buffer. 97 // Create a snapshot object using the buffer.
81 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 98 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
82 99
83 // Read object back from the snapshot. 100 // Read object back from the snapshot.
84 SnapshotReader reader(snapshot, Isolate::Current()); 101 SnapshotReader reader(snapshot, Isolate::Current());
85 const Object& serialized_object = Object::Handle(reader.ReadObject()); 102 const Object& serialized_object = Object::Handle(reader.ReadObject());
86 EXPECT(Equals(smi, serialized_object)); 103 EXPECT(Equals(smi, serialized_object));
87 104
88 // Read object back from the snapshot into a C structure. 105 // Read object back from the snapshot into a C structure.
89 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 106 Zone zone(Isolate::Current());
90 writer.BytesWritten(), 107 Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize,
91 &allocator); 108 writer.BytesWritten(),
92 Dart_CObject* cobject = mreader.ReadObject(); 109 &zone_allocator);
110 Dart_CObject* cobject = cmessage->root;
93 EXPECT_NOTNULL(cobject); 111 EXPECT_NOTNULL(cobject);
94 EXPECT_EQ(Dart_CObject::kInt32, cobject->type); 112 EXPECT_EQ(Dart_CObject::kInt32, cobject->type);
95 EXPECT_EQ(smi.Value(), cobject->value.as_int32); 113 EXPECT_EQ(smi.Value(), cobject->value.as_int32);
96 free(cobject);
97 } 114 }
98 115
99 116
100 TEST_CASE(SerializeSmi2) { 117 TEST_CASE(SerializeSmi2) {
101 // Write snapshot with object content. 118 // Write snapshot with object content.
102 uint8_t* buffer; 119 uint8_t* buffer;
103 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 120 SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
104 const Smi& smi = Smi::Handle(Smi::New(-1)); 121 const Smi& smi = Smi::Handle(Smi::New(-1));
105 writer.WriteObject(smi.raw()); 122 writer.WriteObject(smi.raw());
106 writer.FinalizeBuffer(); 123 writer.FinalizeBuffer();
107 124
108 // Create a snapshot object using the buffer. 125 // Create a snapshot object using the buffer.
109 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 126 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
110 127
111 // Read object back from the snapshot. 128 // Read object back from the snapshot.
112 SnapshotReader reader(snapshot, Isolate::Current()); 129 SnapshotReader reader(snapshot, Isolate::Current());
113 const Object& serialized_object = Object::Handle(reader.ReadObject()); 130 const Object& serialized_object = Object::Handle(reader.ReadObject());
114 EXPECT(Equals(smi, serialized_object)); 131 EXPECT(Equals(smi, serialized_object));
115 132
116 // Read object back from the snapshot into a C structure. 133 // Read object back from the snapshot into a C structure.
117 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 134 Zone zone(Isolate::Current());
118 writer.BytesWritten(), 135 Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize,
119 &allocator); 136 writer.BytesWritten(),
120 Dart_CObject* cobject = mreader.ReadObject(); 137 &zone_allocator);
138 Dart_CObject* cobject = cmessage->root;
121 EXPECT_NOTNULL(cobject); 139 EXPECT_NOTNULL(cobject);
122 EXPECT_EQ(Dart_CObject::kInt32, cobject->type); 140 EXPECT_EQ(Dart_CObject::kInt32, cobject->type);
123 EXPECT_EQ(smi.Value(), cobject->value.as_int32); 141 EXPECT_EQ(smi.Value(), cobject->value.as_int32);
124 free(cobject);
125 } 142 }
126 143
127 144
128 TEST_CASE(SerializeDouble) { 145 TEST_CASE(SerializeDouble) {
129 // Write snapshot with object content. 146 // Write snapshot with object content.
130 uint8_t* buffer; 147 uint8_t* buffer;
131 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 148 SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
132 const Double& dbl = Double::Handle(Double::New(101.29)); 149 const Double& dbl = Double::Handle(Double::New(101.29));
133 writer.WriteObject(dbl.raw()); 150 writer.WriteObject(dbl.raw());
134 writer.FinalizeBuffer(); 151 writer.FinalizeBuffer();
135 152
136 // Create a snapshot object using the buffer. 153 // Create a snapshot object using the buffer.
137 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 154 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
138 155
139 // Read object back from the snapshot. 156 // Read object back from the snapshot.
140 SnapshotReader reader(snapshot, Isolate::Current()); 157 SnapshotReader reader(snapshot, Isolate::Current());
141 const Object& serialized_object = Object::Handle(reader.ReadObject()); 158 const Object& serialized_object = Object::Handle(reader.ReadObject());
142 EXPECT(Equals(dbl, serialized_object)); 159 EXPECT(Equals(dbl, serialized_object));
143 160
144 // Read object back from the snapshot into a C structure. 161 // Read object back from the snapshot into a C structure.
145 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 162 Zone zone(Isolate::Current());
146 writer.BytesWritten(), 163 Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize,
147 &allocator); 164 writer.BytesWritten(),
148 Dart_CObject* cobject = mreader.ReadObject(); 165 &zone_allocator);
166 Dart_CObject* cobject = cmessage->root;
149 EXPECT_NOTNULL(cobject); 167 EXPECT_NOTNULL(cobject);
150 EXPECT_EQ(Dart_CObject::kDouble, cobject->type); 168 EXPECT_EQ(Dart_CObject::kDouble, cobject->type);
151 EXPECT_EQ(dbl.value(), cobject->value.as_double); 169 EXPECT_EQ(dbl.value(), cobject->value.as_double);
152 free(cobject);
153 } 170 }
154 171
155 172
156 TEST_CASE(SerializeBool) { 173 TEST_CASE(SerializeBool) {
157 // Write snapshot with object content. 174 // Write snapshot with object content.
158 uint8_t* buffer; 175 uint8_t* buffer;
159 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 176 SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
160 const Bool& bool1 = Bool::Handle(Bool::True()); 177 const Bool& bool1 = Bool::Handle(Bool::True());
161 const Bool& bool2 = Bool::Handle(Bool::False()); 178 const Bool& bool2 = Bool::Handle(Bool::False());
162 writer.WriteObject(bool1.raw()); 179 writer.WriteObject(bool1.raw());
163 writer.WriteObject(bool2.raw()); 180 writer.WriteObject(bool2.raw());
164 writer.FinalizeBuffer(); 181 writer.FinalizeBuffer();
165 182
166 // Create a snapshot object using the buffer. 183 // Create a snapshot object using the buffer.
167 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 184 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
168 185
169 // Read object back from the snapshot. 186 // Read object back from the snapshot.
170 SnapshotReader reader(snapshot, Isolate::Current()); 187 SnapshotReader reader(snapshot, Isolate::Current());
171 EXPECT(Bool::True() == reader.ReadObject()); 188 EXPECT(Bool::True() == reader.ReadObject());
172 EXPECT(Bool::False() == reader.ReadObject()); 189 EXPECT(Bool::False() == reader.ReadObject());
190 }
191
192
193 TEST_CASE(SerializeTrue) {
194 // Write snapshot with true object.
195 uint8_t* buffer;
196 SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
197 const Bool& bl = Bool::Handle(Bool::True());
198 writer.WriteObject(bl.raw());
199 writer.FinalizeBuffer();
200
201 // Create a snapshot object using the buffer.
202 Snapshot::SetupFromBuffer(buffer);
173 203
174 // Read object back from the snapshot into a C structure. 204 // Read object back from the snapshot into a C structure.
175 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 205 Zone zone(Isolate::Current());
176 writer.BytesWritten(), 206 Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize,
177 &allocator); 207 writer.BytesWritten(),
178 Dart_CObject* cobject1 = mreader.ReadObject(); 208 &zone_allocator);
179 EXPECT_NOTNULL(cobject1); 209 Dart_CObject* cobject = cmessage->root;
180 EXPECT_EQ(Dart_CObject::kBool, cobject1->type); 210 EXPECT_NOTNULL(cobject);
181 EXPECT_EQ(true, cobject1->value.as_bool); 211 EXPECT_EQ(Dart_CObject::kBool, cobject->type);
182 Dart_CObject* cobject2 = mreader.ReadObject(); 212 EXPECT_EQ(true, cobject->value.as_bool);
183 EXPECT_NOTNULL(cobject2); 213 }
184 EXPECT_EQ(Dart_CObject::kBool, cobject2->type); 214
185 EXPECT_EQ(false, cobject2->value.as_bool); 215
186 free(cobject1); 216 TEST_CASE(SerializeFalse) {
187 free(cobject2); 217 // Write snapshot with false object.
218 uint8_t* buffer;
219 SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
220 const Bool& bl = Bool::Handle(Bool::False());
221 writer.WriteObject(bl.raw());
222 writer.FinalizeBuffer();
223
224 // Create a snapshot object using the buffer.
225 Snapshot::SetupFromBuffer(buffer);
226
227 // Read object back from the snapshot into a C structure.
228 Zone zone(Isolate::Current());
229 Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize,
230 writer.BytesWritten(),
231 &zone_allocator);
232 Dart_CObject* cobject = cmessage->root;
233 EXPECT_NOTNULL(cobject);
234 EXPECT_EQ(Dart_CObject::kBool, cobject->type);
235 EXPECT_EQ(false, cobject->value.as_bool);
188 } 236 }
189 237
190 238
191 TEST_CASE(SerializeBigint) { 239 TEST_CASE(SerializeBigint) {
192 // Write snapshot with object content. 240 // Write snapshot with object content.
193 uint8_t* buffer; 241 uint8_t* buffer;
194 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 242 SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
195 const Bigint& bigint = Bigint::Handle(Bigint::New(0xfffffffffLL)); 243 const Bigint& bigint = Bigint::Handle(Bigint::New(0xfffffffffLL));
196 writer.WriteObject(bigint.raw()); 244 writer.WriteObject(bigint.raw());
197 writer.FinalizeBuffer(); 245 writer.FinalizeBuffer();
198 246
199 // Create a snapshot object using the buffer. 247 // Create a snapshot object using the buffer.
200 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 248 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
201 249
202 // Read object back from the snapshot. 250 // Read object back from the snapshot.
203 SnapshotReader reader(snapshot, Isolate::Current()); 251 SnapshotReader reader(snapshot, Isolate::Current());
204 Bigint& obj = Bigint::Handle(); 252 Bigint& obj = Bigint::Handle();
205 obj ^= reader.ReadObject(); 253 obj ^= reader.ReadObject();
206 OS::Print("%lld", BigintOperations::ToInt64(obj)); 254 OS::Print("%lld", BigintOperations::ToInt64(obj));
207 EXPECT_EQ(BigintOperations::ToInt64(bigint), BigintOperations::ToInt64(obj)); 255 EXPECT_EQ(BigintOperations::ToInt64(bigint), BigintOperations::ToInt64(obj));
208 256
209 // Read object back from the snapshot into a C structure. 257 // Read object back from the snapshot into a C structure.
210 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 258 Zone zone(Isolate::Current());
211 writer.BytesWritten(), 259 Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize,
212 &allocator); 260 writer.BytesWritten(),
213 Dart_CObject* cobject = mreader.ReadObject(); 261 &zone_allocator);
262 Dart_CObject* cobject = cmessage->root;
214 // Bigint not supported. 263 // Bigint not supported.
215 EXPECT(cobject == NULL); 264 EXPECT(cobject == NULL);
216 } 265 }
217 266
218 267
219 TEST_CASE(SerializeSingletons) { 268 TEST_CASE(SerializeSingletons) {
220 // Write snapshot with object content. 269 // Write snapshot with object content.
221 uint8_t* buffer; 270 uint8_t* buffer;
222 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 271 SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
223 writer.WriteObject(Object::class_class()); 272 writer.WriteObject(Object::class_class());
224 writer.WriteObject(Object::null_class()); 273 writer.WriteObject(Object::null_class());
225 writer.WriteObject(Object::type_class()); 274 writer.WriteObject(Object::type_class());
226 writer.WriteObject(Object::type_parameter_class()); 275 writer.WriteObject(Object::type_parameter_class());
227 writer.WriteObject(Object::instantiated_type_class()); 276 writer.WriteObject(Object::instantiated_type_class());
228 writer.WriteObject(Object::abstract_type_arguments_class()); 277 writer.WriteObject(Object::abstract_type_arguments_class());
229 writer.WriteObject(Object::type_arguments_class()); 278 writer.WriteObject(Object::type_arguments_class());
230 writer.WriteObject(Object::instantiated_type_arguments_class()); 279 writer.WriteObject(Object::instantiated_type_arguments_class());
231 writer.WriteObject(Object::function_class()); 280 writer.WriteObject(Object::function_class());
232 writer.WriteObject(Object::field_class()); 281 writer.WriteObject(Object::field_class());
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 EXPECT(Object::pc_descriptors_class() == reader.ReadObject()); 313 EXPECT(Object::pc_descriptors_class() == reader.ReadObject());
265 EXPECT(Object::exception_handlers_class() == reader.ReadObject()); 314 EXPECT(Object::exception_handlers_class() == reader.ReadObject());
266 EXPECT(Object::context_class() == reader.ReadObject()); 315 EXPECT(Object::context_class() == reader.ReadObject());
267 EXPECT(Object::context_scope_class() == reader.ReadObject()); 316 EXPECT(Object::context_scope_class() == reader.ReadObject());
268 } 317 }
269 318
270 319
271 TEST_CASE(SerializeString) { 320 TEST_CASE(SerializeString) {
272 // Write snapshot with object content. 321 // Write snapshot with object content.
273 uint8_t* buffer; 322 uint8_t* buffer;
274 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 323 SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
275 static const char* cstr = "This string shall be serialized"; 324 static const char* cstr = "This string shall be serialized";
276 String& str = String::Handle(String::New(cstr)); 325 String& str = String::Handle(String::New(cstr));
277 writer.WriteObject(str.raw()); 326 writer.WriteObject(str.raw());
278 writer.FinalizeBuffer(); 327 writer.FinalizeBuffer();
279 328
280 // Create a snapshot object using the buffer. 329 // Create a snapshot object using the buffer.
281 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 330 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
282 331
283 // Read object back from the snapshot. 332 // Read object back from the snapshot.
284 SnapshotReader reader(snapshot, Isolate::Current()); 333 SnapshotReader reader(snapshot, Isolate::Current());
285 String& serialized_str = String::Handle(); 334 String& serialized_str = String::Handle();
286 serialized_str ^= reader.ReadObject(); 335 serialized_str ^= reader.ReadObject();
287 EXPECT(str.Equals(serialized_str)); 336 EXPECT(str.Equals(serialized_str));
288 337
289 // Read object back from the snapshot into a C structure. 338 // Read object back from the snapshot into a C structure.
290 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 339 Zone zone(Isolate::Current());
291 writer.BytesWritten(), 340 Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize,
292 &allocator); 341 writer.BytesWritten(),
293 Dart_CObject* cobject = mreader.ReadObject(); 342 &zone_allocator);
343 Dart_CObject* cobject = cmessage->root;
294 EXPECT_EQ(Dart_CObject::kString, cobject->type); 344 EXPECT_EQ(Dart_CObject::kString, cobject->type);
295 EXPECT_STREQ(cstr, cobject->value.as_string); 345 EXPECT_STREQ(cstr, cobject->value.as_string);
296 free(cobject);
297 } 346 }
298 347
299 348
300 TEST_CASE(SerializeArray) { 349 TEST_CASE(SerializeArray) {
301 // Write snapshot with object content. 350 // Write snapshot with object content.
302 uint8_t* buffer; 351 uint8_t* buffer;
303 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 352 SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
304 const int kArrayLength = 10; 353 const int kArrayLength = 10;
305 Array& array = Array::Handle(Array::New(kArrayLength)); 354 Array& array = Array::Handle(Array::New(kArrayLength));
306 Smi& smi = Smi::Handle(); 355 Smi& smi = Smi::Handle();
307 for (int i = 0; i < kArrayLength; i++) { 356 for (int i = 0; i < kArrayLength; i++) {
308 smi ^= Smi::New(i); 357 smi ^= Smi::New(i);
309 array.SetAt(i, smi); 358 array.SetAt(i, smi);
310 } 359 }
311 writer.WriteObject(array.raw()); 360 writer.WriteObject(array.raw());
312 writer.FinalizeBuffer(); 361 writer.FinalizeBuffer();
313 362
314 // Create a snapshot object using the buffer. 363 // Create a snapshot object using the buffer.
315 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 364 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
316 365
317 // Read object back from the snapshot. 366 // Read object back from the snapshot.
318 SnapshotReader reader(snapshot, Isolate::Current()); 367 SnapshotReader reader(snapshot, Isolate::Current());
319 Array& serialized_array = Array::Handle(); 368 Array& serialized_array = Array::Handle();
320 serialized_array ^= reader.ReadObject(); 369 serialized_array ^= reader.ReadObject();
321 EXPECT(array.Equals(serialized_array)); 370 EXPECT(array.Equals(serialized_array));
322 371
323 // Read object back from the snapshot into a C structure. 372 // Read object back from the snapshot into a C structure.
324 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 373 Zone zone(Isolate::Current());
325 writer.BytesWritten(), 374 Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize,
326 &allocator); 375 writer.BytesWritten(),
327 Dart_CObject* cobject = mreader.ReadObject(); 376 &zone_allocator);
377 Dart_CObject* cobject = cmessage->root;
328 EXPECT_EQ(Dart_CObject::kArray, cobject->type); 378 EXPECT_EQ(Dart_CObject::kArray, cobject->type);
329 EXPECT_EQ(kArrayLength, cobject->value.as_array.length); 379 EXPECT_EQ(kArrayLength, cobject->value.as_array.length);
330 for (int i = 0; i < kArrayLength; i++) { 380 for (int i = 0; i < kArrayLength; i++) {
331 Dart_CObject* element = cobject->value.as_array.values[i]; 381 Dart_CObject* element = cobject->value.as_array.values[i];
332 EXPECT_EQ(Dart_CObject::kInt32, element->type); 382 EXPECT_EQ(Dart_CObject::kInt32, element->type);
333 EXPECT_EQ(i, element->value.as_int32); 383 EXPECT_EQ(i, element->value.as_int32);
334 free(element);
335 } 384 }
336 free(cobject);
337 } 385 }
338 386
339 387
340 TEST_CASE(SerializeEmptyArray) { 388 TEST_CASE(SerializeEmptyArray) {
341 // Write snapshot with object content. 389 // Write snapshot with object content.
342 uint8_t* buffer; 390 uint8_t* buffer;
343 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 391 SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
344 const int kArrayLength = 0; 392 const int kArrayLength = 0;
345 Array& array = Array::Handle(Array::New(kArrayLength)); 393 Array& array = Array::Handle(Array::New(kArrayLength));
346 writer.WriteObject(array.raw()); 394 writer.WriteObject(array.raw());
347 writer.FinalizeBuffer(); 395 writer.FinalizeBuffer();
348 396
349 // Create a snapshot object using the buffer. 397 // Create a snapshot object using the buffer.
350 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 398 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
351 399
352 // Read object back from the snapshot. 400 // Read object back from the snapshot.
353 SnapshotReader reader(snapshot, Isolate::Current()); 401 SnapshotReader reader(snapshot, Isolate::Current());
354 Array& serialized_array = Array::Handle(); 402 Array& serialized_array = Array::Handle();
355 serialized_array ^= reader.ReadObject(); 403 serialized_array ^= reader.ReadObject();
356 EXPECT(array.Equals(serialized_array)); 404 EXPECT(array.Equals(serialized_array));
357 405
358 // Read object back from the snapshot into a C structure. 406 // Read object back from the snapshot into a C structure.
359 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 407 Zone zone(Isolate::Current());
360 writer.BytesWritten(), 408 Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize,
361 &allocator); 409 writer.BytesWritten(),
362 Dart_CObject* cobject = mreader.ReadObject(); 410 &zone_allocator);
411 Dart_CObject* cobject = cmessage->root;
363 EXPECT_EQ(Dart_CObject::kArray, cobject->type); 412 EXPECT_EQ(Dart_CObject::kArray, cobject->type);
364 EXPECT_EQ(kArrayLength, cobject->value.as_array.length); 413 EXPECT_EQ(kArrayLength, cobject->value.as_array.length);
365 EXPECT(cobject->value.as_array.values == NULL); 414 EXPECT(cobject->value.as_array.values == NULL);
366 free(cobject);
367 } 415 }
368 416
369 417
370 TEST_CASE(SerializeScript) { 418 TEST_CASE(SerializeScript) {
371 const char* kScriptChars = 419 const char* kScriptChars =
372 "class A {\n" 420 "class A {\n"
373 " static bar() { return 42; }\n" 421 " static bar() { return 42; }\n"
374 " static fly() { return 5; }\n" 422 " static fly() { return 5; }\n"
375 "}\n"; 423 "}\n";
376 424
377 String& url = String::Handle(String::New("dart-test:SerializeScript")); 425 String& url = String::Handle(String::New("dart-test:SerializeScript"));
378 String& source = String::Handle(String::New(kScriptChars)); 426 String& source = String::Handle(String::New(kScriptChars));
379 Script& script = Script::Handle(Script::New(url, source, RawScript::kSource)); 427 Script& script = Script::Handle(Script::New(url, source, RawScript::kSource));
380 const String& lib_url = String::Handle(String::NewSymbol("TestLib")); 428 const String& lib_url = String::Handle(String::NewSymbol("TestLib"));
381 Library& lib = Library::Handle(Library::New(lib_url)); 429 Library& lib = Library::Handle(Library::New(lib_url));
382 lib.Register(); 430 lib.Register();
383 EXPECT(CompilerTest::TestCompileScript(lib, script)); 431 EXPECT(CompilerTest::TestCompileScript(lib, script));
384 432
385 // Write snapshot with object content. 433 // Write snapshot with object content.
386 uint8_t* buffer; 434 uint8_t* buffer;
387 SnapshotWriter writer(Snapshot::kScript, &buffer, &allocator); 435 SnapshotWriter writer(Snapshot::kScript, &buffer, &malloc_allocator);
388 writer.WriteObject(script.raw()); 436 writer.WriteObject(script.raw());
389 writer.FinalizeBuffer(); 437 writer.FinalizeBuffer();
390 438
391 // Create a snapshot object using the buffer. 439 // Create a snapshot object using the buffer.
392 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 440 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
393 441
394 // Read object back from the snapshot. 442 // Read object back from the snapshot.
395 SnapshotReader reader(snapshot, Isolate::Current()); 443 SnapshotReader reader(snapshot, Isolate::Current());
396 Script& serialized_script = Script::Handle(); 444 Script& serialized_script = Script::Handle();
397 serialized_script ^= reader.ReadObject(); 445 serialized_script ^= reader.ReadObject();
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 494
447 // Create a test library and Load up a test script in it. 495 // Create a test library and Load up a test script in it.
448 TestCase::LoadTestScript(kScriptChars, NULL); 496 TestCase::LoadTestScript(kScriptChars, NULL);
449 timer1.Stop(); 497 timer1.Stop();
450 OS::PrintErr("Without Snapshot: %dus\n", timer1.TotalElapsedTime()); 498 OS::PrintErr("Without Snapshot: %dus\n", timer1.TotalElapsedTime());
451 499
452 // Write snapshot with object content. 500 // Write snapshot with object content.
453 Isolate* isolate = Isolate::Current(); 501 Isolate* isolate = Isolate::Current();
454 Zone zone(isolate); 502 Zone zone(isolate);
455 HandleScope scope(isolate); 503 HandleScope scope(isolate);
456 SnapshotWriter writer(Snapshot::kFull, &buffer, &allocator); 504 SnapshotWriter writer(Snapshot::kFull, &buffer, &malloc_allocator);
457 writer.WriteFullSnapshot(); 505 writer.WriteFullSnapshot();
458 } 506 }
459 507
460 // Now Create another isolate using the snapshot and execute a method 508 // Now Create another isolate using the snapshot and execute a method
461 // from the script. 509 // from the script.
462 Timer timer2(true, "Snapshot_test"); 510 Timer timer2(true, "Snapshot_test");
463 timer2.Start(); 511 timer2.Start();
464 TestCase::CreateTestIsolateFromSnapshot(buffer); 512 TestCase::CreateTestIsolateFromSnapshot(buffer);
465 { 513 {
466 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 514 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 Zone zone(isolate); 550 Zone zone(isolate);
503 HandleScope scope(isolate); 551 HandleScope scope(isolate);
504 552
505 // Create a test library and Load up a test script in it. 553 // Create a test library and Load up a test script in it.
506 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 554 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
507 ClassFinalizer::FinalizePendingClasses(); 555 ClassFinalizer::FinalizePendingClasses();
508 timer1.Stop(); 556 timer1.Stop();
509 OS::PrintErr("Without Snapshot: %dus\n", timer1.TotalElapsedTime()); 557 OS::PrintErr("Without Snapshot: %dus\n", timer1.TotalElapsedTime());
510 558
511 // Write snapshot with object content. 559 // Write snapshot with object content.
512 SnapshotWriter writer(Snapshot::kFull, &buffer, &allocator); 560 SnapshotWriter writer(Snapshot::kFull, &buffer, &malloc_allocator);
513 writer.WriteFullSnapshot(); 561 writer.WriteFullSnapshot();
514 562
515 // Invoke a function which returns an object. 563 // Invoke a function which returns an object.
516 Dart_Handle result = Dart_InvokeStatic(lib, 564 Dart_Handle result = Dart_InvokeStatic(lib,
517 Dart_NewString("FieldsTest"), 565 Dart_NewString("FieldsTest"),
518 Dart_NewString("testMain"), 566 Dart_NewString("testMain"),
519 0, 567 0,
520 NULL); 568 NULL);
521 EXPECT_VALID(result); 569 EXPECT_VALID(result);
522 } 570 }
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 Dart_ExitScope(); 687 Dart_ExitScope();
640 } 688 }
641 Dart_ShutdownIsolate(); 689 Dart_ShutdownIsolate();
642 free(full_snapshot); 690 free(full_snapshot);
643 free(script_snapshot); 691 free(script_snapshot);
644 } 692 }
645 693
646 694
647 TEST_CASE(IntArrayMessage) { 695 TEST_CASE(IntArrayMessage) {
648 uint8_t* buffer = NULL; 696 uint8_t* buffer = NULL;
649 MessageWriter writer(&buffer, &allocator); 697 MessageWriter writer(&buffer, &malloc_allocator);
650 698
651 static const int kArrayLength = 2; 699 static const int kArrayLength = 2;
652 intptr_t data[kArrayLength] = {1, 2}; 700 intptr_t data[kArrayLength] = {1, 2};
653 int len = kArrayLength; 701 int len = kArrayLength;
654 writer.WriteMessage(len, data); 702 writer.WriteMessage(len, data);
655 703
656 // Read object back from the snapshot into a C structure. 704 // Read object back from the snapshot into a C structure.
657 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 705 Zone zone(Isolate::Current());
658 writer.BytesWritten(), 706 Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize,
659 &allocator); 707 writer.BytesWritten(),
660 Dart_CObject* value = mreader.ReadObject(); 708 &zone_allocator);
661 EXPECT_EQ(Dart_CObject::kArray, value->type); 709 Dart_CObject* cobject = cmessage->root;
662 EXPECT_EQ(kArrayLength, value->value.as_array.length); 710 EXPECT_EQ(Dart_CObject::kArray, cobject->type);
711 EXPECT_EQ(kArrayLength, cobject->value.as_array.length);
663 for (int i = 0; i < kArrayLength; i++) { 712 for (int i = 0; i < kArrayLength; i++) {
664 Dart_CObject* element = value->value.as_array.values[i]; 713 Dart_CObject* element = cobject->value.as_array.values[i];
665 EXPECT_EQ(Dart_CObject::kInt32, element->type); 714 EXPECT_EQ(Dart_CObject::kInt32, element->type);
666 EXPECT_EQ(i + 1, element->value.as_int32); 715 EXPECT_EQ(i + 1, element->value.as_int32);
667 free(element);
668 } 716 }
669 free(value);
670 } 717 }
671 718
672 719
673 // Helper function to call a top level Dart function, serialize the 720 // Helper function to call a top level Dart function, serialize the
674 // result and deserialize the result into a Dart_CObject structure. 721 // result and deserialize the result into a Dart_CObject structure.
675 static Dart_CObject* GetDeserializedDartObject(Dart_Handle lib, 722 static Dart_CMessage* GetDeserializedDartMessage(Dart_Handle lib,
676 const char* dart_function) { 723 const char* dart_function) {
677 Dart_Handle result; 724 Dart_Handle result;
678 result = Dart_InvokeStatic(lib, 725 result = Dart_InvokeStatic(lib,
679 Dart_NewString(""), 726 Dart_NewString(""),
680 Dart_NewString(dart_function), 727 Dart_NewString(dart_function),
681 0, 728 0,
682 NULL); 729 NULL);
683 EXPECT_VALID(result); 730 EXPECT_VALID(result);
684 731
685 // Serialize the list into a message. 732 // Serialize the list into a message.
686 uint8_t* buffer; 733 uint8_t* buffer;
687 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 734 SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
688 const Object& list = Object::Handle(Api::UnwrapHandle(result)); 735 const Object& list = Object::Handle(Api::UnwrapHandle(result));
689 writer.WriteObject(list.raw()); 736 writer.WriteObject(list.raw());
690 writer.FinalizeBuffer(); 737 writer.FinalizeBuffer();
691 738
692 // Read object back from the snapshot into a C structure. 739 // Read object back from the snapshot into a C structure.
693 CMessageReader reader(buffer + Snapshot::kHeaderSize, 740 Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize,
694 writer.BytesWritten(), 741 writer.BytesWritten(),
695 &allocator); 742 &zone_allocator);
696 Dart_CObject* value = reader.ReadObject(); 743 return cmessage;
697 free(buffer);
698 return value;
699 } 744 }
700 745
701 746
702 UNIT_TEST_CASE(DartGeneratedMessages) { 747 UNIT_TEST_CASE(DartGeneratedMessages) {
703 static const char* kCustomIsolateScriptChars = 748 static const char* kCustomIsolateScriptChars =
704 "getSmi() {\n" 749 "getSmi() {\n"
705 " return 42;\n" 750 " return 42;\n"
706 "}\n" 751 "}\n"
707 "getString() {\n" 752 "getString() {\n"
708 " return \"Hello, world!\";\n" 753 " return \"Hello, world!\";\n"
(...skipping 24 matching lines...) Expand all
733 0, 778 0,
734 NULL); 779 NULL);
735 EXPECT_VALID(string_result); 780 EXPECT_VALID(string_result);
736 EXPECT(Dart_IsString(string_result)); 781 EXPECT(Dart_IsString(string_result));
737 782
738 { 783 {
739 DARTSCOPE_NOCHECKS(isolate); 784 DARTSCOPE_NOCHECKS(isolate);
740 785
741 { 786 {
742 uint8_t* buffer; 787 uint8_t* buffer;
743 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 788 SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
744 Smi& smi = Smi::Handle(); 789 Smi& smi = Smi::Handle();
745 smi ^= Api::UnwrapHandle(smi_result); 790 smi ^= Api::UnwrapHandle(smi_result);
746 writer.WriteObject(smi.raw()); 791 writer.WriteObject(smi.raw());
747 writer.FinalizeBuffer(); 792 writer.FinalizeBuffer();
748 793
749 // Read object back from the snapshot into a C structure. 794 // Read object back from the snapshot into a C structure.
750 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 795 Zone zone(Isolate::Current());
751 writer.BytesWritten(), 796 Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize,
752 &allocator); 797 writer.BytesWritten(),
753 Dart_CObject* value = mreader.ReadObject(); 798 &zone_allocator);
754 EXPECT_NOTNULL(value); 799 Dart_CObject* cobject = cmessage->root;
755 EXPECT_EQ(Dart_CObject::kInt32, value->type); 800 EXPECT_NOTNULL(cobject);
756 EXPECT_EQ(42, value->value.as_int32); 801 EXPECT_EQ(Dart_CObject::kInt32, cobject->type);
757 free(value); 802 EXPECT_EQ(42, cobject->value.as_int32);
758 free(buffer);
759 } 803 }
760 { 804 {
761 uint8_t* buffer; 805 uint8_t* buffer;
762 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 806 SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
763 String& str = String::Handle(); 807 String& str = String::Handle();
764 str ^= Api::UnwrapHandle(string_result); 808 str ^= Api::UnwrapHandle(string_result);
765 writer.WriteObject(str.raw()); 809 writer.WriteObject(str.raw());
766 writer.FinalizeBuffer(); 810 writer.FinalizeBuffer();
767 811
768 // Read object back from the snapshot into a C structure. 812 // Read object back from the snapshot into a C structure.
769 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 813 Zone zone(Isolate::Current());
770 writer.BytesWritten(), 814 Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize,
771 &allocator); 815 writer.BytesWritten(),
772 Dart_CObject* value = mreader.ReadObject(); 816 &zone_allocator);
773 EXPECT_NOTNULL(value); 817 Dart_CObject* cobject = cmessage->root;
774 EXPECT_EQ(Dart_CObject::kString, value->type); 818 EXPECT_NOTNULL(cobject);
775 EXPECT_STREQ("Hello, world!", value->value.as_string); 819 EXPECT_EQ(Dart_CObject::kString, cobject->type);
776 free(value); 820 EXPECT_STREQ("Hello, world!", cobject->value.as_string);
777 free(buffer);
778 } 821 }
779 } 822 }
780 Dart_ExitScope(); 823 Dart_ExitScope();
781 Dart_ShutdownIsolate(); 824 Dart_ShutdownIsolate();
782 } 825 }
783 826
784 827
785 UNIT_TEST_CASE(DartGeneratedListMessages) { 828 UNIT_TEST_CASE(DartGeneratedListMessages) {
786 const int kArrayLength = 10; 829 const int kArrayLength = 10;
787 static const char* kScriptChars = 830 static const char* kScriptChars =
(...skipping 26 matching lines...) Expand all
814 Dart_EnterScope(); 857 Dart_EnterScope();
815 858
816 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 859 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
817 EXPECT_VALID(lib); 860 EXPECT_VALID(lib);
818 861
819 { 862 {
820 DARTSCOPE_NOCHECKS(isolate); 863 DARTSCOPE_NOCHECKS(isolate);
821 864
822 { 865 {
823 // Generate a list of nulls from Dart code. 866 // Generate a list of nulls from Dart code.
824 Dart_CObject* value = GetDeserializedDartObject(lib, "getList"); 867 Zone zone(Isolate::Current());
868 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getList");
869 Dart_CObject* value = cmessage->root;
825 EXPECT_NOTNULL(value); 870 EXPECT_NOTNULL(value);
826 EXPECT_EQ(Dart_CObject::kArray, value->type); 871 EXPECT_EQ(Dart_CObject::kArray, value->type);
827 EXPECT_EQ(kArrayLength, value->value.as_array.length); 872 EXPECT_EQ(kArrayLength, value->value.as_array.length);
828 for (int i = 0; i < kArrayLength; i++) { 873 for (int i = 0; i < kArrayLength; i++) {
829 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type); 874 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type);
830 free(value->value.as_array.values[i]);
831 } 875 }
832 free(value);
833 } 876 }
834 { 877 {
835 // Generate a list of ints from Dart code. 878 // Generate a list of ints from Dart code.
836 Dart_CObject* value = GetDeserializedDartObject(lib, "getIntList"); 879 Zone zone(Isolate::Current());
880 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getIntList");
881 Dart_CObject* value = cmessage->root;
837 EXPECT_NOTNULL(value); 882 EXPECT_NOTNULL(value);
838 EXPECT_EQ(Dart_CObject::kArray, value->type); 883 EXPECT_EQ(Dart_CObject::kArray, value->type);
839 EXPECT_EQ(kArrayLength, value->value.as_array.length); 884 EXPECT_EQ(kArrayLength, value->value.as_array.length);
840 for (int i = 0; i < kArrayLength; i++) { 885 for (int i = 0; i < kArrayLength; i++) {
841 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[i]->type); 886 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); 887 EXPECT_EQ(i, value->value.as_array.values[i]->value.as_int32);
843 free(value->value.as_array.values[i]);
844 } 888 }
845 free(value);
846 } 889 }
847 { 890 {
848 // Generate a list of strings from Dart code. 891 // Generate a list of strings from Dart code.
849 Dart_CObject* value = GetDeserializedDartObject(lib, "getStringList"); 892 Zone zone(Isolate::Current());
893 Dart_CMessage* cmessage =
894 GetDeserializedDartMessage(lib, "getStringList");
895 Dart_CObject* value = cmessage->root;
850 EXPECT_NOTNULL(value); 896 EXPECT_NOTNULL(value);
851 EXPECT_EQ(Dart_CObject::kArray, value->type); 897 EXPECT_EQ(Dart_CObject::kArray, value->type);
852 EXPECT_EQ(kArrayLength, value->value.as_array.length); 898 EXPECT_EQ(kArrayLength, value->value.as_array.length);
853 for (int i = 0; i < kArrayLength; i++) { 899 for (int i = 0; i < kArrayLength; i++) {
854 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[i]->type); 900 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[i]->type);
855 char buffer[3]; 901 char buffer[3];
856 snprintf(buffer, sizeof(buffer), "%d", i); 902 snprintf(buffer, sizeof(buffer), "%d", i);
857 EXPECT_STREQ(buffer, value->value.as_array.values[i]->value.as_string); 903 EXPECT_STREQ(buffer, value->value.as_array.values[i]->value.as_string);
858 free(value->value.as_array.values[i]);
859 } 904 }
860 free(value);
861 } 905 }
862 { 906 {
863 // Generate a list of objects of different types from Dart code. 907 // Generate a list of objects of different types from Dart code.
864 Dart_CObject* value = GetDeserializedDartObject(lib, "getMixedList"); 908 Zone zone(Isolate::Current());
909 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getMixedList");
910 Dart_CObject* value = cmessage->root;
865 EXPECT_NOTNULL(value); 911 EXPECT_NOTNULL(value);
866 EXPECT_EQ(Dart_CObject::kArray, value->type); 912 EXPECT_EQ(Dart_CObject::kArray, value->type);
867 EXPECT_EQ(kArrayLength, value->value.as_array.length); 913 EXPECT_EQ(kArrayLength, value->value.as_array.length);
868 914
869 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[0]->type); 915 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); 916 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); 917 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); 918 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); 919 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); 920 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); 921 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); 922 EXPECT_EQ(true, value->value.as_array.values[3]->value.as_bool);
877 923
878 for (int i = 0; i < kArrayLength; i++) { 924 for (int i = 0; i < kArrayLength; i++) {
879 if (i > 3) { 925 if (i > 3) {
880 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);
881 } 927 }
882 free(value->value.as_array.values[i]);
883 } 928 }
884 free(value);
885 } 929 }
886 } 930 }
887 Dart_ExitScope(); 931 Dart_ExitScope();
888 Dart_ShutdownIsolate(); 932 Dart_ShutdownIsolate();
889 } 933 }
890 934
891 935
892 UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) { 936 UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
893 const int kArrayLength = 10; 937 const int kArrayLength = 10;
894 static const char* kScriptChars = 938 static const char* kScriptChars =
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
926 Dart_EnterScope(); 970 Dart_EnterScope();
927 971
928 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 972 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
929 EXPECT_VALID(lib); 973 EXPECT_VALID(lib);
930 974
931 { 975 {
932 DARTSCOPE_NOCHECKS(isolate); 976 DARTSCOPE_NOCHECKS(isolate);
933 977
934 { 978 {
935 // Generate a list of strings from Dart code. 979 // Generate a list of strings from Dart code.
936 Dart_CObject* object = GetDeserializedDartObject(lib, "getStringList"); 980 Zone zone(Isolate::Current());
981 Dart_CMessage* cmessage =
982 GetDeserializedDartMessage(lib, "getStringList");
983 Dart_CObject* object = cmessage->root;
937 EXPECT_NOTNULL(object); 984 EXPECT_NOTNULL(object);
938 EXPECT_EQ(Dart_CObject::kArray, object->type); 985 EXPECT_EQ(Dart_CObject::kArray, object->type);
939 EXPECT_EQ(kArrayLength, object->value.as_array.length); 986 EXPECT_EQ(kArrayLength, object->value.as_array.length);
940 for (int i = 0; i < kArrayLength; i++) { 987 for (int i = 0; i < kArrayLength; i++) {
941 Dart_CObject* element = object->value.as_array.values[i]; 988 Dart_CObject* element = object->value.as_array.values[i];
942 EXPECT_EQ(object->value.as_array.values[0], element); 989 EXPECT_EQ(object->value.as_array.values[0], element);
943 EXPECT_EQ(Dart_CObject::kString, element->type); 990 EXPECT_EQ(Dart_CObject::kString, element->type);
944 EXPECT_STREQ("Hello, world!", element->value.as_string); 991 EXPECT_STREQ("Hello, world!", element->value.as_string);
945 } 992 }
946 free(object->value.as_array.values[0]);
947 free(object);
948 } 993 }
949 { 994 {
950 // Generate a list of doubles from Dart code. 995 // Generate a list of doubles from Dart code.
951 Dart_CObject* object = GetDeserializedDartObject(lib, "getDoubleList"); 996 Zone zone(Isolate::Current());
997 Dart_CMessage* cmessage =
998 GetDeserializedDartMessage(lib, "getDoubleList");
999 Dart_CObject* object = cmessage->root;
952 EXPECT_NOTNULL(object); 1000 EXPECT_NOTNULL(object);
953 EXPECT_EQ(Dart_CObject::kArray, object->type); 1001 EXPECT_EQ(Dart_CObject::kArray, object->type);
954 EXPECT_EQ(kArrayLength, object->value.as_array.length); 1002 EXPECT_EQ(kArrayLength, object->value.as_array.length);
955 for (int i = 0; i < kArrayLength; i++) { 1003 for (int i = 0; i < kArrayLength; i++) {
956 Dart_CObject* element = object->value.as_array.values[i]; 1004 Dart_CObject* element = object->value.as_array.values[i];
957 EXPECT_EQ(object->value.as_array.values[0], element); 1005 EXPECT_EQ(object->value.as_array.values[0], element);
958 EXPECT_EQ(Dart_CObject::kDouble, element->type); 1006 EXPECT_EQ(Dart_CObject::kDouble, element->type);
959 EXPECT_EQ(3.14, element->value.as_double); 1007 EXPECT_EQ(3.14, element->value.as_double);
960 } 1008 }
961 free(object->value.as_array.values[0]);
962 free(object);
963 } 1009 }
964 { 1010 {
965 // Generate a list of objects of different types from Dart code. 1011 // Generate a list of objects of different types from Dart code.
966 Dart_CObject* object = GetDeserializedDartObject(lib, "getMixedList"); 1012 Zone zone(Isolate::Current());
1013 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getMixedList");
1014 Dart_CObject* object = cmessage->root;
967 EXPECT_NOTNULL(object); 1015 EXPECT_NOTNULL(object);
968 EXPECT_EQ(Dart_CObject::kArray, object->type); 1016 EXPECT_EQ(Dart_CObject::kArray, object->type);
969 EXPECT_EQ(kArrayLength, object->value.as_array.length); 1017 EXPECT_EQ(kArrayLength, object->value.as_array.length);
970 for (int i = 0; i < kArrayLength; i++) { 1018 for (int i = 0; i < kArrayLength; i++) {
971 Dart_CObject* element = object->value.as_array.values[i]; 1019 Dart_CObject* element = object->value.as_array.values[i];
972 if ((i % 2) == 0) { 1020 if ((i % 2) == 0) {
973 EXPECT_EQ(object->value.as_array.values[0], element); 1021 EXPECT_EQ(object->value.as_array.values[0], element);
974 EXPECT_EQ(Dart_CObject::kString, element->type); 1022 EXPECT_EQ(Dart_CObject::kString, element->type);
975 EXPECT_STREQ("A", element->value.as_string); 1023 EXPECT_STREQ("A", element->value.as_string);
976 } else { 1024 } else {
977 EXPECT_EQ(object->value.as_array.values[1], element); 1025 EXPECT_EQ(object->value.as_array.values[1], element);
978 EXPECT_EQ(Dart_CObject::kDouble, element->type); 1026 EXPECT_EQ(Dart_CObject::kDouble, element->type);
979 EXPECT_STREQ(2.72, element->value.as_double); 1027 EXPECT_STREQ(2.72, element->value.as_double);
980 } 1028 }
981 } 1029 }
982 free(object->value.as_array.values[0]);
983 free(object->value.as_array.values[1]);
984 free(object);
985 } 1030 }
986 { 1031 {
987 // Generate a list of objects of different types from Dart code. 1032 // Generate a list of objects of different types from Dart code.
988 Dart_CObject* object = GetDeserializedDartObject(lib, "getSelfRefList"); 1033 Zone zone(Isolate::Current());
1034 Dart_CMessage* cmessage =
1035 GetDeserializedDartMessage(lib, "getSelfRefList");
1036 Dart_CObject* object = cmessage->root;
989 EXPECT_NOTNULL(object); 1037 EXPECT_NOTNULL(object);
990 EXPECT_EQ(Dart_CObject::kArray, object->type); 1038 EXPECT_EQ(Dart_CObject::kArray, object->type);
991 EXPECT_EQ(kArrayLength, object->value.as_array.length); 1039 EXPECT_EQ(kArrayLength, object->value.as_array.length);
992 for (int i = 0; i < kArrayLength; i++) { 1040 for (int i = 0; i < kArrayLength; i++) {
993 Dart_CObject* element = object->value.as_array.values[i]; 1041 Dart_CObject* element = object->value.as_array.values[i];
994 EXPECT_EQ(Dart_CObject::kArray, element->type); 1042 EXPECT_EQ(Dart_CObject::kArray, element->type);
995 EXPECT_EQ(object, element); 1043 EXPECT_EQ(object, element);
996 } 1044 }
997 free(object);
998 } 1045 }
999 } 1046 }
1000 Dart_ExitScope(); 1047 Dart_ExitScope();
1001 Dart_ShutdownIsolate(); 1048 Dart_ShutdownIsolate();
1002 } 1049 }
1003 1050
1004 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). 1051 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
1005 1052
1006 } // namespace dart 1053 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/snapshot.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698