Skip to content

Commit 3a23e60

Browse files
committed
Revert "fix #27256, track type bounds for generic functions"
This reverts commit b58f826. BUG= Review URL: https://codereview.chromium.org/2870543005 .
1 parent b58f826 commit 3a23e60

27 files changed

+31012
-32060
lines changed

pkg/dev_compiler/lib/js/amd/dart_sdk.js

+7,654-7,869
Large diffs are not rendered by default.

pkg/dev_compiler/lib/js/amd/dart_sdk.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/dev_compiler/lib/js/common/dart_sdk.js

+7,654-7,869
Large diffs are not rendered by default.

pkg/dev_compiler/lib/js/common/dart_sdk.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/dev_compiler/lib/js/es6/dart_sdk.js

+7,654-7,869
Large diffs are not rendered by default.

pkg/dev_compiler/lib/js/es6/dart_sdk.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/dev_compiler/lib/js/legacy/dart_sdk.js

+7,654-7,869
Large diffs are not rendered by default.

pkg/dev_compiler/lib/js/legacy/dart_sdk.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/dev_compiler/lib/sdk/ddc_sdk.sum

-1.3 KB
Binary file not shown.

pkg/dev_compiler/lib/src/compiler/code_generator.dart

+49-40
Original file line numberDiff line numberDiff line change
@@ -2992,6 +2992,41 @@ class CodeGenerator extends Object
29922992
bool nameType: true,
29932993
bool hoistType: true,
29942994
definite: false}) {
2995+
var parts = _emitFunctionTypeParts(type,
2996+
parameters: parameters,
2997+
lowerTypedef: lowerTypedef,
2998+
nameType: nameType,
2999+
hoistType: hoistType);
3000+
var helper = definite ? 'definiteFunctionType' : 'functionType';
3001+
var fullType = _callHelper('${helper}(#)', [parts]);
3002+
if (!nameType) return fullType;
3003+
return _typeTable.nameType(type, fullType,
3004+
hoistType: hoistType, definite: definite);
3005+
}
3006+
3007+
JS.Expression _emitAnnotatedFunctionType(
3008+
FunctionType type, List<Annotation> metadata,
3009+
{List<FormalParameter> parameters,
3010+
bool lowerTypedef: false,
3011+
bool nameType: true,
3012+
bool hoistType: true,
3013+
bool definite: false}) {
3014+
var result = _emitFunctionType(type,
3015+
parameters: parameters,
3016+
lowerTypedef: lowerTypedef,
3017+
nameType: nameType,
3018+
hoistType: hoistType,
3019+
definite: definite);
3020+
return _emitAnnotatedResult(result, metadata);
3021+
}
3022+
3023+
/// Emit the pieces of a function type, as an array of return type,
3024+
/// regular args, and optional/named args.
3025+
List<JS.Expression> _emitFunctionTypeParts(FunctionType type,
3026+
{List<FormalParameter> parameters,
3027+
bool lowerTypedef: false,
3028+
bool nameType: true,
3029+
bool hoistType: true}) {
29953030
var parameterTypes = type.normalParameterTypes;
29963031
var optionalTypes = type.optionalParameterTypes;
29973032
var namedTypes = type.namedParameterTypes;
@@ -3017,51 +3052,25 @@ class CodeGenerator extends Object
30173052
typeParts = [rt, ra];
30183053
}
30193054

3020-
JS.Expression fullType;
30213055
var typeFormals = type.typeFormals;
3022-
String helperCall;
30233056
if (typeFormals.isNotEmpty) {
3057+
// TODO(jmesserly): this is a suboptimal representation for universal
3058+
// function types (as callable functions). See discussion at
3059+
// https://github.com/dart-lang/sdk/issues/27333
30243060
var tf = _emitTypeFormals(typeFormals);
3025-
3026-
addTypeFormalsAsParameters(List<JS.Expression> elements) {
3027-
var names = _typeTable.discharge(typeFormals);
3028-
var array = new JS.ArrayInitializer(elements);
3029-
return names.isEmpty
3030-
? js.call('(#) => #', [tf, array])
3031-
: js.call('(#) => {#; return #;}', [tf, names, array]);
3032-
}
3033-
3034-
typeParts = [addTypeFormalsAsParameters(typeParts)];
3035-
3036-
helperCall = definite ? 'gFnType(#)' : 'gFnTypeFuzzy(#)';
3037-
// If any explicit bounds were passed, emit them.
3038-
if (typeFormals.any((t) => t.bound != null)) {
3039-
var bounds = typeFormals.map((t) => _emitType(t.type.bound)).toList();
3040-
typeParts.add(addTypeFormalsAsParameters(bounds));
3061+
var names = _typeTable.discharge(typeFormals);
3062+
var parts = new JS.ArrayInitializer(typeParts);
3063+
if (names.isEmpty) {
3064+
typeParts = [
3065+
js.call('(#) => #', [tf, parts])
3066+
];
3067+
} else {
3068+
typeParts = [
3069+
js.call('(#) => {#; return #;}', [tf, names, parts])
3070+
];
30413071
}
3042-
} else {
3043-
helperCall = definite ? 'fnType(#)' : 'fnTypeFuzzy(#)';
30443072
}
3045-
fullType = _callHelper(helperCall, [typeParts]);
3046-
if (!nameType) return fullType;
3047-
return _typeTable.nameType(type, fullType,
3048-
hoistType: hoistType, definite: definite);
3049-
}
3050-
3051-
JS.Expression _emitAnnotatedFunctionType(
3052-
FunctionType type, List<Annotation> metadata,
3053-
{List<FormalParameter> parameters,
3054-
bool lowerTypedef: false,
3055-
bool nameType: true,
3056-
bool hoistType: true,
3057-
bool definite: false}) {
3058-
var result = _emitFunctionType(type,
3059-
parameters: parameters,
3060-
lowerTypedef: lowerTypedef,
3061-
nameType: nameType,
3062-
hoistType: hoistType,
3063-
definite: definite);
3064-
return _emitAnnotatedResult(result, metadata);
3073+
return typeParts;
30653074
}
30663075

30673076
/// Emits an expression that lets you access statics on a [type] from code.

0 commit comments

Comments
 (0)