dart-sdk/tests/language_2/function_apply_generic_test.dart
Stephen Adams c5caf7e294 dart2js: Pass through type arguments in parameter defaulting stubs
This fixes a problem where a defaulted optional argument
would cause the passed type parameters to be replace with dynamic.

Change-Id: I32cf327b3a4b6176f199164c840a1114fc302205
Reviewed-on: https://dart-review.googlesource.com/49081
Commit-Queue: Stephen Adams <sra@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2018-04-04 00:20:41 +00:00

65 lines
1.9 KiB
Dart

// Copyright (c) 2018, 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";
List<T> staticFn<T>(
[T a1, T a2, T a3, T a4, T a5, T a6, T a7, T a8, T a9, T a10]) {
return <T>[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10];
}
class C<CT> {
List<T> memberFn<T>(
[T a1, T a2, T a3, T a4, T a5, T a6, T a7, T a8, T a9, T a10]) {
return <T>[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10];
}
// Intercepted, e.g. on JSArray.
List<T> map<T>(
[T a1, T a2, T a3, T a4, T a5, T a6, T a7, T a8, T a9, T a10]) {
return <T>[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10];
}
}
check(a, b) {
print('a: $a\nb: $b');
Expect.equals(a.toString(), b.toString());
}
main() {
check('[1, 2, 3, null, null, null, null, null, null, null]',
Function.apply(staticFn, [1, 2, 3]));
check('[1, 2, 3, 4, null, null, null, null, null, null]',
Function.apply(staticFn, [1, 2, 3, 4]));
check('[1, 2, 3, 4, 5, 6, 7, null, null, null]',
Function.apply(staticFn, [1, 2, 3, 4, 5, 6, 7]));
var o = new C<num>();
dynamic memberFn1 = o.map;
check('[1, 2, 3, null, null, null, null, null, null, null]',
Function.apply(memberFn1, [1, 2, 3]));
check('[1, 2, 3, 4, null, null, null, null, null, null]',
Function.apply(memberFn1, [1, 2, 3, 4]));
check('[1, 2, 3, 4, 5, 6, 7, null, null, null]',
Function.apply(memberFn1, [1, 2, 3, 4, 5, 6, 7]));
dynamic memberFn2 = o.memberFn;
check('[1, 2, 3, null, null, null, null, null, null, null]',
Function.apply(memberFn2, [1, 2, 3]));
check('[1, 2, 3, 4, null, null, null, null, null, null]',
Function.apply(memberFn2, [1, 2, 3, 4]));
check('[1, 2, 3, 4, 5, 6, 7, null, null, null]',
Function.apply(memberFn2, [1, 2, 3, 4, 5, 6, 7]));
// TODO(sra): Apply of instantiations
}