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