Files
sdk/tests/language/no_such_method/empty_selector_test.dart
T
Robert Nystrom 65032b4e4e Migrate language_2/no_such_method to NNBD.
Change-Id: I5bae11c115c7ee2c9a581ce71f2d29203b92f923
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149783
Auto-Submit: Bob Nystrom <rnystrom@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Nicholas Shahan <nshahan@google.com>
2020-06-03 17:15:10 +00:00

35 lines
1.1 KiB
Dart

// 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.
import "package:expect/expect.dart";
class A {
noSuchMethod(_) => 'foo';
get hashCode => 42;
}
// Keep that list empty to make the inferrer infer an empty element
// type.
var a = [];
var b = [new A(), new Object() as dynamic];
main() {
// The following [hashCode] call will create a selector whose
// receiver type is empty. This used to make dart2js generate a
// [noSuchMethod] handler for [hashCode] on the Object class, which
// would override the actual implementation.
Expect.throwsRangeError(() => a[0].hashCode);
// This code calls the [hashCode] method put on the [Object] class,
// which used to be a [noSuchMethod] handler method.
Expect.isTrue(b[1].hashCode is int);
// Sanity checks.
Expect.equals(42, b[0].hashCode);
Expect.equals('foo', b[0].foo());
// Prevent optimizations on the [b] variable.
b.clear();
}