Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Side by Side Diff: pkg/compiler/lib/src/inferrer/type_graph_nodes.dart

Issue 2967003002: Split TypeSystem.typeInformations into member/parameter info (Closed)
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library compiler.src.inferrer.type_graph_nodes; 5 library compiler.src.inferrer.type_graph_nodes;
6 6
7 import 'dart:collection' show IterableBase; 7 import 'dart:collection' show IterableBase;
8 8
9 import '../common.dart'; 9 import '../common.dart';
10 import '../common/names.dart' show Identifiers; 10 import '../common/names.dart' show Identifiers;
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 * code, and native fields do not have Dart assignments, we just 341 * code, and native fields do not have Dart assignments, we just
342 * trust their type annotation. 342 * trust their type annotation.
343 * 343 *
344 */ 344 */
345 abstract class ElementTypeInformation extends TypeInformation { 345 abstract class ElementTypeInformation extends TypeInformation {
346 final Element _element; 346 final Element _element;
347 347
348 /// Marker to disable inference for closures in [handleSpecialCases]. 348 /// Marker to disable inference for closures in [handleSpecialCases].
349 bool disableInferenceForClosures = true; 349 bool disableInferenceForClosures = true;
350 350
351 factory ElementTypeInformation(Element element, TypeSystem types) {
352 if (element.isParameter) {
353 ParameterElement parameter = element;
354 if (parameter.functionDeclaration.isLocal) {
355 return new ParameterTypeInformation._localFunction(element, types);
356 } else if (parameter.functionDeclaration.isInstanceMember) {
357 return new ParameterTypeInformation._instanceMember(element, types);
358 }
359 return new ParameterTypeInformation._static(element, types);
360 }
361 return new MemberTypeInformation(element);
362 }
363
364 ElementTypeInformation._internal(MemberTypeInformation context, this._element) 351 ElementTypeInformation._internal(MemberTypeInformation context, this._element)
365 : super(context); 352 : super(context);
366 ElementTypeInformation._withAssignments( 353 ElementTypeInformation._withAssignments(MemberTypeInformation context,
367 MemberTypeInformation context, this._element, assignments) 354 this._element, ParameterAssignments assignments)
368 : super.withAssignments(context, assignments); 355 : super.withAssignments(context, assignments);
369 356
370 String getInferredSignature(TypeSystem types); 357 String getInferredSignature(TypeSystem types);
371 358
372 String get debugName; 359 String get debugName;
373 } 360 }
374 361
375 /** 362 /**
376 * A node representing members in the broadest sense: 363 * A node representing members in the broadest sense:
377 * 364 *
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 * - Initializing formals 582 * - Initializing formals
596 * 583 *
597 * These should never be created directly but instead are constructed by 584 * These should never be created directly but instead are constructed by
598 * the [ElementTypeInformation] factory. 585 * the [ElementTypeInformation] factory.
599 */ 586 */
600 class ParameterTypeInformation extends ElementTypeInformation { 587 class ParameterTypeInformation extends ElementTypeInformation {
601 ParameterElement get _parameter => super._element; 588 ParameterElement get _parameter => super._element;
602 final FunctionElement _declaration; 589 final FunctionElement _declaration;
603 final MethodElement _method; 590 final MethodElement _method;
604 591
605 ParameterTypeInformation._internal(MemberTypeInformation context, 592 ParameterTypeInformation.localFunction(MemberTypeInformation context,
606 ParameterElement parameter, this._declaration, this._method) 593 ParameterElement parameter, this._declaration, this._method)
607 : super._internal(context, parameter); 594 : super._internal(context, parameter);
608 595
609 factory ParameterTypeInformation._static( 596 ParameterTypeInformation.static(
610 ParameterElement element, TypeSystem types) { 597 MemberTypeInformation context, ParameterElement parameter, this._method)
611 MethodElement method = element.functionDeclaration; 598 : this._declaration = _method,
612 assert(!method.isInstanceMember); 599 super._internal(context, parameter);
613 return new ParameterTypeInformation._internal(
614 types.getInferredTypeOfMember(method), element, method, method);
615 }
616 600
617 factory ParameterTypeInformation._localFunction( 601 ParameterTypeInformation.instanceMember(
618 ParameterElement element, TypeSystem types) { 602 MemberTypeInformation context,
619 LocalFunctionElement localFunction = element.functionDeclaration; 603 ParameterElement parameter,
620 MethodElement callMethod = localFunction.callMethod; 604 this._method,
621 return new ParameterTypeInformation._internal( 605 ParameterAssignments assignments)
622 types.getInferredTypeOfMember(callMethod), 606 : this._declaration = _method,
623 element, 607 super._withAssignments(context, parameter, assignments);
624 localFunction,
625 callMethod);
626 }
627
628 ParameterTypeInformation._instanceMember(
629 ParameterElement element, TypeSystem types)
630 : _declaration = element.functionDeclaration,
631 _method = element.functionDeclaration,
632 super._withAssignments(
633 types.getInferredTypeOfMember(
634 element.functionDeclaration as MethodElement),
635 element,
636 new ParameterAssignments()) {
637 assert(element.functionDeclaration.isInstanceMember);
638 }
639 608
640 MethodElement get method => _method; 609 MethodElement get method => _method;
641 610
642 Local get parameter => _parameter; 611 Local get parameter => _parameter;
643 612
644 String get debugName => '$parameter'; 613 String get debugName => '$parameter';
645 614
646 bool isTearOffClosureParameter = false; 615 bool isTearOffClosureParameter = false;
647 616
648 void tagAsTearOffClosureParameter(InferrerEngine inferrer) { 617 void tagAsTearOffClosureParameter(InferrerEngine inferrer) {
(...skipping 1179 matching lines...) Expand 10 before | Expand all | Expand 10 after
1828 // TODO(ngeoffray): Narrow to bound. 1797 // TODO(ngeoffray): Narrow to bound.
1829 return type; 1798 return type;
1830 } else { 1799 } else {
1831 ResolutionInterfaceType interfaceType = annotation; 1800 ResolutionInterfaceType interfaceType = annotation;
1832 otherType = new TypeMask.nonNullSubtype(interfaceType.element, closedWorld); 1801 otherType = new TypeMask.nonNullSubtype(interfaceType.element, closedWorld);
1833 } 1802 }
1834 if (isNullable) otherType = otherType.nullable(); 1803 if (isNullable) otherType = otherType.nullable();
1835 if (type == null) return otherType; 1804 if (type == null) return otherType;
1836 return type.intersection(otherType, closedWorld); 1805 return type.intersection(otherType, closedWorld);
1837 } 1806 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart ('k') | pkg/compiler/lib/src/inferrer/type_system.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698