Migrate language_2/return to NNBD.

Change-Id: I3666b69e8371330e2e615aef9fcdecbb1d0753b9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150471
Auto-Submit: Bob Nystrom <rnystrom@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Nicholas Shahan <nshahan@google.com>
This commit is contained in:
Robert Nystrom 2020-06-09 16:31:44 +00:00 committed by commit-bot@chromium.org
parent 0f15f8722e
commit eb098a5f9e
4 changed files with 91 additions and 0 deletions

View file

@ -0,0 +1,25 @@
// 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.
// Test for a dart2js bug where the live environment was not computed
// right.
import "package:expect/expect.dart";
class A {
foo() {
var x = 0;
while (true) {
if (true) {
return 42;
} else {}
x = bar();
}
}
bar() => 1;
}
main() {
Expect.equals(42, new A().foo());
}

View file

@ -0,0 +1,34 @@
// 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";
class OneArg<A> {
OneArg<A> get foo => new OneArg<A>();
OneArg<A> get bar {
return new OneArg<A>();
}
}
class TwoArgs<A, B> {
TwoArgs<A, B> get foo => new TwoArgs<A, B>();
TwoArgs<A, B> get bar {
return new TwoArgs<A, B>();
}
}
void main() {
Expect.isTrue(new OneArg<String>().foo is OneArg);
Expect.isTrue(new OneArg<String>().bar is OneArg);
Expect.isTrue(new TwoArgs<String, int>().foo is TwoArgs);
Expect.isTrue(new TwoArgs<String, int>().bar is TwoArgs);
// TODO(karlklose): Please remove the return when dart2js can handle
// the type tests after it.
return;
Expect.isTrue(new OneArg<String>().foo is OneArg<String>);
Expect.isTrue(new OneArg<String>().bar is OneArg<String>);
Expect.isTrue(new TwoArgs<String, int>().foo is TwoArgs<String, int>);
Expect.isTrue(new TwoArgs<String, int>().bar is TwoArgs<String, int>);
}

View file

@ -0,0 +1,17 @@
// Copyright (c) 2013, 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.
// Make sure the engine does not infer the wrong type for [:A.foo:].
import "package:expect/expect.dart";
class A {
foo() => this;
}
class B extends A {}
main() {
Expect.isTrue(new B().foo() is B);
}

View file

@ -0,0 +1,15 @@
// 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";
int returnString1() => 's'; /*@compile-error=unspecified*/
void returnNull() => null;
void returnString2() => 's'; /*@compile-error=unspecified*/
main() {
returnString1();
returnNull();
returnString2();
}