Chromium Code Reviews| Index: language/src/InstanceIncrDeoptTest.dart |
| =================================================================== |
| --- language/src/InstanceIncrDeoptTest.dart (revision 0) |
| +++ language/src/InstanceIncrDeoptTest.dart (revision 0) |
| @@ -0,0 +1,43 @@ |
| +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| +// for details. All rights reserved. Use of this source code is governed by a |
| +// BSD-style license that can be found in the LICENSE file. |
| + |
| +// Check correct deoptimization of instance field increment. |
| + |
| + |
| +main() { |
| + var a = new A(); |
| + var aa = new A(); |
| + for (int i = 0; i < 2000; i++) { |
| + a.Incr(); |
| + myIncr(aa); |
| + } |
| + Expect.equals(2000, a.f); |
| + Expect.equals(2000, aa.f); |
| + a.f = 1.0; |
| + // Deoptimize ++ part of instance increment. |
| + a.Incr(); |
| + Expect.equals(2.0, a.f); |
| + var b = new B(); |
| + // Deoptimize getfield part of instance increment. |
| + myIncr(b); |
| + Expect.equals(1.0, b.f); |
|
regis
2011/11/02 02:06:37
Do you use a double for a particular reason? b.f h
srdjan
2011/11/02 15:10:55
Good catch, this would fail in type checked mode.
|
| +} |
| + |
| +myIncr(var a) { |
| + a.f++; |
| +} |
| + |
| +class A { |
| + A() : f = 0; |
| + Incr() { |
| + f++; |
| + } |
| + int f; |
| +} |
| + |
| +class B { |
| + B() : f = 0; |
| + int f; |
| +} |
| + |