| 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 |