blob: 4fea94c51bd61dcdbc7631859d98debc6d6d166c [file] [log] [blame] [edit]
// 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.
// Regression test for dart2js that used to duplicate some `Object`
// methods to handle `noSuchMethod`.
import "package:expect/expect.dart";
import "../compiler_annotations.dart";
abstract class Foo {
noSuchMethod(im) => 42;
}
@DontInline()
returnFoo() {
(() => 42)();
return new Foo();
// ^^^
// [analyzer] STATIC_WARNING.INSTANTIATE_ABSTRACT_CLASS
// [cfe] The class 'Foo' is abstract and can't be instantiated.
}
class Bar {
operator ==(other) => false;
}
var a = [false, true, new Object(), new Bar()];
main() {
if (a[0] as bool) {
// This `==` call will make the compiler create a selector with an
// exact `TypeMask` of `Foo`. Since `Foo` is abstract, such a call
// cannot happen, but we still used to generate a `==` method on
// the `Object` class to handle `noSuchMethod`.
print(returnFoo() == 42);
} else {
Expect.isFalse(a[2] == 42);
}
}