Skip to content

Commit 867ad17

Browse files
committed
---
yaml --- r: 263073 b: refs/heads/main c: 2374654 h: refs/heads/main i: 263071: e3b67fb
1 parent dfcf338 commit 867ad17

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1994,4 +1994,4 @@ refs/tags/2.14.0-96.0.dev: 1eee24e50fc3028754d9a8e98852b949c04da4e4
19941994
refs/tags/2.14.0-97.0.dev: ba9c1636e87fbdcc02b8bc4a584455c32f8378b4
19951995
refs/tags/2.14.0-98.0.dev: f2d370c93582bbf4da42b5dd4c906d6145b01ea9
19961996
refs/tags/2.14.0-99.0.dev: e722f62b48fb382534efc1f20735def68848006f
1997-
refs/heads/main: 5cb6cb0fa345d0f538811a65c2aaad69b34f7422
1997+
refs/heads/main: 2374654f1fdffd404ca9dc595e698c62f72fea90

trunk/sdk/lib/core/future_impl.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,11 @@ class _FutureImpl<T> implements Future<T> {
235235
completer.complete(result);
236236
}
237237
} catch (innerException, stackTrace) {
238-
completer.completeException(innerException, stackTrace);
238+
if (identical(ex, innerException)) {
239+
completer.completeException(innerException, this.stackTrace);
240+
} else {
241+
completer.completeException(innerException, stackTrace);
242+
}
239243
}
240244
return false;
241245
});

trunk/tests/corelib/future_test.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,19 @@ testCallStackIsCapturedIfChainCallbackThrows() {
351351
Expect.isNotNull(chained.stackTrace);
352352
}
353353

354+
testCallStackIsPreservedIfExceptionIsRethrownInTransformException() {
355+
final completer = new Completer();
356+
var chained = completer.future.chain((_) {
357+
throw 'whoops!';
358+
});
359+
var transformed = chained.transformException((e) {
360+
throw e;
361+
});
362+
363+
completer.complete('blah');
364+
Expect.equals(transformed.stackTrace, chained.stackTrace);
365+
}
366+
354367
// Tests for mixed usage of [onComplete], [then], and [handleException]
355368

356369
testCompleteWithCompletionAndSuccessHandlers() {
@@ -677,6 +690,7 @@ main() {
677690
testCallStackReturnsCallstackPassedToCompleteException();
678691
testCallStackIsCapturedIfTransformCallbackThrows();
679692
testCallStackIsCapturedIfChainCallbackThrows();
693+
testCallStackIsPreservedIfExceptionIsRethrownInTransformException();
680694
testCompleteWithCompletionAndSuccessHandlers();
681695
testExceptionWithCompletionAndSuccessHandlers();
682696
testExceptionWithCompletionAndSuccessAndExceptionHandlers();

0 commit comments

Comments
 (0)