| Index: pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
|
| diff --git a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
|
| index e26022ded79d0efd9b0cc630a3366a5e837b60b9..ff2d7041a4432e93075273afc5e41894ac2bf532 100644
|
| --- a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
|
| +++ b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
|
| @@ -393,7 +393,7 @@ abstract class MemberTypeInformation extends ElementTypeInformation
|
|
|
| MemberTypeInformation._internal(this._member) : super._internal(null);
|
|
|
| - MemberElement get member => _member;
|
| + MemberEntity get member => _member;
|
|
|
| String get debugName => '$member';
|
|
|
| @@ -676,38 +676,48 @@ class GenerativeConstructorTypeInformation extends MemberTypeInformation {
|
| * the [ElementTypeInformation] factory.
|
| */
|
| class ParameterTypeInformation extends ElementTypeInformation {
|
| - final ParameterElement _parameter;
|
| - final MethodElement _method;
|
| - bool _isInstanceMemberParameter;
|
| - bool _isClosureParameter;
|
| + final Local _parameter;
|
| + final DartType _type;
|
| + final FunctionEntity _method;
|
| + final bool _isInstanceMemberParameter;
|
| + final bool _isClosureParameter;
|
| + final bool _isInitializingFormal;
|
| bool _isTearOffClosureParameter = false;
|
|
|
| ParameterTypeInformation.localFunction(
|
| - MemberTypeInformation context, this._parameter, this._method)
|
| + MemberTypeInformation context, this._parameter, this._type, this._method)
|
| : _isInstanceMemberParameter = false,
|
| _isClosureParameter = true,
|
| + _isInitializingFormal = false,
|
| super._internal(context);
|
|
|
| ParameterTypeInformation.static(
|
| - MemberTypeInformation context, this._parameter, this._method)
|
| + MemberTypeInformation context, this._parameter, this._type, this._method,
|
| + {bool isInitializingFormal: false})
|
| : _isInstanceMemberParameter = false,
|
| _isClosureParameter = false,
|
| + _isInitializingFormal = isInitializingFormal,
|
| super._internal(context);
|
|
|
| - ParameterTypeInformation.instanceMember(MemberTypeInformation context,
|
| - this._parameter, this._method, ParameterAssignments assignments)
|
| + ParameterTypeInformation.instanceMember(
|
| + MemberTypeInformation context,
|
| + this._parameter,
|
| + this._type,
|
| + this._method,
|
| + ParameterAssignments assignments)
|
| : _isInstanceMemberParameter = true,
|
| _isClosureParameter = false,
|
| + _isInitializingFormal = false,
|
| super._withAssignments(context, assignments);
|
|
|
| - MethodElement get method => _method;
|
| + FunctionEntity get method => _method;
|
|
|
| Local get parameter => _parameter;
|
|
|
| String get debugName => '$parameter';
|
|
|
| void tagAsTearOffClosureParameter(InferrerEngine inferrer) {
|
| - assert(_parameter.isRegularParameter);
|
| + assert(!_isInitializingFormal);
|
| _isTearOffClosureParameter = true;
|
| // We have to add a flow-edge for the default value (if it exists), as we
|
| // might not see all call-sites and thus miss the use of it.
|
| @@ -729,7 +739,7 @@ class ParameterTypeInformation extends ElementTypeInformation {
|
|
|
| // The below do not apply to parameters of constructors, so skip
|
| // initializing formals.
|
| - if (_parameter.isInitializingFormal) return null;
|
| + if (_isInitializingFormal) return null;
|
|
|
| if ((_isTearOffClosureParameter || _isClosureParameter) &&
|
| disableInferenceForClosures) {
|
| @@ -776,7 +786,7 @@ class ParameterTypeInformation extends ElementTypeInformation {
|
| // ignore type annotations to ensure that the checks are actually inserted
|
| // into the function body and retained until runtime.
|
| assert(!compiler.options.enableTypeAssertions);
|
| - return _narrowType(inferrer.closedWorld, mask, _parameter.type);
|
| + return _narrowType(inferrer.closedWorld, mask, _type);
|
| }
|
|
|
| TypeMask computeType(InferrerEngine inferrer) {
|
|
|