| 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 import 'package:kernel/ast.dart' as ir; | 5 import 'package:kernel/ast.dart' as ir; |
| 6 | 6 |
| 7 import '../closure.dart'; | 7 import '../closure.dart'; |
| 8 import '../common.dart'; | 8 import '../common.dart'; |
| 9 import '../common_elements.dart'; | 9 import '../common_elements.dart'; |
| 10 import '../compiler.dart'; | 10 import '../compiler.dart'; |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 new KernelTypeGraphBuilder(member, compiler, _elementMap, this, body); | 118 new KernelTypeGraphBuilder(member, compiler, _elementMap, this, body); |
| 119 return visitor.run(); | 119 return visitor.run(); |
| 120 } | 120 } |
| 121 | 121 |
| 122 @override | 122 @override |
| 123 FunctionEntity lookupCallMethod(ClassEntity cls) { | 123 FunctionEntity lookupCallMethod(ClassEntity cls) { |
| 124 throw new UnimplementedError('KernelInferrerEngine.lookupCallMethod'); | 124 throw new UnimplementedError('KernelInferrerEngine.lookupCallMethod'); |
| 125 } | 125 } |
| 126 | 126 |
| 127 @override | 127 @override |
| 128 void forEachParameter(FunctionEntity method, void f(Local parameter)) { | |
| 129 throw new UnimplementedError('KernelInferrerEngine.forEachParameter'); | |
| 130 } | |
| 131 | |
| 132 @override | |
| 133 ir.Node computeMemberBody(MemberEntity member) { | 128 ir.Node computeMemberBody(MemberEntity member) { |
| 134 MemberDefinition definition = _elementMap.getMemberDefinition(member); | 129 MemberDefinition definition = _elementMap.getMemberDefinition(member); |
| 135 switch (definition.kind) { | 130 switch (definition.kind) { |
| 136 case MemberKind.regular: | 131 case MemberKind.regular: |
| 137 ir.Member node = definition.node; | 132 ir.Member node = definition.node; |
| 138 if (node is ir.Field) { | 133 if (node is ir.Field) { |
| 139 return node.initializer; | 134 return node.initializer; |
| 140 } else if (node is ir.Procedure) { | 135 } else if (node is ir.Procedure) { |
| 141 return node.function; | 136 return node.function; |
| 142 } | 137 } |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 bool checkListNode(ir.Node node) => true; | 193 bool checkListNode(ir.Node node) => true; |
| 199 | 194 |
| 200 @override | 195 @override |
| 201 bool checkLoopPhiNode(ir.Node node) => true; | 196 bool checkLoopPhiNode(ir.Node node) => true; |
| 202 | 197 |
| 203 @override | 198 @override |
| 204 bool checkPhiNode(ir.Node node) => true; | 199 bool checkPhiNode(ir.Node node) => true; |
| 205 | 200 |
| 206 @override | 201 @override |
| 207 void forEachParameter(FunctionEntity function, void f(Local parameter)) { | 202 void forEachParameter(FunctionEntity function, void f(Local parameter)) { |
| 208 throw new UnimplementedError('KernelTypeSystemStrategy.forEachParameter'); | 203 KernelToLocalsMap localsMap = _globalLocalsMap.getLocalsMap(function); |
| 204 |
| 205 void processFunctionNode(ir.FunctionNode node) { |
| 206 for (ir.VariableDeclaration variable in node.positionalParameters) { |
| 207 f(localsMap.getLocalVariable(variable)); |
| 208 } |
| 209 for (ir.VariableDeclaration variable in node.namedParameters) { |
| 210 f(localsMap.getLocalVariable(variable)); |
| 211 } |
| 212 } |
| 213 |
| 214 MemberDefinition definition = _elementMap.getMemberDefinition(function); |
| 215 switch (definition.kind) { |
| 216 case MemberKind.regular: |
| 217 ir.Node node = definition.node; |
| 218 if (node is ir.Procedure) { |
| 219 processFunctionNode(node.function); |
| 220 return; |
| 221 } |
| 222 break; |
| 223 case MemberKind.constructor: |
| 224 case MemberKind.constructorBody: |
| 225 ir.Node node = definition.node; |
| 226 if (node is ir.Procedure) { |
| 227 processFunctionNode(node.function); |
| 228 return; |
| 229 } else if (node is ir.Constructor) { |
| 230 processFunctionNode(node.function); |
| 231 return; |
| 232 } |
| 233 break; |
| 234 case MemberKind.closureCall: |
| 235 ir.Node node = definition.node; |
| 236 if (node is ir.FunctionDeclaration) { |
| 237 processFunctionNode(node.function); |
| 238 return; |
| 239 } else if (node is ir.FunctionExpression) { |
| 240 processFunctionNode(node.function); |
| 241 return; |
| 242 } |
| 243 break; |
| 244 default: |
| 245 } |
| 246 failedAt(function, "Unexpected function definition $definition."); |
| 209 } | 247 } |
| 210 | 248 |
| 211 @override | 249 @override |
| 212 ParameterTypeInformation createParameterTypeInformation( | 250 ParameterTypeInformation createParameterTypeInformation( |
| 213 Local parameter, TypeSystem<ir.Node> types) { | 251 Local parameter, TypeSystem<ir.Node> types) { |
| 214 MemberEntity context = parameter.memberContext; | 252 MemberEntity context = parameter.memberContext; |
| 215 KernelToLocalsMap localsMap = _globalLocalsMap.getLocalsMap(context); | 253 KernelToLocalsMap localsMap = _globalLocalsMap.getLocalsMap(context); |
| 216 ir.FunctionNode functionNode = | 254 ir.FunctionNode functionNode = |
| 217 localsMap.getFunctionNodeForParameter(parameter); | 255 localsMap.getFunctionNodeForParameter(parameter); |
| 218 DartType type = | 256 DartType type = |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 ConstructorEntity constructor = member; | 300 ConstructorEntity constructor = member; |
| 263 if (constructor.isFactoryConstructor) { | 301 if (constructor.isFactoryConstructor) { |
| 264 DartType type = _elementEnvironment.getFunctionType(constructor); | 302 DartType type = _elementEnvironment.getFunctionType(constructor); |
| 265 return new FactoryConstructorTypeInformation(constructor, type); | 303 return new FactoryConstructorTypeInformation(constructor, type); |
| 266 } else { | 304 } else { |
| 267 return new GenerativeConstructorTypeInformation(constructor); | 305 return new GenerativeConstructorTypeInformation(constructor); |
| 268 } | 306 } |
| 269 } | 307 } |
| 270 } | 308 } |
| 271 } | 309 } |
| OLD | NEW |