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

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

Issue 2994363002: Fix the local variable lookup in the locals handler. (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
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 2147 matching lines...) Expand 10 before | Expand all | Expand 10 after
2158 2158
2159 KernelClosureClass constructClosureClass( 2159 KernelClosureClass constructClosureClass(
2160 MemberEntity member, 2160 MemberEntity member,
2161 ir.FunctionNode node, 2161 ir.FunctionNode node,
2162 JLibrary enclosingLibrary, 2162 JLibrary enclosingLibrary,
2163 KernelScopeInfo info, 2163 KernelScopeInfo info,
2164 ir.Location location, 2164 ir.Location location,
2165 KernelToLocalsMap localsMap, 2165 KernelToLocalsMap localsMap,
2166 InterfaceType supertype) { 2166 InterfaceType supertype) {
2167 String name = _computeClosureName(node); 2167 String name = _computeClosureName(node);
2168 KernelClosureClass cls = new KernelClosureClass.fromScopeInfo( 2168 JClass classEntity =
2169 node, name, _classEnvs.length, enclosingLibrary, info, localsMap); 2169 new JClosureClass(localsMap, enclosingLibrary, _classEnvs.length, name);
2170 _classList.add(cls); 2170 _classList.add(classEntity);
2171 Map<String, MemberEntity> memberMap = <String, MemberEntity>{}; 2171 Map<String, MemberEntity> memberMap = <String, MemberEntity>{};
2172 _classEnvs.add(new ClosureClassEnv(memberMap)); 2172 _classEnvs.add(new ClosureClassEnv(memberMap));
2173 2173
2174 // Create a classData and set up the interfaces and subclass 2174 // Create a classData and set up the interfaces and subclass
2175 // relationships that _ensureSupertypes and _ensureThisAndRawType are doing 2175 // relationships that _ensureSupertypes and _ensureThisAndRawType are doing
2176 var closureData = new ClassData(null, 2176 var closureData = new ClassData(
2177 new ClosureClassDefinition(cls, computeSourceSpanFromTreeNode(node))); 2177 null,
2178 new ClosureClassDefinition(
2179 classEntity, computeSourceSpanFromTreeNode(node)));
2178 closureData 2180 closureData
2179 ..isMixinApplication = false 2181 ..isMixinApplication = false
2180 ..thisType = 2182 ..thisType = closureData.rawType =
2181 closureData.rawType = new InterfaceType(cls, const <DartType>[]) 2183 new InterfaceType(classEntity, const <DartType>[])
2182 ..supertype = supertype 2184 ..supertype = supertype
2183 ..interfaces = const <InterfaceType>[]; 2185 ..interfaces = const <InterfaceType>[];
2184 var setBuilder = new _KernelOrderedTypeSetBuilder(this, cls); 2186 var setBuilder = new _KernelOrderedTypeSetBuilder(this, classEntity);
2185 _classData.add(closureData); 2187 _classData.add(closureData);
2186 closureData.orderedTypeSet = setBuilder.createOrderedTypeSet( 2188 closureData.orderedTypeSet = setBuilder.createOrderedTypeSet(
2187 closureData.supertype, const Link<InterfaceType>()); 2189 closureData.supertype, const Link<InterfaceType>());
2188 2190
2191 KernelClosureClass cls = new KernelClosureClass.fromScopeInfo(
2192 classEntity, node, info, localsMap);
2189 int i = 0; 2193 int i = 0;
2190 for (ir.VariableDeclaration variable in info.freeVariables) { 2194 for (ir.VariableDeclaration variable in info.freeVariables) {
2191 // Make a corresponding field entity in this closure class for every 2195 // Make a corresponding field entity in this closure class for every
2192 // single freeVariable in the KernelScopeInfo.freeVariable. 2196 // single freeVariable in the KernelScopeInfo.freeVariable.
2193 _constructClosureFields(member, cls, memberMap, variable, i, 2197 _constructClosureFields(member, cls, memberMap, variable, i,
2194 info.capturedVariablesAccessor, localsMap); 2198 info.capturedVariablesAccessor, localsMap);
2195 i++; 2199 i++;
2196 } 2200 }
2197 2201
2198 FunctionEntity callMethod = cls.callMethod = new JClosureCallMethod( 2202 FunctionEntity callMethod = cls.callMethod = new JClosureCallMethod(
(...skipping 23 matching lines...) Expand all
2222 // NOTE: This construction order may be slightly different than the 2226 // NOTE: This construction order may be slightly different than the
2223 // old Element version. The old version did all the boxed items and then 2227 // old Element version. The old version did all the boxed items and then
2224 // all the others. 2228 // all the others.
2225 Local capturedLocal = localsMap.getLocalVariable(variable); 2229 Local capturedLocal = localsMap.getLocalVariable(variable);
2226 if (cls.isBoxed(capturedLocal)) { 2230 if (cls.isBoxed(capturedLocal)) {
2227 FieldEntity boxedField = new JBoxedField( 2231 FieldEntity boxedField = new JBoxedField(
2228 _getClosureVariableName(capturedLocal.name, fieldNumber), 2232 _getClosureVariableName(capturedLocal.name, fieldNumber),
2229 _memberData.length, 2233 _memberData.length,
2230 new BoxLocal(box.name, 2234 new BoxLocal(box.name,
2231 localsMap.getLocalVariable(box.executableContext), member), 2235 localsMap.getLocalVariable(box.executableContext), member),
2232 cls, 2236 cls.closureClassEntity,
2233 variable.isConst, 2237 variable.isConst,
2234 variable.isFinal || variable.isConst); 2238 variable.isFinal || variable.isConst);
2235 cls.localToFieldMap[capturedLocal] = boxedField; 2239 cls.localToFieldMap[capturedLocal] = boxedField;
2236 _memberList.add(boxedField); 2240 _memberList.add(boxedField);
2237 _memberData.add(new ClosureFieldData(new ClosureMemberDefinition( 2241 _memberData.add(new ClosureFieldData(new ClosureMemberDefinition(
2238 boxedField, 2242 boxedField,
2239 computeSourceSpanFromTreeNode(variable), 2243 computeSourceSpanFromTreeNode(variable),
2240 MemberKind.closureField, 2244 MemberKind.closureField,
2241 variable))); 2245 variable)));
2242 memberMap[boxedField.name] = boxedField; 2246 memberMap[boxedField.name] = boxedField;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
2306 /// 2310 ///
2307 /// These names are not used in generated code, just as element name. 2311 /// These names are not used in generated code, just as element name.
2308 String _getClosureVariableName(String name, int id) { 2312 String _getClosureVariableName(String name, int id) {
2309 return "_captured_${name}_$id"; 2313 return "_captured_${name}_$id";
2310 } 2314 }
2311 2315
2312 String getDeferredUri(ir.LibraryDependency node) { 2316 String getDeferredUri(ir.LibraryDependency node) {
2313 throw new UnimplementedError('JsKernelToElementMap.getDeferredUri'); 2317 throw new UnimplementedError('JsKernelToElementMap.getDeferredUri');
2314 } 2318 }
2315 } 2319 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698