Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(258)

Unified Diff: pkg/meta/lib/meta.dart

Issue 2170643003: Add an alwaysThrows annotation to indicate that a function always throws. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/meta/lib/meta.dart
diff --git a/pkg/meta/lib/meta.dart b/pkg/meta/lib/meta.dart
index 99a3924683d74e9aa7e2014f28350b92e86d901c..6a53dd86c0c05315b80b460ad6f33aed48999f51 100644
--- a/pkg/meta/lib/meta.dart
+++ b/pkg/meta/lib/meta.dart
@@ -18,6 +18,31 @@
/// in the language tour.
library meta;
+/// Used to annotate a function `f`. Indicates that `f` always throws an
+/// exception.
+///
+/// Tools, such as the analyzer, can use this to understand whether a block of
+/// code "exits". For example:
+///
+/// ```dart
+/// @alwaysThrows toss() { throw 'Thrown'; }
+///
+/// int fn(bool b) {
+/// if (b) {
+/// return 0;
+/// } else {
+/// toss();
+/// print("Hello.");
+/// }
+/// }
+/// ```
+///
+/// Without the annotation on `toss`, it would look as though `fn` doesn't
+/// always return a / value. The annotation shows that `fn` does always exit. In
Brian Wilkerson 2016/07/21 15:39:25 Not sure why there's a slash on either this line o
+/// addition, the / annotation reveals that any statements following a call to
+/// `toss` (like the `print` call) are dead code.
+const _AlwaysThrows alwaysThrows = const _AlwaysThrows();
Brian Wilkerson 2016/07/21 15:39:25 There are two ways in which this annotation can ad
+
/// Used to annotate an instance or static method `m`. Indicates that `m` must
/// either be abstract or must return a newly allocated object or `null`. In
/// addition, every method that either implements or overrides `m` is implicitly
@@ -116,6 +141,10 @@ class Required {
const Required([this.reason]);
}
+class _AlwaysThrows {
+ const _AlwaysThrows();
+}
+
class _Factory {
const _Factory();
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698