mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 19:10:05 +00:00
bed5debbeb
Fixes #32156 Fixes #32157 Fixes #32426 This also fixes `implements Function` so it has no effect in Dart 2 (it is ignored for the purposes of subtyping.) Change-Id: Ibec9c77cd516b8b97fef68a579998598d0acf8c6 Reviewed-on: https://dart-review.googlesource.com/45141 Commit-Queue: Jenny Messerly <jmesserly@google.com> Reviewed-by: Paul Berry <paulberry@google.com> Reviewed-by: Vijay Menon <vsm@google.com>
31 lines
854 B
Dart
31 lines
854 B
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 F {
|
|
final int value;
|
|
F(this.value);
|
|
call() => value;
|
|
noSuchMethod(Invocation i) {
|
|
if (i.memberName == #call && i.isMethod) {
|
|
return i.positionalArguments[0];
|
|
}
|
|
return super.noSuchMethod(i);
|
|
}
|
|
}
|
|
|
|
main() {
|
|
F f = new F(42);
|
|
// Tears off f.call, fails with nSM (wrong number of arguments).
|
|
Expect.throwsNoSuchMethodError(() => Function.apply(f, ['a', 'b', 'c', 'd']));
|
|
|
|
dynamic d = f;
|
|
var result = d('a', 'b', 'c', 'd'); // calls F.noSuchMethod
|
|
Expect.equals('a', result);
|
|
|
|
// Tears off f.call, call succeeds
|
|
Expect.equals(42, Function.apply(f, []));
|
|
}
|