Chromium Code Reviews| Index: tests/language/vm/optimized_guarded_field_test.dart |
| =================================================================== |
| --- tests/language/vm/optimized_guarded_field_test.dart (revision 29540) |
| +++ tests/language/vm/optimized_guarded_field_test.dart (working copy) |
| @@ -17,6 +17,41 @@ |
| test(obj) => obj.foo == null ? "null" : "other"; |
| + |
| +class C { |
| + C(this.x, this.y); |
| + final x; |
| + final y; |
| +} |
| + |
| +test_deopt(a, b) { |
| + var c = new C(a, b); |
| + return c.x + c.y; |
| +} |
| + |
| + |
| +create_error (x) { |
| + return x as int; |
| +} |
| + |
| +check_stacktrace(e) { |
| + var s = e.stackTrace; |
| + if (identical(s, null)) throw "FAIL"; |
|
Ivan Posva
2013/11/01 04:50:05
Why not just s == null?
Florian Schneider
2013/11/01 10:39:27
I can't have an IC call here: it will introduce a
|
| + // s should never be null. |
| + return "OK"; |
| +} |
| + |
| +test_stacktrace() { |
| + try { |
| + create_error("bar"); |
| + } catch (e) { |
| + Expect.equals("OK", check_stacktrace(e)); |
| + for (var i=0; i<20; i++) check_stacktrace(e); |
|
Ivan Posva
2013/11/01 04:50:05
ditto
Florian Schneider
2013/11/01 10:39:27
Done.
|
| + Expect.equals("OK", check_stacktrace(e)); |
| + } |
| +} |
| + |
| + |
| main() { |
| var a = new A(); |
| var b = new B(); |
| @@ -32,4 +67,13 @@ |
| a.foo = 123; |
| Expect.equals("other", test(a)); |
| Expect.equals("null", test(b)); |
| + |
| + // Test guarded fields with allocation sinking and deoptimization. |
| + Expect.equals(43, test_deopt(42, 1)); |
| + for (var i = 0; i < 20; i++) test_deopt(42, 1); |
|
Ivan Posva
2013/11/01 04:50:05
ditto
Florian Schneider
2013/11/01 10:39:27
Done.
|
| + Expect.equals(43, test_deopt(42, 1)); |
| + Expect.equals("aaabbb", test_deopt("aaa", "bbb")); |
| + |
| + // Regression test for fields initialized in native code (Error._stackTrace). |
| + test_stacktrace(); |
| } |