bbca76a5e2
Inline more unsafe operator calls, and insert more checks accordingly.
When "num" is the only receiver that does not respond with NSM, insert
a check and use the builtin operator. Previously we only did this when
the receiver was a number or null. For example:
if (typeof x !== "number") return x.$lt();
result = x < 4;
When the argument might have the wrong type, insert an argument check
and use the builtin operator. Previously we never did this if the
argument might have the wrong type. For example:
if (typeof x !== "number") return H.iae(x);
result = 4 < x;
If both receiver and argument need checks, we join the two checks and
use a one-shot interceptor to throw the error:
if (typeof x !== "number" || typeof y !== "number")
return J.$lt(x, y);
result = x < y;
NullCheck has been generalized to a ReceiverCheck instruction to
support "x.$lt()" above, that throws even if x is a non-null value.
BUG=
R=sigmund@google.com
Review URL: https://codereview.chromium.org/1668913002 .
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 dart2analyzer" test if the assignment generates a static type warning.