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

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

Issue 2999453002: Implement forEachParameter in closures, deal with not all closures being localFunctions (Closed)
Patch Set: . Created 3 years, 4 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/closure.dart ('k') | no next file » | 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 8
9 import '../closure.dart' show BoxLocal; 9 import '../closure.dart' show BoxLocal;
10 import '../common.dart'; 10 import '../common.dart';
(...skipping 2008 matching lines...) Expand 10 before | Expand all | Expand 10 after
2019 FunctionEntity callMethod = cls.callMethod = new JClosureCallMethod( 2019 FunctionEntity callMethod = cls.callMethod = new JClosureCallMethod(
2020 _memberData.length, 2020 _memberData.length,
2021 cls, 2021 cls,
2022 _getParameterStructure(node), 2022 _getParameterStructure(node),
2023 _getAsyncMarker(node)); 2023 _getAsyncMarker(node));
2024 _memberList.add(cls.callMethod); 2024 _memberList.add(cls.callMethod);
2025 2025
2026 _memberData.add(new ClosureFunctionData( 2026 _memberData.add(new ClosureFunctionData(
2027 new ClosureMemberDefinition(callMethod, closureData.definition.location, 2027 new ClosureMemberDefinition(callMethod, closureData.definition.location,
2028 MemberKind.closureCall, node.parent), 2028 MemberKind.closureCall, node.parent),
2029 getFunctionType(node))); 2029 getFunctionType(node),
2030 node));
2030 memberMap[cls.callMethod.name] = cls.callMethod; 2031 memberMap[cls.callMethod.name] = cls.callMethod;
2031 return cls; 2032 return cls;
2032 } 2033 }
2033 2034
2034 _constructClosureFields( 2035 _constructClosureFields(
2035 MemberEntity member, 2036 MemberEntity member,
2036 KernelClosureClass cls, 2037 KernelClosureClass cls,
2037 Map<String, MemberEntity> memberMap, 2038 Map<String, MemberEntity> memberMap,
2038 ir.VariableDeclaration variable, 2039 ir.VariableDeclaration variable,
2039 int fieldNumber, 2040 int fieldNumber,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
2087 parts.add('closure'); 2088 parts.add('closure');
2088 } 2089 }
2089 ir.TreeNode node = treeNode.parent; 2090 ir.TreeNode node = treeNode.parent;
2090 while (node != null) { 2091 while (node != null) {
2091 // TODO(johnniwinther): Simplify computed names. 2092 // TODO(johnniwinther): Simplify computed names.
2092 if (node is ir.Constructor || 2093 if (node is ir.Constructor ||
2093 node.parent is ir.Constructor || 2094 node.parent is ir.Constructor ||
2094 (node is ir.Procedure && node.kind == ir.ProcedureKind.Factory)) { 2095 (node is ir.Procedure && node.kind == ir.ProcedureKind.Factory)) {
2095 FunctionEntity entity; 2096 FunctionEntity entity;
2096 if (node.parent is ir.Constructor) { 2097 if (node.parent is ir.Constructor) {
2097 entity = getConstructorBody(node); 2098 entity = getConstructorBody(node.parent);
2098 } else { 2099 } else {
2099 entity = getMember(node); 2100 entity = getMember(node);
2100 } 2101 }
2101 parts.add(utils.reconstructConstructorName(entity)); 2102 parts.add(utils.reconstructConstructorName(entity));
2102 } else { 2103 } else {
2103 if (node is ir.Class) { 2104 if (node is ir.Class) {
2104 parts.add(Elements.operatorNameToIdentifier(node.name)); 2105 parts.add(Elements.operatorNameToIdentifier(node.name));
2105 } else if (node is ir.Procedure) { 2106 } else if (node is ir.Procedure) {
2106 parts.add(Elements.operatorNameToIdentifier(node.name.name)); 2107 parts.add(Elements.operatorNameToIdentifier(node.name.name));
2107 } 2108 }
(...skipping 18 matching lines...) Expand all
2126 /// 2127 ///
2127 /// These names are not used in generated code, just as element name. 2128 /// These names are not used in generated code, just as element name.
2128 String _getClosureVariableName(String name, int id) { 2129 String _getClosureVariableName(String name, int id) {
2129 return "_captured_${name}_$id"; 2130 return "_captured_${name}_$id";
2130 } 2131 }
2131 2132
2132 String getDeferredUri(ir.LibraryDependency node) { 2133 String getDeferredUri(ir.LibraryDependency node) {
2133 throw new UnimplementedError('JsKernelToElementMap.getDeferredUri'); 2134 throw new UnimplementedError('JsKernelToElementMap.getDeferredUri');
2134 } 2135 }
2135 } 2136 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_model/closure.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698