ef47fe5e96
R=ahe@google.com Review URL: https://codereview.chromium.org//23225004 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26706 260f80e4-7a28-3924-810f-c04153c831b5
35 lines
1.1 KiB
Dart
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()];
|
|
|
|
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.throws(() => a[0].hashCode, (e) => e is RangeError);
|
|
|
|
// 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();
|
|
}
|