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

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

Issue 2969993002: Handle instance/super methods in js_model/model_test (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) 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 8
9 import '../common.dart'; 9 import '../common.dart';
10 import '../common/names.dart' show Identifiers; 10 import '../common/names.dart' show Identifiers;
(...skipping 14 matching lines...) Expand all
25 import '../js_backend/backend_usage.dart'; 25 import '../js_backend/backend_usage.dart';
26 import '../js_backend/constant_system_javascript.dart'; 26 import '../js_backend/constant_system_javascript.dart';
27 import '../js_backend/interceptor_data.dart'; 27 import '../js_backend/interceptor_data.dart';
28 import '../js_backend/native_data.dart'; 28 import '../js_backend/native_data.dart';
29 import '../js_backend/no_such_method_registry.dart'; 29 import '../js_backend/no_such_method_registry.dart';
30 import '../js_model/elements.dart'; 30 import '../js_model/elements.dart';
31 import '../native/native.dart' as native; 31 import '../native/native.dart' as native;
32 import '../native/resolver.dart'; 32 import '../native/resolver.dart';
33 import '../ordered_typeset.dart'; 33 import '../ordered_typeset.dart';
34 import '../universe/class_set.dart'; 34 import '../universe/class_set.dart';
35 import '../universe/function_set.dart';
36 import '../universe/selector.dart'; 35 import '../universe/selector.dart';
37 import '../universe/world_builder.dart'; 36 import '../universe/world_builder.dart';
38 import '../world.dart'; 37 import '../world.dart';
39 import '../util/util.dart' show Link, LinkBuilder; 38 import '../util/util.dart' show Link, LinkBuilder;
40 import 'element_map.dart'; 39 import 'element_map.dart';
41 import 'element_map_mixins.dart'; 40 import 'element_map_mixins.dart';
42 import 'elements.dart'; 41 import 'elements.dart';
43 import 'env.dart'; 42 import 'env.dart';
44 import 'kelements.dart'; 43 import 'kelements.dart';
45 44
(...skipping 1415 matching lines...) Expand 10 before | Expand all | Expand 10 after
1461 return elementMap._getAppliedMixin(cls); 1460 return elementMap._getAppliedMixin(cls);
1462 } 1461 }
1463 1462
1464 @override 1463 @override
1465 bool validateClass(ClassEntity cls) => true; 1464 bool validateClass(ClassEntity cls) => true;
1466 1465
1467 @override 1466 @override
1468 bool checkClass(ClassEntity cls) => true; 1467 bool checkClass(ClassEntity cls) => true;
1469 } 1468 }
1470 1469
1471 class KernelClosedWorld extends ClosedWorldBase { 1470 abstract class KernelClosedWorldMixin implements ClosedWorld {
1471 @override
1472 bool hasElementIn(ClassEntity cls, Selector selector, Entity element) {
1473 while (cls != null) {
1474 MemberEntity member = elementEnvironment
1475 .lookupClassMember(cls, selector.name, setter: selector.isSetter);
1476 if (member != null &&
1477 (!selector.memberName.isPrivate ||
1478 member.library == selector.library)) {
1479 return member == element;
1480 }
1481 cls = elementEnvironment.getSuperClass(cls);
1482 }
1483 return false;
1484 }
1485 }
1486
1487 class KernelClosedWorld extends ClosedWorldBase with KernelClosedWorldMixin {
1472 final KernelToElementMapForImpactImpl _elementMap; 1488 final KernelToElementMapForImpactImpl _elementMap;
1473 1489
1474 KernelClosedWorld(this._elementMap, 1490 KernelClosedWorld(this._elementMap,
1475 {ElementEnvironment elementEnvironment, 1491 {ElementEnvironment elementEnvironment,
1476 DartTypes dartTypes, 1492 DartTypes dartTypes,
1477 CommonElements commonElements, 1493 CommonElements commonElements,
1478 ConstantSystem constantSystem, 1494 ConstantSystem constantSystem,
1479 NativeData nativeData, 1495 NativeData nativeData,
1480 InterceptorData interceptorData, 1496 InterceptorData interceptorData,
1481 BackendUsage backendUsage, 1497 BackendUsage backendUsage,
1482 ResolutionWorldBuilder resolutionWorldBuilder, 1498 ResolutionWorldBuilder resolutionWorldBuilder,
1483 Set<ClassEntity> implementedClasses, 1499 Set<ClassEntity> implementedClasses,
1484 FunctionSet functionSet, 1500 Iterable<MemberEntity> liveInstanceMembers,
1485 Set<TypedefElement> allTypedefs, 1501 Set<TypedefElement> allTypedefs,
1486 Map<ClassEntity, Set<ClassEntity>> mixinUses, 1502 Map<ClassEntity, Set<ClassEntity>> mixinUses,
1487 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses, 1503 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses,
1488 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes, 1504 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes,
1489 Map<ClassEntity, ClassSet> classSets}) 1505 Map<ClassEntity, ClassSet> classSets})
1490 : super( 1506 : super(
1491 elementEnvironment: elementEnvironment, 1507 elementEnvironment,
1492 dartTypes: dartTypes, 1508 dartTypes,
1493 commonElements: commonElements, 1509 commonElements,
1494 constantSystem: constantSystem, 1510 constantSystem,
1495 nativeData: nativeData, 1511 nativeData,
1496 interceptorData: interceptorData, 1512 interceptorData,
1497 backendUsage: backendUsage, 1513 backendUsage,
1498 resolutionWorldBuilder: resolutionWorldBuilder, 1514 resolutionWorldBuilder,
1499 implementedClasses: implementedClasses, 1515 implementedClasses,
1500 functionSet: functionSet, 1516 liveInstanceMembers,
1501 allTypedefs: allTypedefs, 1517 allTypedefs,
1502 mixinUses: mixinUses, 1518 mixinUses,
1503 typesImplementedBySubclasses: typesImplementedBySubclasses, 1519 typesImplementedBySubclasses,
1504 classHierarchyNodes: classHierarchyNodes, 1520 classHierarchyNodes,
1505 classSets: classSets); 1521 classSets);
1506 1522
1507 @override 1523 @override
1508 bool hasConcreteMatch(ClassEntity cls, Selector selector, 1524 bool hasConcreteMatch(ClassEntity cls, Selector selector,
1509 {ClassEntity stopAtSuperclass}) { 1525 {ClassEntity stopAtSuperclass}) {
1510 throw new UnimplementedError('KernelClosedWorld.hasConcreteMatch'); 1526 throw new UnimplementedError('KernelClosedWorld.hasConcreteMatch');
1511 } 1527 }
1512 1528
1513 @override 1529 @override
1514 bool isNamedMixinApplication(ClassEntity cls) { 1530 bool isNamedMixinApplication(ClassEntity cls) {
1515 throw new UnimplementedError('KernelClosedWorld.isNamedMixinApplication'); 1531 throw new UnimplementedError('KernelClosedWorld.isNamedMixinApplication');
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1547 @override 1563 @override
1548 bool checkClass(ClassEntity cls) => true; 1564 bool checkClass(ClassEntity cls) => true;
1549 1565
1550 @override 1566 @override
1551 bool checkEntity(Entity element) => true; 1567 bool checkEntity(Entity element) => true;
1552 1568
1553 @override 1569 @override
1554 void registerClosureClass(ClassElement cls) { 1570 void registerClosureClass(ClassElement cls) {
1555 throw new UnimplementedError('KernelClosedWorld.registerClosureClass'); 1571 throw new UnimplementedError('KernelClosedWorld.registerClosureClass');
1556 } 1572 }
1557
1558 @override
1559 bool hasElementIn(ClassEntity cls, Selector selector, Entity element) {
1560 while (cls != null) {
1561 MemberEntity member = elementEnvironment
1562 .lookupClassMember(cls, selector.name, setter: selector.isSetter);
1563 if (member != null &&
1564 (!selector.memberName.isPrivate ||
1565 member.library == selector.library)) {
1566 return member == element;
1567 }
1568 cls = elementEnvironment.getSuperClass(cls);
1569 }
1570 return false;
1571 }
1572 } 1573 }
1573 1574
1574 // Interface for testing equivalence of Kernel-based entities. 1575 // Interface for testing equivalence of Kernel-based entities.
1575 class WorldDeconstructionForTesting { 1576 class WorldDeconstructionForTesting {
1576 final KernelToElementMapBase elementMap; 1577 final KernelToElementMapBase elementMap;
1577 1578
1578 WorldDeconstructionForTesting(this.elementMap); 1579 WorldDeconstructionForTesting(this.elementMap);
1579 1580
1580 KClass getSuperclassForClass(KClass cls) { 1581 KClass getSuperclassForClass(KClass cls) {
1581 ClassEnv env = elementMap._classEnvs[cls.classIndex]; 1582 ClassEnv env = elementMap._classEnvs[cls.classIndex];
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
1835 throw new UnsupportedError( 1836 throw new UnsupportedError(
1836 "JsKernelToElementMap.getConstantFieldInitializer"); 1837 "JsKernelToElementMap.getConstantFieldInitializer");
1837 } 1838 }
1838 1839
1839 @override 1840 @override
1840 bool hasConstantFieldInitializer(FieldEntity field) { 1841 bool hasConstantFieldInitializer(FieldEntity field) {
1841 throw new UnsupportedError( 1842 throw new UnsupportedError(
1842 "JsKernelToElementMap.hasConstantFieldInitializer"); 1843 "JsKernelToElementMap.hasConstantFieldInitializer");
1843 } 1844 }
1844 } 1845 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698