Trace.current skips an extra frame in JS.
JS traces include a frame for StackTrace.current while VM traces do not.
R=rnystrom@google.com
Review URL: https://codereview.chromium.org//2067063002 .
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 174754c..21fd734 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 1.6.6
+
+* `new Trace.current()` and `new Chain.current()` now skip an extra frame when
+ run in a JS context. This makes their return values match the VM context.
+
## 1.6.5
* Really fix strong mode warnings.
diff --git a/lib/src/trace.dart b/lib/src/trace.dart
index 8537b62..20343ad 100644
--- a/lib/src/trace.dart
+++ b/lib/src/trace.dart
@@ -81,7 +81,11 @@
}
var trace = new Trace.from(StackTrace.current);
- return new LazyTrace(() => new Trace(trace.frames.skip(level + 1)));
+ return new LazyTrace(() {
+ // JS includes a frame for the call to StackTrace.current, but the VM
+ // doesn't, so we skip an extra frame in a JS context.
+ return new Trace(trace.frames.skip(level + (inJS ? 2 : 1)));
+ });
}
/// Returns a new stack trace containing the same data as [trace].
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 710abdc..b06d462 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -2,10 +2,16 @@
// 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.
+import 'package:path/path.dart' as p;
+
/// The line used in the string representation of stack chains to represent
/// the gap between traces.
const chainGap = '===== asynchronous gap ===========================\n';
+// TODO(nweiz): When cross-platform imports work, use them to set this.
+/// Whether we're running in a JS context.
+final bool inJS = p.style == p.Style.url;
+
/// Returns [string] with enough spaces added to the end to make it [length]
/// characters long.
String padRight(String string, int length) {
diff --git a/pubspec.yaml b/pubspec.yaml
index ac3c311..06c9d3c 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -7,7 +7,7 @@
#
# When the major version is upgraded, you *must* update that version constraint
# in pub to stay in sync with this.
-version: 1.6.6-dev
+version: 1.6.6
author: "Dart Team <misc@dartlang.org>"
homepage: https://github.com/dart-lang/stack_trace
description: >