| 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'; |
| 11 import '../constants/values.dart'; | 11 import '../constants/values.dart'; |
| 12 import '../elements/entities.dart'; | 12 import '../elements/entities.dart'; |
| 13 import '../elements/types.dart'; | 13 import '../elements/types.dart'; |
| 14 import '../js_model/locals.dart'; |
| 14 import '../kernel/element_map.dart'; | 15 import '../kernel/element_map.dart'; |
| 15 import '../js_model/locals.dart'; | 16 import '../options.dart'; |
| 16 import '../types/types.dart'; | 17 import '../types/types.dart'; |
| 17 import '../world.dart'; | 18 import '../world.dart'; |
| 18 import 'builder_kernel.dart'; | 19 import 'builder_kernel.dart'; |
| 19 import 'inferrer_engine.dart'; | 20 import 'inferrer_engine.dart'; |
| 20 import 'type_graph_inferrer.dart'; | 21 import 'type_graph_inferrer.dart'; |
| 21 import 'type_graph_nodes.dart'; | 22 import 'type_graph_nodes.dart'; |
| 22 import 'type_system.dart'; | 23 import 'type_system.dart'; |
| 23 | 24 |
| 24 class KernelTypeGraphInferrer extends TypeGraphInferrer<ir.Node> { | 25 class KernelTypeGraphInferrer extends TypeGraphInferrer<ir.Node> { |
| 25 final Compiler _compiler; | 26 final Compiler _compiler; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 } | 71 } |
| 71 | 72 |
| 72 GlobalTypeInferenceParameterResult<ir.Node> createParameterResult( | 73 GlobalTypeInferenceParameterResult<ir.Node> createParameterResult( |
| 73 TypeGraphInferrer<ir.Node> inferrer, Local parameter) { | 74 TypeGraphInferrer<ir.Node> inferrer, Local parameter) { |
| 74 return new GlobalTypeInferenceParameterResultImpl<ir.Node>( | 75 return new GlobalTypeInferenceParameterResultImpl<ir.Node>( |
| 75 parameter, inferrer, dynamicType); | 76 parameter, inferrer, dynamicType); |
| 76 } | 77 } |
| 77 } | 78 } |
| 78 | 79 |
| 79 class KernelInferrerEngine extends InferrerEngineImpl<ir.Node> { | 80 class KernelInferrerEngine extends InferrerEngineImpl<ir.Node> { |
| 81 final CompilerOptions _options; |
| 80 final KernelToElementMapForBuilding _elementMap; | 82 final KernelToElementMapForBuilding _elementMap; |
| 81 final GlobalLocalsMap _globalLocalsMap; | 83 final GlobalLocalsMap _globalLocalsMap; |
| 82 final ClosureDataLookup<ir.Node> _closureDataLookup; | 84 final ClosureDataLookup<ir.Node> _closureDataLookup; |
| 83 | 85 |
| 84 KernelInferrerEngine( | 86 KernelInferrerEngine( |
| 85 Compiler compiler, | 87 Compiler compiler, |
| 86 this._elementMap, | 88 this._elementMap, |
| 87 this._globalLocalsMap, | 89 this._globalLocalsMap, |
| 88 this._closureDataLookup, | 90 this._closureDataLookup, |
| 89 ClosedWorld closedWorld, | 91 ClosedWorld closedWorld, |
| 90 ClosedWorldRefiner closedWorldRefiner, | 92 ClosedWorldRefiner closedWorldRefiner, |
| 91 FunctionEntity mainElement) | 93 FunctionEntity mainElement) |
| 92 : super( | 94 : this._options = compiler.options, |
| 95 super( |
| 93 compiler, | 96 compiler, |
| 94 closedWorld, | 97 closedWorld, |
| 95 closedWorldRefiner, | 98 closedWorldRefiner, |
| 96 mainElement, | 99 mainElement, |
| 97 new KernelTypeSystemStrategy( | 100 new KernelTypeSystemStrategy( |
| 98 _elementMap, _globalLocalsMap, _closureDataLookup)); | 101 _elementMap, _globalLocalsMap, _closureDataLookup)); |
| 99 | 102 |
| 100 ElementEnvironment get _elementEnvironment => _elementMap.elementEnvironment; | 103 ElementEnvironment get _elementEnvironment => _elementMap.elementEnvironment; |
| 101 | 104 |
| 102 @override | 105 @override |
| 103 ConstantValue getFieldConstant(FieldEntity field) { | 106 ConstantValue getFieldConstant(FieldEntity field) { |
| 104 return _elementMap.getFieldConstantValue(field); | 107 return _elementMap.getFieldConstantValue(field); |
| 105 } | 108 } |
| 106 | 109 |
| 107 @override | 110 @override |
| 108 bool isFieldInitializerPotentiallyNull( | 111 bool isFieldInitializerPotentiallyNull( |
| 109 FieldEntity field, ir.Node initializer) { | 112 FieldEntity field, ir.Node initializer) { |
| 110 // TODO(johnniwinther): Implement the ad-hoc check in ast inferrer? | 113 // TODO(johnniwinther): Implement the ad-hoc check in ast inferrer? |
| 111 return true; | 114 return true; |
| 112 } | 115 } |
| 113 | 116 |
| 114 @override | 117 @override |
| 115 TypeInformation computeMemberTypeInformation( | 118 TypeInformation computeMemberTypeInformation( |
| 116 MemberEntity member, ir.Node body) { | 119 MemberEntity member, ir.Node body) { |
| 117 KernelTypeGraphBuilder visitor = | 120 KernelTypeGraphBuilder visitor = new KernelTypeGraphBuilder( |
| 118 new KernelTypeGraphBuilder(member, compiler, _elementMap, this, body); | 121 _options, closedWorld, _closureDataLookup, this, member, body); |
| 119 return visitor.run(); | 122 return visitor.run(); |
| 120 } | 123 } |
| 121 | 124 |
| 122 @override | 125 @override |
| 123 FunctionEntity lookupCallMethod(ClassEntity cls) { | 126 FunctionEntity lookupCallMethod(ClassEntity cls) { |
| 124 throw new UnimplementedError('KernelInferrerEngine.lookupCallMethod'); | 127 throw new UnimplementedError('KernelInferrerEngine.lookupCallMethod'); |
| 125 } | 128 } |
| 126 | 129 |
| 127 @override | 130 @override |
| 128 ir.Node computeMemberBody(MemberEntity member) { | 131 ir.Node computeMemberBody(MemberEntity member) { |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 ConstructorEntity constructor = member; | 303 ConstructorEntity constructor = member; |
| 301 if (constructor.isFactoryConstructor) { | 304 if (constructor.isFactoryConstructor) { |
| 302 DartType type = _elementEnvironment.getFunctionType(constructor); | 305 DartType type = _elementEnvironment.getFunctionType(constructor); |
| 303 return new FactoryConstructorTypeInformation(constructor, type); | 306 return new FactoryConstructorTypeInformation(constructor, type); |
| 304 } else { | 307 } else { |
| 305 return new GenerativeConstructorTypeInformation(constructor); | 308 return new GenerativeConstructorTypeInformation(constructor); |
| 306 } | 309 } |
| 307 } | 310 } |
| 308 } | 311 } |
| 309 } | 312 } |
| OLD | NEW |