| Index: pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| index 642806795aac7108b8ac6ded81471beac1f0d485..cd79f0ee020facdc6aea9e6d5fa3058adc1cb75c 100644
|
| --- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| +++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| @@ -398,11 +398,6 @@ abstract class KernelToElementMapBase extends KernelToElementMapBaseMixin {
|
| FieldEntity _getField(ir.Field node);
|
|
|
| @override
|
| - Local getLocalFunction(ir.TreeNode node) => _getLocalFunction(node);
|
| -
|
| - Local _getLocalFunction(ir.TreeNode node);
|
| -
|
| - @override
|
| DartType getDartType(ir.DartType type) => _typeConverter.convert(type);
|
|
|
| List<DartType> getDartTypes(List<ir.DartType> types) {
|
| @@ -895,42 +890,6 @@ abstract class ElementCreatorMixin {
|
| requiredParameters, positionalParameters, namedParameters);
|
| }
|
|
|
| - Local _getLocalFunction(ir.TreeNode node) {
|
| - assert(
|
| - node is ir.FunctionDeclaration || node is ir.FunctionExpression,
|
| - failedAt(
|
| - CURRENT_ELEMENT_SPANNABLE, 'Invalid local function node: $node'));
|
| - return _localFunctionMap.putIfAbsent(node, () {
|
| - MemberEntity memberContext;
|
| - Entity executableContext;
|
| - ir.TreeNode parent = node.parent;
|
| - while (parent != null) {
|
| - if (parent is ir.Member) {
|
| - executableContext = memberContext = getMember(parent);
|
| - break;
|
| - }
|
| - if (parent is ir.FunctionDeclaration ||
|
| - parent is ir.FunctionExpression) {
|
| - Local localFunction = _getLocalFunction(parent);
|
| - executableContext = localFunction;
|
| - memberContext = localFunction.memberContext;
|
| - break;
|
| - }
|
| - parent = parent.parent;
|
| - }
|
| - String name;
|
| - FunctionType functionType;
|
| - if (node is ir.FunctionDeclaration) {
|
| - name = node.variable.name;
|
| - functionType = getFunctionType(node.function);
|
| - } else if (node is ir.FunctionExpression) {
|
| - functionType = getFunctionType(node.function);
|
| - }
|
| - return createLocalFunction(
|
| - name, memberContext, executableContext, functionType);
|
| - });
|
| - }
|
| -
|
| IndexedLibrary createLibrary(int libraryIndex, String name, Uri canonicalUri);
|
|
|
| IndexedClass createClass(LibraryEntity library, int classIndex, String name,
|
| @@ -978,9 +937,6 @@ abstract class ElementCreatorMixin {
|
| IndexedField createField(int memberIndex, LibraryEntity library,
|
| ClassEntity enclosingClass, Name name,
|
| {bool isStatic, bool isAssignable, bool isConst});
|
| -
|
| - Local createLocalFunction(String name, MemberEntity memberContext,
|
| - Entity executableContext, FunctionType functionType);
|
| }
|
|
|
| /// Completes the [ElementCreatorMixin] by creating K-model elements.
|
| @@ -1062,12 +1018,6 @@ abstract class KElementCreatorMixin implements ElementCreatorMixin {
|
| return new KField(memberIndex, library, enclosingClass, name,
|
| isStatic: isStatic, isAssignable: isAssignable, isConst: isConst);
|
| }
|
| -
|
| - Local createLocalFunction(String name, MemberEntity memberContext,
|
| - Entity executableContext, FunctionType functionType) {
|
| - return new KLocalFunction(
|
| - name, memberContext, executableContext, functionType);
|
| - }
|
| }
|
|
|
| /// Implementation of [KernelToElementMapForImpact] that only supports world
|
| @@ -1116,6 +1066,43 @@ class KernelToElementMapForImpactImpl extends KernelToElementMapBase
|
| Iterable<ConstantValue> _getClassMetadata(KClass cls) {
|
| return _classData[cls.classIndex].getMetadata(this);
|
| }
|
| +
|
| + @override
|
| + Local getLocalFunction(ir.TreeNode node) {
|
| + assert(
|
| + node is ir.FunctionDeclaration || node is ir.FunctionExpression,
|
| + failedAt(
|
| + CURRENT_ELEMENT_SPANNABLE, 'Invalid local function node: $node'));
|
| + return _localFunctionMap.putIfAbsent(node, () {
|
| + MemberEntity memberContext;
|
| + Entity executableContext;
|
| + ir.TreeNode parent = node.parent;
|
| + while (parent != null) {
|
| + if (parent is ir.Member) {
|
| + executableContext = memberContext = getMember(parent);
|
| + break;
|
| + }
|
| + if (parent is ir.FunctionDeclaration ||
|
| + parent is ir.FunctionExpression) {
|
| + Local localFunction = getLocalFunction(parent);
|
| + executableContext = localFunction;
|
| + memberContext = localFunction.memberContext;
|
| + break;
|
| + }
|
| + parent = parent.parent;
|
| + }
|
| + String name;
|
| + FunctionType functionType;
|
| + if (node is ir.FunctionDeclaration) {
|
| + name = node.variable.name;
|
| + functionType = getFunctionType(node.function);
|
| + } else if (node is ir.FunctionExpression) {
|
| + functionType = getFunctionType(node.function);
|
| + }
|
| + return new KLocalFunction(
|
| + name, memberContext, executableContext, functionType);
|
| + });
|
| + }
|
| }
|
|
|
| class KernelElementEnvironment implements ElementEnvironment {
|
| @@ -1686,32 +1673,8 @@ class KernelClosedWorld extends ClosedWorldBase
|
| }
|
|
|
| @override
|
| - void registerClosureClass(ClassEntity cls, bool fromInstanceMember) {
|
| - // Tell the hierarchy that this is the super class. then we can use
|
| - // .getSupertypes(class)
|
| - IndexedClass superclass = fromInstanceMember
|
| - ? commonElements.boundClosureClass
|
| - : commonElements.closureClass;
|
| - ClassHierarchyNode parentNode = getClassHierarchyNode(superclass);
|
| - ClassHierarchyNode node = new ClassHierarchyNode(
|
| - parentNode, cls, getHierarchyDepth(superclass) + 1);
|
| - addClassHierarchyNode(cls, node);
|
| - for (InterfaceType type in getOrderedTypeSet(superclass).types) {
|
| - // TODO(efortuna): assert that the FunctionClass is in this ordered set.
|
| - // If not, we need to explicitly add node as a subtype of FunctionClass.
|
| - ClassSet subtypeSet = getClassSet(type.element);
|
| - subtypeSet.addSubtype(node);
|
| - }
|
| - addClassSet(cls, new ClassSet(node));
|
| -
|
| - // Ensure that the supertype's hierarchy is completely set up.
|
| - var supertype = new InterfaceType(superclass, const []);
|
| - ClassData superdata = elementMap._classData[superclass.classIndex];
|
| - elementMap._ensureSupertypes(superclass, superdata);
|
| - elementMap._ensureThisAndRawType(superclass, superdata);
|
| -
|
| - elementMap.addClosureClass(cls, supertype);
|
| - node.isDirectlyInstantiated = true;
|
| + void registerClosureClass(ClassEntity cls) {
|
| + throw new UnsupportedError('KernelClosedWorld.registerClosureClass');
|
| }
|
| }
|
|
|
|
|