5f97e22d80
Previously there was a problem with type variables referenced inside
a closure inside a field initializer, like so:
class Foo<T> {
var field = () => T;
}
The type variable cannot be accessed on 'this' because the closure is
created before 'this'. It also cannot be accessed as a parameter.
It is now properly treated as an unboxed free variable, and at
closure creation the value is taken from the constructor parameter
holding the type variable.
As with everything else during constructor build-up, the type variables
are now held in the IR builder's environment. It has proven to be a
robust way of doing things so far.
This simplifies the IR builder's role in this. The builder will not
detect how a type variable should be accessed (i.e. "if inside
a closure inside a field..."). If the type variable is in the
environment that's the one it will use, otherwise it defaults to
extract it from the receiver object.
Also, the closure conversion phase now detects type variables
mentioned in "on T catch()" clauses.
BUG=
R=karlklose@google.com
Review URL: https://codereview.chromium.org//1158693003
Run Existing Tests ================== See the output of ../tools/test.py --help for how to run tests. See also https://code.google.com/p/dart/wiki/Building#Testing for detailed examples. Create New Tests ================ See comments above factory StandardTestSuite.forDirectory in ../tools/testing/dart/test_suite.dart for the default test directory layout. By default test-file names must end in "_test.dart", but some test suites, such as ./co19, subclass StandardTestSuite and override this default. See comments at the beginning of ../tools/testing/dart/multitest.dart for how to create tests that pass by failing with a known error. For example, ... int x = "not an int"; /// 01: static type warning ... as part of a test will only pass the "--compiler dartanalyzer" test if the assignment generates a static type warning.