mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 11:31:57 +00:00
[dart2js] Remove tests/dart2js/boolean_conversion_test.
The dart2js_2 version still exists. Prior to null safety, it was legal to assign `null` to a `bool`, so things like boolean operators and control flow constructs required null checks on their inputs. `--omit-implicit-checks` removed these null checks, so we had to specify what the behavior would be in these cases. (In general, `null` was just treated as a falsey value, since that's what happens in JS.) With null safety, it is no longer legal to assign `null` to a (non-nullable) `bool`, so the backend freely optimizes boolean expressions under this assumption. It's possible to smuggle `null` in via a cast to `dynamic` and an implicit downcast to `bool`. The downcast ordinarily fails at runtime but can be removed with `--omit-implicit-checks`. We do not want to specify the behavior in this case. We do not guarantee the behavior under `--omit-implicit-checks` of code which would have failed with checks enabled. Maintaining the old behavior would likely require us to be pessimistic about nullability and miss optimization opportunities. Fixes: https://github.com/dart-lang/sdk/issues/43471 Change-Id: I7e8e7c66f777ef631ef4054a8dfe211e3e2bef55 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/169820 Reviewed-by: Stephen Adams <sra@google.com> Commit-Queue: Mayank Patke <fishythefish@google.com>
This commit is contained in:
parent
04105ec124
commit
a5afc3e974
|
@ -1,103 +0,0 @@
|
|||
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
// dart2jsOptions=--omit-implicit-checks
|
||||
|
||||
// Note: --omit-implicit-checks causes Expect.isNull to misbehave, so we use
|
||||
// Expect.equals(null, ...) instead.
|
||||
|
||||
import 'package:expect/expect.dart';
|
||||
|
||||
void main() {
|
||||
conditionalTest();
|
||||
orTest();
|
||||
andTest();
|
||||
ifTest();
|
||||
forTest();
|
||||
whileTest();
|
||||
doTest();
|
||||
notTest();
|
||||
ifElementTest();
|
||||
forElementTest();
|
||||
}
|
||||
|
||||
void conditionalTest() {
|
||||
bool x = null as dynamic;
|
||||
Expect.isFalse(x ? true : false);
|
||||
}
|
||||
|
||||
void orTest() {
|
||||
bool x = null as dynamic;
|
||||
Expect.equals(null, x || x);
|
||||
Expect.isFalse(x || false);
|
||||
Expect.isTrue(x || true);
|
||||
Expect.equals(null, false || x);
|
||||
Expect.isTrue(true || x);
|
||||
}
|
||||
|
||||
void andTest() {
|
||||
bool x = null as dynamic;
|
||||
Expect.isFalse(x && x);
|
||||
Expect.isFalse(x && false);
|
||||
Expect.isFalse(x && true);
|
||||
Expect.isFalse(false && x);
|
||||
Expect.equals(null, true && x);
|
||||
}
|
||||
|
||||
void ifTest() {
|
||||
bool x = null as dynamic;
|
||||
Expect.isFalse(() {
|
||||
if (x) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}());
|
||||
}
|
||||
|
||||
void forTest() {
|
||||
bool x = null as dynamic;
|
||||
Expect.isFalse(() {
|
||||
for (; x;) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}());
|
||||
}
|
||||
|
||||
void whileTest() {
|
||||
bool x = null as dynamic;
|
||||
Expect.isFalse(() {
|
||||
while (x) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}());
|
||||
}
|
||||
|
||||
void doTest() {
|
||||
bool x = null as dynamic;
|
||||
Expect.equals(1, () {
|
||||
int n = 0;
|
||||
do {
|
||||
n++;
|
||||
} while (x);
|
||||
return n;
|
||||
}());
|
||||
}
|
||||
|
||||
void notTest() {
|
||||
bool x = null as dynamic;
|
||||
Expect.isTrue(!x);
|
||||
}
|
||||
|
||||
void ifElementTest() {
|
||||
bool x = null as dynamic;
|
||||
Expect.listEquals([], [if (x) 1]);
|
||||
}
|
||||
|
||||
void forElementTest() {
|
||||
bool x = null as dynamic;
|
||||
Expect.listEquals([], [for (var i = 0; x; i++) i]);
|
||||
}
|
Loading…
Reference in a new issue