| 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 '../../compiler_new.dart'; |
| 7 import '../closure.dart'; | 8 import '../closure.dart'; |
| 8 import '../common.dart'; | 9 import '../common.dart'; |
| 9 import '../common_elements.dart'; | 10 import '../common_elements.dart'; |
| 10 import '../compiler.dart'; | 11 import '../compiler.dart'; |
| 11 import '../constants/values.dart'; | 12 import '../constants/values.dart'; |
| 12 import '../elements/entities.dart'; | 13 import '../elements/entities.dart'; |
| 13 import '../elements/types.dart'; | 14 import '../elements/types.dart'; |
| 15 import '../js_backend/annotations.dart'; |
| 16 import '../js_backend/mirrors_data.dart'; |
| 17 import '../js_backend/no_such_method_registry.dart'; |
| 14 import '../js_model/locals.dart'; | 18 import '../js_model/locals.dart'; |
| 15 import '../kernel/element_map.dart'; | 19 import '../kernel/element_map.dart'; |
| 16 import '../options.dart'; | 20 import '../options.dart'; |
| 17 import '../types/types.dart'; | 21 import '../types/types.dart'; |
| 18 import '../world.dart'; | 22 import '../world.dart'; |
| 19 import 'builder_kernel.dart'; | 23 import 'builder_kernel.dart'; |
| 20 import 'inferrer_engine.dart'; | 24 import 'inferrer_engine.dart'; |
| 21 import 'type_graph_inferrer.dart'; | 25 import 'type_graph_inferrer.dart'; |
| 22 import 'type_graph_nodes.dart'; | 26 import 'type_graph_nodes.dart'; |
| 23 import 'type_system.dart'; | 27 import 'type_system.dart'; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 34 this._globalLocalsMap, | 38 this._globalLocalsMap, |
| 35 this._closureDataLookup, | 39 this._closureDataLookup, |
| 36 ClosedWorld closedWorld, | 40 ClosedWorld closedWorld, |
| 37 ClosedWorldRefiner closedWorldRefiner, | 41 ClosedWorldRefiner closedWorldRefiner, |
| 38 {bool disableTypeInference: false}) | 42 {bool disableTypeInference: false}) |
| 39 : super(closedWorld, closedWorldRefiner, | 43 : super(closedWorld, closedWorldRefiner, |
| 40 disableTypeInference: disableTypeInference); | 44 disableTypeInference: disableTypeInference); |
| 41 | 45 |
| 42 @override | 46 @override |
| 43 InferrerEngine<ir.Node> createInferrerEngineFor(FunctionEntity main) { | 47 InferrerEngine<ir.Node> createInferrerEngineFor(FunctionEntity main) { |
| 44 return new KernelInferrerEngine(_compiler, _elementMap, _globalLocalsMap, | 48 return new KernelInferrerEngine( |
| 45 _closureDataLookup, closedWorld, closedWorldRefiner, main); | 49 _compiler.options, |
| 50 _compiler.progress, |
| 51 _compiler.reporter, |
| 52 _compiler.outputProvider, |
| 53 _compiler.backend.optimizerHints, |
| 54 _elementMap, |
| 55 _globalLocalsMap, |
| 56 _closureDataLookup, |
| 57 closedWorld, |
| 58 closedWorldRefiner, |
| 59 _compiler.backend.mirrorsData, |
| 60 _compiler.backend.noSuchMethodRegistry, |
| 61 main); |
| 46 } | 62 } |
| 47 | 63 |
| 48 @override | 64 @override |
| 49 GlobalTypeInferenceResults createResults() { | 65 GlobalTypeInferenceResults createResults() { |
| 50 return new KernelGlobalTypeInferenceResults(this, closedWorld); | 66 return new KernelGlobalTypeInferenceResults(this, closedWorld); |
| 51 } | 67 } |
| 52 } | 68 } |
| 53 | 69 |
| 54 class KernelGlobalTypeInferenceResults | 70 class KernelGlobalTypeInferenceResults |
| 55 extends GlobalTypeInferenceResults<ir.Node> { | 71 extends GlobalTypeInferenceResults<ir.Node> { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 71 } | 87 } |
| 72 | 88 |
| 73 GlobalTypeInferenceParameterResult<ir.Node> createParameterResult( | 89 GlobalTypeInferenceParameterResult<ir.Node> createParameterResult( |
| 74 TypeGraphInferrer<ir.Node> inferrer, Local parameter) { | 90 TypeGraphInferrer<ir.Node> inferrer, Local parameter) { |
| 75 return new GlobalTypeInferenceParameterResultImpl<ir.Node>( | 91 return new GlobalTypeInferenceParameterResultImpl<ir.Node>( |
| 76 parameter, inferrer, dynamicType); | 92 parameter, inferrer, dynamicType); |
| 77 } | 93 } |
| 78 } | 94 } |
| 79 | 95 |
| 80 class KernelInferrerEngine extends InferrerEngineImpl<ir.Node> { | 96 class KernelInferrerEngine extends InferrerEngineImpl<ir.Node> { |
| 81 final CompilerOptions _options; | |
| 82 final KernelToElementMapForBuilding _elementMap; | 97 final KernelToElementMapForBuilding _elementMap; |
| 83 final GlobalLocalsMap _globalLocalsMap; | 98 final GlobalLocalsMap _globalLocalsMap; |
| 84 final ClosureDataLookup<ir.Node> _closureDataLookup; | 99 final ClosureDataLookup<ir.Node> _closureDataLookup; |
| 85 | 100 |
| 86 KernelInferrerEngine( | 101 KernelInferrerEngine( |
| 87 Compiler compiler, | 102 CompilerOptions options, |
| 103 Progress progress, |
| 104 DiagnosticReporter reporter, |
| 105 CompilerOutput compilerOutput, |
| 106 OptimizerHintsForTests optimizerHints, |
| 88 this._elementMap, | 107 this._elementMap, |
| 89 this._globalLocalsMap, | 108 this._globalLocalsMap, |
| 90 this._closureDataLookup, | 109 this._closureDataLookup, |
| 91 ClosedWorld closedWorld, | 110 ClosedWorld closedWorld, |
| 92 ClosedWorldRefiner closedWorldRefiner, | 111 ClosedWorldRefiner closedWorldRefiner, |
| 112 MirrorsData mirrorsData, |
| 113 NoSuchMethodRegistry noSuchMethodRegistry, |
| 93 FunctionEntity mainElement) | 114 FunctionEntity mainElement) |
| 94 : this._options = compiler.options, | 115 : super( |
| 95 super( | 116 options, |
| 96 compiler, | 117 progress, |
| 118 reporter, |
| 119 compilerOutput, |
| 120 optimizerHints, |
| 97 closedWorld, | 121 closedWorld, |
| 98 closedWorldRefiner, | 122 closedWorldRefiner, |
| 123 mirrorsData, |
| 124 noSuchMethodRegistry, |
| 99 mainElement, | 125 mainElement, |
| 100 new KernelTypeSystemStrategy( | 126 new KernelTypeSystemStrategy( |
| 101 _elementMap, _globalLocalsMap, _closureDataLookup)); | 127 _elementMap, _globalLocalsMap, _closureDataLookup)); |
| 102 | 128 |
| 103 ElementEnvironment get _elementEnvironment => _elementMap.elementEnvironment; | 129 ElementEnvironment get _elementEnvironment => _elementMap.elementEnvironment; |
| 104 | 130 |
| 105 @override | 131 @override |
| 106 ConstantValue getFieldConstant(FieldEntity field) { | 132 ConstantValue getFieldConstant(FieldEntity field) { |
| 107 return _elementMap.getFieldConstantValue(field); | 133 return _elementMap.getFieldConstantValue(field); |
| 108 } | 134 } |
| 109 | 135 |
| 110 @override | 136 @override |
| 111 bool isFieldInitializerPotentiallyNull( | 137 bool isFieldInitializerPotentiallyNull( |
| 112 FieldEntity field, ir.Node initializer) { | 138 FieldEntity field, ir.Node initializer) { |
| 113 // TODO(johnniwinther): Implement the ad-hoc check in ast inferrer? | 139 // TODO(johnniwinther): Implement the ad-hoc check in ast inferrer? |
| 114 return true; | 140 return true; |
| 115 } | 141 } |
| 116 | 142 |
| 117 @override | 143 @override |
| 118 TypeInformation computeMemberTypeInformation( | 144 TypeInformation computeMemberTypeInformation( |
| 119 MemberEntity member, ir.Node body) { | 145 MemberEntity member, ir.Node body) { |
| 120 KernelTypeGraphBuilder visitor = new KernelTypeGraphBuilder( | 146 KernelTypeGraphBuilder visitor = new KernelTypeGraphBuilder( |
| 121 _options, closedWorld, _closureDataLookup, this, member, body); | 147 options, closedWorld, _closureDataLookup, this, member, body); |
| 122 return visitor.run(); | 148 return visitor.run(); |
| 123 } | 149 } |
| 124 | 150 |
| 125 @override | 151 @override |
| 126 FunctionEntity lookupCallMethod(ClassEntity cls) { | 152 FunctionEntity lookupCallMethod(ClassEntity cls) { |
| 127 throw new UnimplementedError('KernelInferrerEngine.lookupCallMethod'); | 153 throw new UnimplementedError('KernelInferrerEngine.lookupCallMethod'); |
| 128 } | 154 } |
| 129 | 155 |
| 130 @override | 156 @override |
| 131 ir.Node computeMemberBody(MemberEntity member) { | 157 ir.Node computeMemberBody(MemberEntity member) { |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 ConstructorEntity constructor = member; | 329 ConstructorEntity constructor = member; |
| 304 if (constructor.isFactoryConstructor) { | 330 if (constructor.isFactoryConstructor) { |
| 305 DartType type = _elementEnvironment.getFunctionType(constructor); | 331 DartType type = _elementEnvironment.getFunctionType(constructor); |
| 306 return new FactoryConstructorTypeInformation(constructor, type); | 332 return new FactoryConstructorTypeInformation(constructor, type); |
| 307 } else { | 333 } else { |
| 308 return new GenerativeConstructorTypeInformation(constructor); | 334 return new GenerativeConstructorTypeInformation(constructor); |
| 309 } | 335 } |
| 310 } | 336 } |
| 311 } | 337 } |
| 312 } | 338 } |
| OLD | NEW |