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

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

Issue 547703002: Rework how types work in the VM Service. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: gen js Created 6 years, 3 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/object.cc ('k') | runtime/vm/service/protocol.md » ('j') | 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/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
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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/service/protocol.md » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698