dfda7854a8
Fix decoding of the deoptimization info when constructing a stack trace.
Fix stack trace for checked mode exceptions from optimized code.
BUG=dart:8058
TEST=runtime/tests/vm/dart/optimized_stacktrace_test.dart,
tests/language/stack_overflow_stacktrace_test.dart
Review URL: https://codereview.chromium.org//12049039
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@17755 260f80e4-7a28-3924-810f-c04153c831b5
79 lines
1.7 KiB
Dart
79 lines
1.7 KiB
Dart
// Copyright (c) 2013, 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.
|
|
|
|
// Test correct source positions in stack trace with optimized functions.
|
|
|
|
// (1) Test normal exception.
|
|
foo(x) => bar(x);
|
|
|
|
bar(x) {
|
|
if (x == null) throw 42; // throw at position 11:18
|
|
return x + 1;
|
|
}
|
|
|
|
test1() {
|
|
// First unoptimized.
|
|
try {
|
|
foo(null);
|
|
Expect.fail("Unreachable");
|
|
} catch (e, stacktrace) {
|
|
String s = stacktrace.toString();
|
|
Expect.equals(-1, s.indexOf("-1:-1"));
|
|
Expect.notEquals(-1, s.indexOf("11:18"));
|
|
}
|
|
|
|
// Optimized.
|
|
for (var i=0; i<10000; i++) foo(42);
|
|
try {
|
|
foo(null);
|
|
Expect.fail("Unreachable");
|
|
} catch (e, stacktrace) {
|
|
String s = stacktrace.toString();
|
|
Expect.equals(-1, s.indexOf("-1:-1"));
|
|
Expect.notEquals(-1, s.indexOf("11:18"));
|
|
}
|
|
}
|
|
|
|
|
|
// (2) Test checked mode exceptions.
|
|
maximus(x) => moritz(x);
|
|
|
|
moritz(x) {
|
|
if (x == 333) return 42 ? 0 : 1; // Throws in checked mode.
|
|
if (x == 777) {
|
|
bool b = x; // Throws in checked mode.
|
|
return b;
|
|
}
|
|
|
|
return x + 1;
|
|
}
|
|
|
|
test2() {
|
|
for (var i=0; i<100000; i++) maximus(42);
|
|
try {
|
|
maximus(333);
|
|
} catch (e, stacktrace) {
|
|
String s = stacktrace.toString();
|
|
print(s);
|
|
Expect.notEquals(-1, s.indexOf("maximus"));
|
|
Expect.notEquals(-1, s.indexOf("moritz"));
|
|
Expect.equals(-1, s.indexOf("-1:-1"));
|
|
}
|
|
|
|
try {
|
|
maximus(777);
|
|
} catch (e, stacktrace) {
|
|
String s = stacktrace.toString();
|
|
print(s);
|
|
Expect.notEquals(-1, s.indexOf("maximus"));
|
|
Expect.notEquals(-1, s.indexOf("moritz"));
|
|
Expect.equals(-1, s.indexOf("-1:-1"));
|
|
}
|
|
}
|
|
|
|
main() {
|
|
test1();
|
|
test2();
|
|
}
|