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

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

Issue 17421003: Store arguments descriptor in ICData. Remove loading of arguments descriptor at unoptimized call si… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 6 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/parser.h » ('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/assert.h" 5 #include "platform/assert.h"
6 #include "vm/assembler.h" 6 #include "vm/assembler.h"
7 #include "vm/bigint_operations.h" 7 #include "vm/bigint_operations.h"
8 #include "vm/class_finalizer.h" 8 #include "vm/class_finalizer.h"
9 #include "vm/dart_api_impl.h" 9 #include "vm/dart_api_impl.h"
10 #include "vm/dart_entry.h"
10 #include "vm/isolate.h" 11 #include "vm/isolate.h"
11 #include "vm/object.h" 12 #include "vm/object.h"
12 #include "vm/object_store.h" 13 #include "vm/object_store.h"
13 #include "vm/simulator.h" 14 #include "vm/simulator.h"
14 #include "vm/symbols.h" 15 #include "vm/symbols.h"
15 #include "vm/unit_test.h" 16 #include "vm/unit_test.h"
16 17
17 namespace dart { 18 namespace dart {
18 19
19 static RawClass* CreateDummyClass(const String& class_name, 20 static RawClass* CreateDummyClass(const String& class_name,
(...skipping 2468 matching lines...) Expand 10 before | Expand all | Expand 10 after
2488 cls, 2489 cls,
2489 0); 2490 0);
2490 } 2491 }
2491 2492
2492 2493
2493 TEST_CASE(ICData) { 2494 TEST_CASE(ICData) {
2494 Function& function = Function::Handle(GetDummyTarget("Bern")); 2495 Function& function = Function::Handle(GetDummyTarget("Bern"));
2495 const intptr_t id = 12; 2496 const intptr_t id = 12;
2496 const intptr_t num_args_tested = 1; 2497 const intptr_t num_args_tested = 1;
2497 const String& target_name = String::Handle(String::New("Thun")); 2498 const String& target_name = String::Handle(String::New("Thun"));
2499 const Array& args_descriptor =
2500 Array::Handle(ArgumentsDescriptor::New(1, Object::null_array()));
2498 ICData& o1 = ICData::Handle(); 2501 ICData& o1 = ICData::Handle();
2499 o1 = ICData::New(function, target_name, id, num_args_tested); 2502 o1 = ICData::New(function, target_name, args_descriptor, id, num_args_tested);
2500 EXPECT_EQ(1, o1.num_args_tested()); 2503 EXPECT_EQ(1, o1.num_args_tested());
2501 EXPECT_EQ(id, o1.deopt_id()); 2504 EXPECT_EQ(id, o1.deopt_id());
2502 EXPECT_EQ(function.raw(), o1.function()); 2505 EXPECT_EQ(function.raw(), o1.function());
2503 EXPECT_EQ(0, o1.NumberOfChecks()); 2506 EXPECT_EQ(0, o1.NumberOfChecks());
2504 EXPECT_EQ(target_name.raw(), o1.target_name()); 2507 EXPECT_EQ(target_name.raw(), o1.target_name());
2508 EXPECT_EQ(args_descriptor.raw(), o1.arguments_descriptor());
2505 2509
2506 const Function& target1 = Function::Handle(GetDummyTarget("Thun")); 2510 const Function& target1 = Function::Handle(GetDummyTarget("Thun"));
2507 o1.AddReceiverCheck(kSmiCid, target1); 2511 o1.AddReceiverCheck(kSmiCid, target1);
2508 EXPECT_EQ(1, o1.NumberOfChecks()); 2512 EXPECT_EQ(1, o1.NumberOfChecks());
2509 intptr_t test_class_id = -1; 2513 intptr_t test_class_id = -1;
2510 Function& test_target = Function::Handle(); 2514 Function& test_target = Function::Handle();
2511 o1.GetOneClassCheckAt(0, &test_class_id, &test_target); 2515 o1.GetOneClassCheckAt(0, &test_class_id, &test_target);
2512 EXPECT_EQ(kSmiCid, test_class_id); 2516 EXPECT_EQ(kSmiCid, test_class_id);
2513 EXPECT_EQ(target1.raw(), test_target.raw()); 2517 EXPECT_EQ(target1.raw(), test_target.raw());
2514 GrowableArray<intptr_t> test_class_ids; 2518 GrowableArray<intptr_t> test_class_ids;
2515 o1.GetCheckAt(0, &test_class_ids, &test_target); 2519 o1.GetCheckAt(0, &test_class_ids, &test_target);
2516 EXPECT_EQ(1, test_class_ids.length()); 2520 EXPECT_EQ(1, test_class_ids.length());
2517 EXPECT_EQ(kSmiCid, test_class_ids[0]); 2521 EXPECT_EQ(kSmiCid, test_class_ids[0]);
2518 EXPECT_EQ(target1.raw(), test_target.raw()); 2522 EXPECT_EQ(target1.raw(), test_target.raw());
2519 2523
2520 const Function& target2 = Function::Handle(GetDummyTarget("Thun")); 2524 const Function& target2 = Function::Handle(GetDummyTarget("Thun"));
2521 o1.AddReceiverCheck(kDoubleCid, target2); 2525 o1.AddReceiverCheck(kDoubleCid, target2);
2522 EXPECT_EQ(2, o1.NumberOfChecks()); 2526 EXPECT_EQ(2, o1.NumberOfChecks());
2523 o1.GetOneClassCheckAt(1, &test_class_id, &test_target); 2527 o1.GetOneClassCheckAt(1, &test_class_id, &test_target);
2524 EXPECT_EQ(kDoubleCid, test_class_id); 2528 EXPECT_EQ(kDoubleCid, test_class_id);
2525 EXPECT_EQ(target2.raw(), test_target.raw()); 2529 EXPECT_EQ(target2.raw(), test_target.raw());
2526 2530
2527 ICData& o2 = ICData::Handle(); 2531 ICData& o2 = ICData::Handle();
2528 o2 = ICData::New(function, target_name, 57, 2); 2532 o2 = ICData::New(function, target_name, args_descriptor, 57, 2);
2529 EXPECT_EQ(2, o2.num_args_tested()); 2533 EXPECT_EQ(2, o2.num_args_tested());
2530 EXPECT_EQ(57, o2.deopt_id()); 2534 EXPECT_EQ(57, o2.deopt_id());
2531 EXPECT_EQ(function.raw(), o2.function()); 2535 EXPECT_EQ(function.raw(), o2.function());
2532 EXPECT_EQ(0, o2.NumberOfChecks()); 2536 EXPECT_EQ(0, o2.NumberOfChecks());
2533 GrowableArray<intptr_t> classes; 2537 GrowableArray<intptr_t> classes;
2534 classes.Add(kSmiCid); 2538 classes.Add(kSmiCid);
2535 classes.Add(kSmiCid); 2539 classes.Add(kSmiCid);
2536 o2.AddCheck(classes, target1); 2540 o2.AddCheck(classes, target1);
2537 EXPECT_EQ(1, o2.NumberOfChecks()); 2541 EXPECT_EQ(1, o2.NumberOfChecks());
2538 o2.GetCheckAt(0, &test_class_ids, &test_target); 2542 o2.GetCheckAt(0, &test_class_ids, &test_target);
(...skipping 786 matching lines...) Expand 10 before | Expand all | Expand 10 after
3325 const Function& test7 = Function::Handle(GetFunction(class_a, "test7")); 3329 const Function& test7 = Function::Handle(GetFunction(class_a, "test7"));
3326 EXPECT_EQ(test1.SourceFingerprint(), test2.SourceFingerprint()); 3330 EXPECT_EQ(test1.SourceFingerprint(), test2.SourceFingerprint());
3327 EXPECT_NE(test1.SourceFingerprint(), test3.SourceFingerprint()); 3331 EXPECT_NE(test1.SourceFingerprint(), test3.SourceFingerprint());
3328 EXPECT_NE(test3.SourceFingerprint(), test4.SourceFingerprint()); 3332 EXPECT_NE(test3.SourceFingerprint(), test4.SourceFingerprint());
3329 EXPECT_NE(test4.SourceFingerprint(), test5.SourceFingerprint()); 3333 EXPECT_NE(test4.SourceFingerprint(), test5.SourceFingerprint());
3330 EXPECT_NE(test5.SourceFingerprint(), test6.SourceFingerprint()); 3334 EXPECT_NE(test5.SourceFingerprint(), test6.SourceFingerprint());
3331 EXPECT_EQ(test6.SourceFingerprint(), test7.SourceFingerprint()); 3335 EXPECT_EQ(test6.SourceFingerprint(), test7.SourceFingerprint());
3332 } 3336 }
3333 3337
3334 } // namespace dart 3338 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698