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

Side by Side Diff: pkg/compiler/lib/src/kernel/element_map_impl.dart

Issue 2954493002: Less inequivalence on Hello World! (Closed)
Patch Set: Updated cf. comments 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
« no previous file with comments | « pkg/compiler/lib/src/js_model/elements.dart ('k') | pkg/compiler/lib/src/kernel/types.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 dart2js.kernel.element_map; 5 library dart2js.kernel.element_map;
6 6
7 import 'package:kernel/ast.dart' as ir; 7 import 'package:kernel/ast.dart' as ir;
8 import 'package:kernel/clone.dart'; 8 import 'package:kernel/clone.dart';
9 import 'package:kernel/type_algebra.dart'; 9 import 'package:kernel/type_algebra.dart';
10 10
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 535
536 void _ensureSupertypes(KClass cls, _KClassEnv env) { 536 void _ensureSupertypes(KClass cls, _KClassEnv env) {
537 if (env.orderedTypeSet == null) { 537 if (env.orderedTypeSet == null) {
538 _ensureThisAndRawType(cls, env); 538 _ensureThisAndRawType(cls, env);
539 539
540 ir.Class node = env.cls; 540 ir.Class node = env.cls;
541 541
542 if (node.supertype == null) { 542 if (node.supertype == null) {
543 env.orderedTypeSet = new OrderedTypeSet.singleton(env.thisType); 543 env.orderedTypeSet = new OrderedTypeSet.singleton(env.thisType);
544 env.isMixinApplication = false; 544 env.isMixinApplication = false;
545 env.interfaces = const <InterfaceType>[];
545 } else { 546 } else {
546 InterfaceType processSupertype(ir.Supertype node) { 547 InterfaceType processSupertype(ir.Supertype node) {
547 InterfaceType type = _typeConverter.visitSupertype(node); 548 InterfaceType type = _typeConverter.visitSupertype(node);
548 KClass superclass = type.element; 549 KClass superclass = type.element;
549 _KClassEnv env = _classEnvs[superclass.classIndex]; 550 _KClassEnv env = _classEnvs[superclass.classIndex];
550 _ensureSupertypes(superclass, env); 551 _ensureSupertypes(superclass, env);
551 return type; 552 return type;
552 } 553 }
553 554
554 env.supertype = processSupertype(node.supertype); 555 env.supertype = processSupertype(node.supertype);
555 LinkBuilder<InterfaceType> linkBuilder = 556 LinkBuilder<InterfaceType> linkBuilder =
556 new LinkBuilder<InterfaceType>(); 557 new LinkBuilder<InterfaceType>();
557 if (node.mixedInType != null) { 558 if (node.mixedInType != null) {
558 env.isMixinApplication = true; 559 env.isMixinApplication = true;
559 linkBuilder 560 linkBuilder
560 .addLast(env.mixedInType = processSupertype(node.mixedInType)); 561 .addLast(env.mixedInType = processSupertype(node.mixedInType));
561 } else { 562 } else {
562 env.isMixinApplication = false; 563 env.isMixinApplication = false;
563 } 564 }
564 node.implementedTypes.forEach((ir.Supertype supertype) { 565 node.implementedTypes.forEach((ir.Supertype supertype) {
565 linkBuilder.addLast(processSupertype(supertype)); 566 linkBuilder.addLast(processSupertype(supertype));
566 }); 567 });
567 Link<InterfaceType> interfaces = linkBuilder.toLink(); 568 Link<InterfaceType> interfaces = linkBuilder.toLink();
568 OrderedTypeSetBuilder setBuilder = 569 OrderedTypeSetBuilder setBuilder =
569 new _KernelOrderedTypeSetBuilder(this, cls); 570 new _KernelOrderedTypeSetBuilder(this, cls);
570 env.orderedTypeSet = 571 env.orderedTypeSet =
571 setBuilder.createOrderedTypeSet(env.supertype, interfaces); 572 setBuilder.createOrderedTypeSet(env.supertype, interfaces);
573 env.interfaces = new List<InterfaceType>.from(interfaces.toList());
572 } 574 }
573 } 575 }
574 } 576 }
575 577
576 OrderedTypeSet _getOrderedTypeSet(KClass cls) { 578 OrderedTypeSet _getOrderedTypeSet(KClass cls) {
577 _KClassEnv env = _classEnvs[cls.classIndex]; 579 _KClassEnv env = _classEnvs[cls.classIndex];
578 _ensureSupertypes(cls, env); 580 _ensureSupertypes(cls, env);
579 return env.orderedTypeSet; 581 return env.orderedTypeSet;
580 } 582 }
581 583
(...skipping 25 matching lines...) Expand all
607 _ensureSupertypes(cls, env); 609 _ensureSupertypes(cls, env);
608 return env.isMixinApplication; 610 return env.isMixinApplication;
609 } 611 }
610 612
611 bool _isUnnamedMixinApplication(KClass cls) { 613 bool _isUnnamedMixinApplication(KClass cls) {
612 _KClassEnv env = _classEnvs[cls.classIndex]; 614 _KClassEnv env = _classEnvs[cls.classIndex];
613 _ensureSupertypes(cls, env); 615 _ensureSupertypes(cls, env);
614 return env.isUnnamedMixinApplication; 616 return env.isUnnamedMixinApplication;
615 } 617 }
616 618
619 Iterable<InterfaceType> _getInterfaces(KClass cls) {
620 _KClassEnv env = _classEnvs[cls.classIndex];
621 _ensureSupertypes(cls, env);
622 return env.interfaces;
623 }
624
617 void _forEachSupertype(KClass cls, void f(InterfaceType supertype)) { 625 void _forEachSupertype(KClass cls, void f(InterfaceType supertype)) {
618 _KClassEnv env = _classEnvs[cls.classIndex]; 626 _KClassEnv env = _classEnvs[cls.classIndex];
619 _ensureSupertypes(cls, env); 627 _ensureSupertypes(cls, env);
620 env.orderedTypeSet.supertypes.forEach(f); 628 env.orderedTypeSet.supertypes.forEach(f);
621 } 629 }
622 630
623 void _forEachMixin(KClass cls, void f(ClassEntity mixin)) { 631 void _forEachMixin(KClass cls, void f(ClassEntity mixin)) {
624 while (cls != null) { 632 while (cls != null) {
625 _KClassEnv env = _classEnvs[cls.classIndex]; 633 _KClassEnv env = _classEnvs[cls.classIndex];
626 _ensureSupertypes(cls, env); 634 _ensureSupertypes(cls, env);
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
917 /// Environment for fast lookup of class members. 925 /// Environment for fast lookup of class members.
918 class _KClassEnv { 926 class _KClassEnv {
919 final ir.Class cls; 927 final ir.Class cls;
920 bool isMixinApplication; 928 bool isMixinApplication;
921 final bool isUnnamedMixinApplication; 929 final bool isUnnamedMixinApplication;
922 930
923 InterfaceType thisType; 931 InterfaceType thisType;
924 InterfaceType rawType; 932 InterfaceType rawType;
925 InterfaceType supertype; 933 InterfaceType supertype;
926 InterfaceType mixedInType; 934 InterfaceType mixedInType;
935 List<InterfaceType> interfaces;
927 OrderedTypeSet orderedTypeSet; 936 OrderedTypeSet orderedTypeSet;
928 937
929 Map<String, ir.Member> _constructorMap; 938 Map<String, ir.Member> _constructorMap;
930 Map<String, ir.Member> _memberMap; 939 Map<String, ir.Member> _memberMap;
931 Map<String, ir.Member> _setterMap; 940 Map<String, ir.Member> _setterMap;
932 941
933 Iterable<ConstantValue> _metadata; 942 Iterable<ConstantValue> _metadata;
934 943
935 _KClassEnv(this.cls) 944 _KClassEnv(this.cls)
936 // TODO(johnniwinther): Change this to use a property on [cls] when such 945 // TODO(johnniwinther): Change this to use a property on [cls] when such
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after
1541 1550
1542 KernelResolutionWorldBuilder( 1551 KernelResolutionWorldBuilder(
1543 this.elementMap, 1552 this.elementMap,
1544 NativeBasicData nativeBasicData, 1553 NativeBasicData nativeBasicData,
1545 NativeDataBuilder nativeDataBuilder, 1554 NativeDataBuilder nativeDataBuilder,
1546 InterceptorDataBuilder interceptorDataBuilder, 1555 InterceptorDataBuilder interceptorDataBuilder,
1547 BackendUsageBuilder backendUsageBuilder, 1556 BackendUsageBuilder backendUsageBuilder,
1548 SelectorConstraintsStrategy selectorConstraintsStrategy) 1557 SelectorConstraintsStrategy selectorConstraintsStrategy)
1549 : super( 1558 : super(
1550 elementMap.elementEnvironment, 1559 elementMap.elementEnvironment,
1560 elementMap.types,
1551 elementMap.commonElements, 1561 elementMap.commonElements,
1552 elementMap._constantEnvironment.constantSystem, 1562 elementMap._constantEnvironment.constantSystem,
1553 nativeBasicData, 1563 nativeBasicData,
1554 nativeDataBuilder, 1564 nativeDataBuilder,
1555 interceptorDataBuilder, 1565 interceptorDataBuilder,
1556 backendUsageBuilder, 1566 backendUsageBuilder,
1557 selectorConstraintsStrategy); 1567 selectorConstraintsStrategy);
1558 1568
1559 @override 1569 @override
1560 Iterable<InterfaceType> getSupertypes(ClassEntity cls) { 1570 Iterable<InterfaceType> getSupertypes(ClassEntity cls) {
(...skipping 26 matching lines...) Expand all
1587 1597
1588 @override 1598 @override
1589 bool checkClass(ClassEntity cls) => true; 1599 bool checkClass(ClassEntity cls) => true;
1590 } 1600 }
1591 1601
1592 class KernelClosedWorld extends ClosedWorldBase { 1602 class KernelClosedWorld extends ClosedWorldBase {
1593 final KernelToElementMapImpl _elementMap; 1603 final KernelToElementMapImpl _elementMap;
1594 1604
1595 KernelClosedWorld(this._elementMap, 1605 KernelClosedWorld(this._elementMap,
1596 {ElementEnvironment elementEnvironment, 1606 {ElementEnvironment elementEnvironment,
1607 DartTypes dartTypes,
1597 CommonElements commonElements, 1608 CommonElements commonElements,
1598 ConstantSystem constantSystem, 1609 ConstantSystem constantSystem,
1599 NativeData nativeData, 1610 NativeData nativeData,
1600 InterceptorData interceptorData, 1611 InterceptorData interceptorData,
1601 BackendUsage backendUsage, 1612 BackendUsage backendUsage,
1602 ResolutionWorldBuilder resolutionWorldBuilder, 1613 ResolutionWorldBuilder resolutionWorldBuilder,
1603 Set<ClassEntity> implementedClasses, 1614 Set<ClassEntity> implementedClasses,
1604 FunctionSet functionSet, 1615 FunctionSet functionSet,
1605 Set<TypedefElement> allTypedefs, 1616 Set<TypedefElement> allTypedefs,
1606 Map<ClassEntity, Set<ClassEntity>> mixinUses, 1617 Map<ClassEntity, Set<ClassEntity>> mixinUses,
1607 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses, 1618 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses,
1608 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes, 1619 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes,
1609 Map<ClassEntity, ClassSet> classSets}) 1620 Map<ClassEntity, ClassSet> classSets})
1610 : super( 1621 : super(
1611 elementEnvironment: elementEnvironment, 1622 elementEnvironment: elementEnvironment,
1623 dartTypes: dartTypes,
1612 commonElements: commonElements, 1624 commonElements: commonElements,
1613 constantSystem: constantSystem, 1625 constantSystem: constantSystem,
1614 nativeData: nativeData, 1626 nativeData: nativeData,
1615 interceptorData: interceptorData, 1627 interceptorData: interceptorData,
1616 backendUsage: backendUsage, 1628 backendUsage: backendUsage,
1617 resolutionWorldBuilder: resolutionWorldBuilder, 1629 resolutionWorldBuilder: resolutionWorldBuilder,
1618 implementedClasses: implementedClasses, 1630 implementedClasses: implementedClasses,
1619 functionSet: functionSet, 1631 functionSet: functionSet,
1620 allTypedefs: allTypedefs, 1632 allTypedefs: allTypedefs,
1621 mixinUses: mixinUses, 1633 mixinUses: mixinUses,
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
1907 throw new UnsupportedError( 1919 throw new UnsupportedError(
1908 "JsKernelToElementMap.getConstantFieldInitializer"); 1920 "JsKernelToElementMap.getConstantFieldInitializer");
1909 } 1921 }
1910 1922
1911 @override 1923 @override
1912 bool hasConstantFieldInitializer(FieldEntity field) { 1924 bool hasConstantFieldInitializer(FieldEntity field) {
1913 throw new UnsupportedError( 1925 throw new UnsupportedError(
1914 "JsKernelToElementMap.hasConstantFieldInitializer"); 1926 "JsKernelToElementMap.hasConstantFieldInitializer");
1915 } 1927 }
1916 } 1928 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_model/elements.dart ('k') | pkg/compiler/lib/src/kernel/types.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698