Migrate language_2/if to NNBD.

Change-Id: Ia481e2305a2a946876fc8a2dd6fd2e7c333da3fd
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148149
Auto-Submit: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
Commit-Queue: Bob Nystrom <rnystrom@google.com>
This commit is contained in:
Robert Nystrom 2020-05-15 16:00:12 +00:00 committed by commit-bot@chromium.org
parent 667e6f96ae
commit c8674d581e
4 changed files with 247 additions and 0 deletions

View file

@ -0,0 +1,33 @@
// Copyright (c) 2012, 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.
import "package:expect/expect.dart";
// The "if (negative) res2 |= 3" below can be emitted as negative && (res2 |= 3)
// in JavaScript. Dart2js produced the wrong output.
_shiftRight(x, y) => x;
int64_bits(x) => x;
class A {
opshr(int n, a2) {
int res2;
bool negative = a2 == 496;
res2 = _shiftRight(a2, n);
if (negative) {
res2 |= 3;
}
return int64_bits(res2);
}
}
main() {
var a = new A();
var t;
for (int i = 0; i < 3; i++) {
t = a.opshr(99, 496);
}
Expect.equals(499, t);
}

View file

@ -0,0 +1,84 @@
// Copyright (c) 2012, 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.
// Tests dangling else. The VM should not have any problems, but dart2js or
// dart2dart could get this wrong.
import "package:expect/expect.dart";
nestedIf1(notTrue) {
if (notTrue) return 'bad input';
if (notTrue) {
if (notTrue) {
return 'bad';
}
} else {
return 'good';
}
return 'bug';
}
nestedIf2(notTrue) {
if (notTrue) return 'bad input';
if (notTrue) {
if (notTrue) {
return 'bad';
} else {
if (notTrue) {
return 'bad';
}
}
} else {
return 'good';
}
return 'bug';
}
nestedWhile(notTrue) {
if (notTrue) return 'bad input';
if (notTrue) {
while (notTrue) {
if (notTrue) {
return 'bad';
}
}
} else {
return 'good';
}
return 'bug';
}
nestedFor(notTrue) {
if (notTrue) return 'bad input';
if (notTrue) {
for (int i = 0; i < 3; i++) {
if (i == 0) {
return 'bad';
}
}
} else {
return 'good';
}
return 'bug';
}
nestedLabeledStatement(notTrue) {
if (notTrue) return 'bad input';
if (notTrue) {
label:
if (notTrue) {
break label;
}
} else {
return 'good';
}
return 'bug';
}
main() {
Expect.equals('good', nestedIf1(false));
Expect.equals('good', nestedIf2(false));
Expect.equals('good', nestedWhile(false));
Expect.equals('good', nestedFor(false));
Expect.equals('good', nestedLabeledStatement(false));
}

View file

@ -0,0 +1,95 @@
// Copyright (c) 2011, 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.
// Dart test program for testing if statement.
import "package:expect/expect.dart";
class Helper {
static int f0(bool b) {
if (b) ;
if (b)
;
else
;
if (b) {}
if (b) {} else {}
return 0;
}
static int f1(bool b) {
if (b)
return 1;
else
return 2;
}
static int f2(bool b) {
if (b) {
return 1;
} else {
return 2;
}
}
static int f3(bool b) {
if (b) return 1;
return 2;
}
static int f4(bool b) {
if (b) {
return 1;
}
return 2;
}
static int f5(bool b) {
if (!b) {
return 1;
}
return 2;
}
static int f6(bool a, bool b) {
if (a || b) {
return 1;
}
return 2;
}
static int f7(bool a, bool b) {
if (a && b) {
return 1;
}
return 2;
}
}
class IfTest {
static testMain() {
Expect.equals(0, Helper.f0(true));
Expect.equals(1, Helper.f1(true));
Expect.equals(2, Helper.f1(false));
Expect.equals(1, Helper.f2(true));
Expect.equals(2, Helper.f2(false));
Expect.equals(1, Helper.f3(true));
Expect.equals(2, Helper.f3(false));
Expect.equals(1, Helper.f4(true));
Expect.equals(2, Helper.f4(false));
Expect.equals(2, Helper.f5(true));
Expect.equals(1, Helper.f5(false));
Expect.equals(1, Helper.f6(true, true));
Expect.equals(1, Helper.f6(true, false));
Expect.equals(1, Helper.f6(false, true));
Expect.equals(2, Helper.f6(false, false));
Expect.equals(1, Helper.f7(true, true));
Expect.equals(2, Helper.f7(true, false));
Expect.equals(2, Helper.f7(false, true));
Expect.equals(2, Helper.f7(false, false));
}
}
main() {
IfTest.testMain();
}

View file

@ -0,0 +1,35 @@
// Copyright (c) 2011, 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.
// Dart2Js had problems with nested ifs inside loops.
import "package:expect/expect.dart";
foo(x, a) {
/*---------------------------------------------*/
/*---------------------------------------------*/
/*---------------------------------------------*/
/*---------------------------------------------*/
/*---------------------------------------------*/
/*---------------------------------------------*/
/*------- Avoid inlining ----------------------*/
/*---------------------------------------------*/
/*---------------------------------------------*/
/*---------------------------------------------*/
/*---------------------------------------------*/
/*---------------------------------------------*/
/*---------------------------------------------*/
for (int i = 0; i < 10; i++) {
if (x) {
if (!x) a = [];
a.add(3);
}
}
return a;
}
main() {
var a = foo(true, []);
Expect.equals(10, a.length);
Expect.equals(3, a[0]);
}