9bdf2489b5
Implement the feature spec for checking returns against inferred function return types: https://github.com/dart-lang/sdk/blob/master/docs/language/informal/invalid_returns.md with the change that an invalid return without a subexpression is a warning, not an error. This is because it is a warning in the analyzer and it would be a breaking change to turn it into an error. The check for valid returns is moved to exactly where we handle returns, rather than in ensureAssignable which is used as a helper in a lot of places. A bug in type inference was fixed: we would use `void` for the type of return without a subexpression instead of `null`. To accommodate that we would use a non-standard subtyping relation for returns. This could lead to us inferring a return type of `void` in cases where we should not. Change-Id: Iee9ece9c722f47efa305f49490d3022d0bbb9f44 Reviewed-on: https://dart-review.googlesource.com/72403 Commit-Queue: Kevin Millikin <kmillikin@google.com> Reviewed-by: Aske Simon Christensen <askesc@google.com>
10 lines
244 B
Plaintext
10 lines
244 B
Plaintext
library test;
|
|
import self as self;
|
|
import "dart:core" as core;
|
|
|
|
static method f() → dynamic {
|
|
core::List<core::int> o;
|
|
o.{core::Iterable::forEach}((core::int i) → core::int => i.{core::num::+}(1));
|
|
}
|
|
static method main() → dynamic {}
|