OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "platform/globals.h" | 5 #include "platform/globals.h" |
6 | 6 |
7 #include "vm/assembler.h" | 7 #include "vm/assembler.h" |
8 #include "vm/bigint_operations.h" | 8 #include "vm/bigint_operations.h" |
9 #include "vm/class_finalizer.h" | 9 #include "vm/class_finalizer.h" |
10 #include "vm/dart_api_impl.h" | 10 #include "vm/dart_api_impl.h" |
(...skipping 4275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4286 EXPECT_STREQ( | 4286 EXPECT_STREQ( |
4287 "{\"type\":\"@Library\",\"id\":\"\",\"name\":\"dart.core\"," | 4287 "{\"type\":\"@Library\",\"id\":\"\",\"name\":\"dart.core\"," |
4288 "\"url\":\"dart:core\"}", | 4288 "\"url\":\"dart:core\"}", |
4289 buffer); | 4289 buffer); |
4290 } | 4290 } |
4291 // Bool reference | 4291 // Bool reference |
4292 { | 4292 { |
4293 JSONStream js; | 4293 JSONStream js; |
4294 Bool::True().PrintJSON(&js, true); | 4294 Bool::True().PrintJSON(&js, true); |
4295 elideSubstring("classes", js.ToCString(), buffer); | 4295 elideSubstring("classes", js.ToCString(), buffer); |
4296 EXPECT_STREQ("{\"type\":\"@Bool\",\"id\":\"objects\\/bool-true\"," | 4296 EXPECT_STREQ( |
4297 "\"class\":{\"type\":\"@Class\",\"id\":\"\"," | 4297 "{\"type\":\"@bool\"," |
4298 "\"name\":\"bool\"},\"valueAsString\":\"true\"}", | 4298 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"bool\"}," |
4299 buffer); | 4299 "\"id\":\"objects\\/bool-true\",\"valueAsString\":\"true\"}", |
| 4300 buffer); |
4300 } | 4301 } |
4301 // Smi reference | 4302 // Smi reference |
4302 { | 4303 { |
4303 JSONStream js; | 4304 JSONStream js; |
4304 const Integer& smi = Integer::Handle(Integer::New(7)); | 4305 const Integer& smi = Integer::Handle(Integer::New(7)); |
4305 smi.PrintJSON(&js, true); | 4306 smi.PrintJSON(&js, true); |
4306 elideSubstring("classes", js.ToCString(), buffer); | 4307 elideSubstring("classes", js.ToCString(), buffer); |
4307 elideSubstring("_Smi@", buffer, buffer); | 4308 elideSubstring("_Smi@", buffer, buffer); |
4308 EXPECT_STREQ( | 4309 EXPECT_STREQ( |
4309 "{\"type\":\"@Smi\"," | 4310 "{\"type\":\"@int\",\"_vmType\":\"@Smi\"," |
4310 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_Smi\"," | 4311 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_Smi\"," |
4311 "\"vmName\":\"\"}," | 4312 "\"_vmName\":\"\"}," |
4312 "\"id\":\"objects\\/int-7\",\"valueAsString\":\"7\"}", | 4313 "\"id\":\"objects\\/int-7\",\"valueAsString\":\"7\"}", |
4313 buffer); | 4314 buffer); |
4314 } | 4315 } |
4315 // Mint reference | 4316 // Mint reference |
4316 { | 4317 { |
4317 JSONStream js; | 4318 JSONStream js; |
4318 const Integer& smi = Integer::Handle(Integer::New(Mint::kMinValue)); | 4319 const Integer& smi = Integer::Handle(Integer::New(Mint::kMinValue)); |
4319 smi.PrintJSON(&js, true); | 4320 smi.PrintJSON(&js, true); |
4320 elideSubstring("classes", js.ToCString(), buffer); | 4321 elideSubstring("classes", js.ToCString(), buffer); |
4321 elideSubstring("objects", buffer, buffer); | 4322 elideSubstring("objects", buffer, buffer); |
4322 elideSubstring("_Mint@", buffer, buffer); | 4323 elideSubstring("_Mint@", buffer, buffer); |
4323 EXPECT_STREQ( | 4324 EXPECT_STREQ( |
4324 "{\"type\":\"@Mint\"," | 4325 "{\"type\":\"@int\",\"_vmType\":\"@Mint\"," |
4325 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_Mint\"," | 4326 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_Mint\"," |
4326 "\"vmName\":\"\"}," | 4327 "\"_vmName\":\"\"}," |
4327 "\"id\":\"\",\"valueAsString\":\"-9223372036854775808\"}", | 4328 "\"id\":\"\",\"valueAsString\":\"-9223372036854775808\"}", |
4328 buffer); | 4329 buffer); |
4329 } | 4330 } |
4330 // Bigint reference | 4331 // Bigint reference |
4331 { | 4332 { |
4332 JSONStream js; | 4333 JSONStream js; |
4333 const String& bigint_str = | 4334 const String& bigint_str = |
4334 String::Handle(String::New("44444444444444444444444444444444")); | 4335 String::Handle(String::New("44444444444444444444444444444444")); |
4335 const Integer& bigint = Integer::Handle(Integer::New(bigint_str)); | 4336 const Integer& bigint = Integer::Handle(Integer::New(bigint_str)); |
4336 bigint.PrintJSON(&js, true); | 4337 bigint.PrintJSON(&js, true); |
4337 elideSubstring("classes", js.ToCString(), buffer); | 4338 elideSubstring("classes", js.ToCString(), buffer); |
4338 elideSubstring("objects", buffer, buffer); | 4339 elideSubstring("objects", buffer, buffer); |
4339 elideSubstring("_Bigint@", buffer, buffer); | 4340 elideSubstring("_Bigint@", buffer, buffer); |
4340 EXPECT_STREQ( | 4341 EXPECT_STREQ( |
4341 "{\"type\":\"@Bigint\"," | 4342 "{\"type\":\"@int\",\"_vmType\":\"@Bigint\"," |
4342 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_Bigint\"," | 4343 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_Bigint\"," |
4343 "\"vmName\":\"\"}," | 4344 "\"_vmName\":\"\"}," |
4344 "\"id\":\"\",\"valueAsString\":\"44444444444444444444444444444444\"}", | 4345 "\"id\":\"\",\"valueAsString\":\"44444444444444444444444444444444\"}", |
4345 buffer); | 4346 buffer); |
4346 } | 4347 } |
4347 // Double reference | 4348 // Double reference |
4348 { | 4349 { |
4349 JSONStream js; | 4350 JSONStream js; |
4350 const Double& dub = Double::Handle(Double::New(0.1234)); | 4351 const Double& dub = Double::Handle(Double::New(0.1234)); |
4351 dub.PrintJSON(&js, true); | 4352 dub.PrintJSON(&js, true); |
4352 elideSubstring("classes", js.ToCString(), buffer); | 4353 elideSubstring("classes", js.ToCString(), buffer); |
4353 elideSubstring("objects", buffer, buffer); | 4354 elideSubstring("objects", buffer, buffer); |
4354 elideSubstring("_Double@", buffer, buffer); | 4355 elideSubstring("_Double@", buffer, buffer); |
4355 EXPECT_STREQ( | 4356 EXPECT_STREQ( |
4356 "{\"type\":\"@Double\"," | 4357 "{\"type\":\"@double\"," |
4357 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_Double\"," | 4358 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_Double\"," |
4358 "\"vmName\":\"\"}," | 4359 "\"_vmName\":\"\"}," |
4359 "\"id\":\"\",\"valueAsString\":\"0.1234\"}", | 4360 "\"id\":\"\",\"valueAsString\":\"0.1234\"}", |
4360 buffer); | 4361 buffer); |
4361 } | 4362 } |
4362 // String reference | 4363 // String reference |
4363 { | 4364 { |
4364 JSONStream js; | 4365 JSONStream js; |
4365 const String& str = String::Handle(String::New("dw")); | 4366 const String& str = String::Handle(String::New("dw")); |
4366 str.PrintJSON(&js, true); | 4367 str.PrintJSON(&js, true); |
4367 elideSubstring("classes", js.ToCString(), buffer); | 4368 elideSubstring("classes", js.ToCString(), buffer); |
4368 elideSubstring("objects", buffer, buffer); | 4369 elideSubstring("objects", buffer, buffer); |
4369 elideSubstring("_OneByteString@", buffer, buffer); | 4370 elideSubstring("_OneByteString@", buffer, buffer); |
4370 EXPECT_STREQ( | 4371 EXPECT_STREQ( |
4371 "{\"type\":\"@String\"," | 4372 "{\"type\":\"@String\"," |
4372 "\"class\":{\"type\":\"@Class\",\"id\":\"\"," | 4373 "\"class\":{\"type\":\"@Class\",\"id\":\"\"," |
4373 "\"name\":\"_OneByteString\",\"vmName\":\"\"}," | 4374 "\"name\":\"_OneByteString\",\"_vmName\":\"\"}," |
4374 "\"id\":\"\",\"valueAsString\":\"\\\"dw\\\"\"}", | 4375 "\"id\":\"\",\"valueAsString\":\"\\\"dw\\\"\"}", |
4375 buffer); | 4376 buffer); |
4376 } | 4377 } |
4377 // Array reference | 4378 // Array reference |
4378 { | 4379 { |
4379 JSONStream js; | 4380 JSONStream js; |
4380 const Array& array = Array::Handle(Array::New(0)); | 4381 const Array& array = Array::Handle(Array::New(0)); |
4381 array.PrintJSON(&js, true); | 4382 array.PrintJSON(&js, true); |
4382 elideSubstring("classes", js.ToCString(), buffer); | 4383 elideSubstring("classes", js.ToCString(), buffer); |
4383 elideSubstring("objects", buffer, buffer); | 4384 elideSubstring("objects", buffer, buffer); |
4384 elideSubstring("_List@", buffer, buffer); | 4385 elideSubstring("_List@", buffer, buffer); |
4385 EXPECT_STREQ( | 4386 EXPECT_STREQ( |
4386 "{\"type\":\"@Array\"," | 4387 "{\"type\":\"@List\",\"_vmType\":\"@Array\"," |
4387 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_List\"," | 4388 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_List\"," |
4388 "\"vmName\":\"\"}," | 4389 "\"_vmName\":\"\"}," |
4389 "\"id\":\"\",\"length\":0}", | 4390 "\"id\":\"\",\"length\":0}", |
4390 buffer); | 4391 buffer); |
4391 } | 4392 } |
4392 // GrowableObjectArray reference | 4393 // GrowableObjectArray reference |
4393 { | 4394 { |
4394 JSONStream js; | 4395 JSONStream js; |
4395 const GrowableObjectArray& array = | 4396 const GrowableObjectArray& array = |
4396 GrowableObjectArray::Handle(GrowableObjectArray::New()); | 4397 GrowableObjectArray::Handle(GrowableObjectArray::New()); |
4397 array.PrintJSON(&js, true); | 4398 array.PrintJSON(&js, true); |
4398 elideSubstring("classes", js.ToCString(), buffer); | 4399 elideSubstring("classes", js.ToCString(), buffer); |
4399 elideSubstring("objects", buffer, buffer); | 4400 elideSubstring("objects", buffer, buffer); |
4400 elideSubstring("_GrowableList@", buffer, buffer); | 4401 elideSubstring("_GrowableList@", buffer, buffer); |
4401 EXPECT_STREQ( | 4402 EXPECT_STREQ( |
4402 "{\"type\":\"@GrowableObjectArray\"," | 4403 "{\"type\":\"@List\",\"_vmType\":\"@GrowableObjectArray\"," |
4403 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_GrowableList\"," | 4404 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_GrowableList\"," |
4404 "\"vmName\":\"\"},\"id\":\"\",\"length\":0}", | 4405 "\"_vmName\":\"\"},\"id\":\"\",\"length\":0}", |
4405 buffer); | 4406 buffer); |
4406 } | 4407 } |
4407 // LinkedHashMap reference | 4408 // LinkedHashMap reference |
4408 { | 4409 { |
4409 JSONStream js; | 4410 JSONStream js; |
4410 const LinkedHashMap& array = LinkedHashMap::Handle(LinkedHashMap::New()); | 4411 const LinkedHashMap& array = LinkedHashMap::Handle(LinkedHashMap::New()); |
4411 array.PrintJSON(&js, true); | 4412 array.PrintJSON(&js, true); |
4412 elideSubstring("classes", js.ToCString(), buffer); | 4413 elideSubstring("classes", js.ToCString(), buffer); |
4413 elideSubstring("objects", buffer, buffer); | 4414 elideSubstring("objects", buffer, buffer); |
4414 elideSubstring("_InternalLinkedHashMap@", buffer, buffer); | 4415 elideSubstring("_InternalLinkedHashMap@", buffer, buffer); |
4415 EXPECT_STREQ( | 4416 EXPECT_STREQ( |
4416 "{\"type\":\"@LinkedHashMap\"," | 4417 "{\"type\":\"@Instance\",\"_vmType\":\"@LinkedHashMap\"," |
4417 "\"class\":{\"type\":\"@Class\",\"id\":\"\"," | 4418 "\"class\":{\"type\":\"@Class\",\"id\":\"\"," |
4418 "\"name\":\"_InternalLinkedHashMap\",\"vmName\":\"\"},\"id\":\"\"}", | 4419 "\"name\":\"_InternalLinkedHashMap\",\"_vmName\":\"\"},\"id\":\"\"}", |
4419 buffer); | 4420 buffer); |
4420 } | 4421 } |
4421 // UserTag reference | 4422 // UserTag reference |
4422 { | 4423 { |
4423 JSONStream js; | 4424 JSONStream js; |
4424 Instance& tag = Instance::Handle(isolate->object_store()->default_tag()); | 4425 Instance& tag = Instance::Handle(isolate->object_store()->default_tag()); |
4425 tag.PrintJSON(&js, true); | 4426 tag.PrintJSON(&js, true); |
4426 elideSubstring("classes", js.ToCString(), buffer); | 4427 elideSubstring("classes", js.ToCString(), buffer); |
4427 elideSubstring("objects", buffer, buffer); | 4428 elideSubstring("objects", buffer, buffer); |
4428 elideSubstring("_UserTag@", buffer, buffer); | 4429 elideSubstring("_UserTag@", buffer, buffer); |
4429 EXPECT_STREQ( | 4430 EXPECT_STREQ( |
4430 "{\"type\":\"@UserTag\"," | 4431 "{\"type\":\"@Instance\",\"_vmType\":\"@UserTag\"," |
4431 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_UserTag\"," | 4432 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_UserTag\"," |
4432 "\"vmName\":\"\"}," | 4433 "\"_vmName\":\"\"}," |
4433 "\"id\":\"\"}", | 4434 "\"id\":\"\"}", |
4434 buffer); | 4435 buffer); |
4435 } | 4436 } |
4436 // Type reference | 4437 // Type reference |
4437 // TODO(turnidge): Add in all of the other Type siblings. | 4438 // TODO(turnidge): Add in all of the other Type siblings. |
4438 { | 4439 { |
4439 JSONStream js; | 4440 JSONStream js; |
4440 Instance& type = Instance::Handle(isolate->object_store()->bool_type()); | 4441 Instance& type = Instance::Handle(isolate->object_store()->bool_type()); |
4441 type.PrintJSON(&js, true); | 4442 type.PrintJSON(&js, true); |
4442 elideSubstring("classes", js.ToCString(), buffer); | 4443 elideSubstring("classes", js.ToCString(), buffer); |
4443 elideSubstring("objects", buffer, buffer); | 4444 elideSubstring("objects", buffer, buffer); |
4444 elideSubstring("_Type@", buffer, buffer); | 4445 elideSubstring("_Type@", buffer, buffer); |
4445 EXPECT_STREQ( | 4446 EXPECT_STREQ( |
4446 "{\"type\":\"@Type\"," | 4447 "{\"type\":\"@Type\"," |
4447 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_Type\"," | 4448 "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_Type\"," |
4448 "\"vmName\":\"\"},\"id\":\"\"," | 4449 "\"_vmName\":\"\"},\"id\":\"\"," |
4449 "\"typeClass\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"bool\"}," | 4450 "\"typeClass\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"bool\"}," |
4450 "\"name\":\"bool\"}", | 4451 "\"name\":\"bool\"}", |
4451 buffer); | 4452 buffer); |
4452 } | 4453 } |
4453 // Null reference | 4454 // Null reference |
4454 { | 4455 { |
4455 JSONStream js; | 4456 JSONStream js; |
4456 Object::null_object().PrintJSON(&js, true); | 4457 Object::null_object().PrintJSON(&js, true); |
4457 EXPECT_STREQ( | 4458 EXPECT_STREQ( |
4458 "{\"type\":\"@Null\",\"id\":\"objects\\/null\"," | 4459 "{\"type\":\"@null\",\"id\":\"objects\\/null\"," |
4459 "\"valueAsString\":\"null\"}", | 4460 "\"valueAsString\":\"null\"}", |
4460 js.ToCString()); | 4461 js.ToCString()); |
4461 } | 4462 } |
4462 // Sentinel reference | 4463 // Sentinel reference |
4463 { | 4464 { |
4464 JSONStream js; | 4465 JSONStream js; |
4465 Object::sentinel().PrintJSON(&js, true); | 4466 Object::sentinel().PrintJSON(&js, true); |
4466 EXPECT_STREQ( | 4467 EXPECT_STREQ( |
4467 "{\"type\":\"Sentinel\",\"id\":\"objects\\/not-initialized\"," | 4468 "{\"type\":\"Sentinel\",\"id\":\"objects\\/not-initialized\"," |
4468 "\"valueAsString\":\"<not initialized>\"}", | 4469 "\"valueAsString\":\"<not initialized>\"}", |
(...skipping 10 matching lines...) Expand all Loading... |
4479 } | 4480 } |
4480 // LiteralToken reference. This is meant to be an example of a | 4481 // LiteralToken reference. This is meant to be an example of a |
4481 // "weird" type that isn't usually returned by the VM Service except | 4482 // "weird" type that isn't usually returned by the VM Service except |
4482 // when we are doing direct heap inspection. | 4483 // when we are doing direct heap inspection. |
4483 { | 4484 { |
4484 JSONStream js; | 4485 JSONStream js; |
4485 LiteralToken& tok = LiteralToken::Handle(LiteralToken::New()); | 4486 LiteralToken& tok = LiteralToken::Handle(LiteralToken::New()); |
4486 tok.PrintJSON(&js, true); | 4487 tok.PrintJSON(&js, true); |
4487 elideSubstring("objects", js.ToCString(), buffer); | 4488 elideSubstring("objects", js.ToCString(), buffer); |
4488 EXPECT_STREQ( | 4489 EXPECT_STREQ( |
4489 "{\"type\":\"@LiteralToken\",\"id\":\"\"}", | 4490 "{\"type\":\"@Object\",\"_vmType\":\"@LiteralToken\",\"id\":\"\"}", |
4490 buffer); | 4491 buffer); |
4491 } | 4492 } |
4492 } | 4493 } |
4493 | 4494 |
4494 | 4495 |
4495 TEST_CASE(InstanceEquality) { | 4496 TEST_CASE(InstanceEquality) { |
4496 // Test that Instance::OperatorEquals can call a user-defined operator==. | 4497 // Test that Instance::OperatorEquals can call a user-defined operator==. |
4497 const char* kScript = | 4498 const char* kScript = |
4498 "class A {\n" | 4499 "class A {\n" |
4499 " bool operator==(A other) { return true; }\n" | 4500 " bool operator==(A other) { return true; }\n" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4537 EXPECT_VALID(h_result); | 4538 EXPECT_VALID(h_result); |
4538 Integer& result = Integer::Handle(); | 4539 Integer& result = Integer::Handle(); |
4539 result ^= Api::UnwrapHandle(h_result); | 4540 result ^= Api::UnwrapHandle(h_result); |
4540 String& foo = String::Handle(String::New("foo")); | 4541 String& foo = String::Handle(String::New("foo")); |
4541 Integer& expected = Integer::Handle(); | 4542 Integer& expected = Integer::Handle(); |
4542 expected ^= foo.HashCode(); | 4543 expected ^= foo.HashCode(); |
4543 EXPECT(result.IsIdenticalTo(expected)); | 4544 EXPECT(result.IsIdenticalTo(expected)); |
4544 } | 4545 } |
4545 | 4546 |
4546 } // namespace dart | 4547 } // namespace dart |
OLD | NEW |