| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |