| OLD | NEW |
| (Empty) | |
| 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 |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 import 'package:kernel/ast.dart' as ir; |
| 6 |
| 7 import '../compiler.dart'; |
| 8 import '../constants/values.dart'; |
| 9 import '../elements/entities.dart'; |
| 10 import '../types/types.dart'; |
| 11 import '../world.dart'; |
| 12 import 'inferrer_engine.dart'; |
| 13 import 'type_graph_inferrer.dart'; |
| 14 import 'type_graph_nodes.dart'; |
| 15 import 'type_system.dart'; |
| 16 |
| 17 class KernelTypeGraphInferrer extends TypeGraphInferrer<ir.Node> { |
| 18 final Compiler _compiler; |
| 19 |
| 20 KernelTypeGraphInferrer(this._compiler, ClosedWorld closedWorld, |
| 21 ClosedWorldRefiner closedWorldRefiner, {bool disableTypeInference: false}) |
| 22 : super(closedWorld, closedWorldRefiner, |
| 23 disableTypeInference: disableTypeInference); |
| 24 |
| 25 @override |
| 26 InferrerEngine<ir.Node> createInferrerEngineFor(FunctionEntity main) { |
| 27 return new KernelInferrerEngine( |
| 28 _compiler, closedWorld, closedWorldRefiner, main); |
| 29 } |
| 30 |
| 31 @override |
| 32 GlobalTypeInferenceResults createResults() { |
| 33 return new KernelGlobalTypeInferenceResults(this, closedWorld); |
| 34 } |
| 35 } |
| 36 |
| 37 class KernelGlobalTypeInferenceResults |
| 38 extends GlobalTypeInferenceResults<ir.Node> { |
| 39 KernelGlobalTypeInferenceResults( |
| 40 TypesInferrer<ir.Node> inferrer, ClosedWorld closedWorld) |
| 41 : super(inferrer, closedWorld); |
| 42 |
| 43 GlobalTypeInferenceMemberResult<ir.Node> createMemberResult( |
| 44 TypeGraphInferrer<ir.Node> inferrer, MemberEntity member, |
| 45 {bool isJsInterop: false}) { |
| 46 return new GlobalTypeInferenceMemberResultImpl<ir.Node>( |
| 47 member, |
| 48 // We store data in the context of the enclosing method, even |
| 49 // for closure elements. |
| 50 inferrer.inferrer.lookupDataOfMember(member), |
| 51 inferrer, |
| 52 isJsInterop, |
| 53 dynamicType); |
| 54 } |
| 55 |
| 56 GlobalTypeInferenceParameterResult<ir.Node> createParameterResult( |
| 57 TypeGraphInferrer<ir.Node> inferrer, Local parameter) { |
| 58 return new GlobalTypeInferenceParameterResultImpl<ir.Node>( |
| 59 parameter, inferrer, dynamicType); |
| 60 } |
| 61 } |
| 62 |
| 63 class KernelInferrerEngine extends InferrerEngineImpl<ir.Node> { |
| 64 KernelInferrerEngine(Compiler compiler, ClosedWorld closedWorld, |
| 65 ClosedWorldRefiner closedWorldRefiner, FunctionEntity mainElement) |
| 66 : super(compiler, closedWorld, closedWorldRefiner, mainElement, |
| 67 const KernelTypeSystemStrategy()); |
| 68 |
| 69 @override |
| 70 ConstantValue getFieldConstant(FieldEntity field) { |
| 71 throw new UnimplementedError('KernelInferrerEngine.getFieldConstant'); |
| 72 } |
| 73 |
| 74 @override |
| 75 bool isFieldInitializerPotentiallyNull( |
| 76 FieldEntity field, ir.Node initializer) { |
| 77 throw new UnimplementedError( |
| 78 'KernelInferrerEngine.isFieldInitializerPotentiallyNull'); |
| 79 } |
| 80 |
| 81 @override |
| 82 TypeInformation computeMemberTypeInformation( |
| 83 MemberEntity member, ir.Node body) { |
| 84 throw new UnimplementedError( |
| 85 'KernelInferrerEngine.computeMemberTypeInformation'); |
| 86 } |
| 87 |
| 88 @override |
| 89 FunctionEntity lookupCallMethod(ClassEntity cls) { |
| 90 throw new UnimplementedError('KernelInferrerEngine.lookupCallMethod'); |
| 91 } |
| 92 |
| 93 @override |
| 94 void forEachParameter(FunctionEntity method, void f(Local parameter)) { |
| 95 throw new UnimplementedError('KernelInferrerEngine.forEachParameter'); |
| 96 } |
| 97 |
| 98 @override |
| 99 ir.Node computeMemberBody(MemberEntity member) { |
| 100 throw new UnimplementedError('KernelInferrerEngine.computeMemberBody'); |
| 101 } |
| 102 |
| 103 @override |
| 104 int computeMemberSize(MemberEntity member) { |
| 105 throw new UnimplementedError('KernelInferrerEngine.computeMemberSize'); |
| 106 } |
| 107 |
| 108 @override |
| 109 GlobalTypeInferenceElementData<ir.Node> createElementData() { |
| 110 throw new UnimplementedError('KernelInferrerEngine.createElementData'); |
| 111 } |
| 112 } |
| 113 |
| 114 class KernelTypeSystemStrategy implements TypeSystemStrategy<ir.Node> { |
| 115 const KernelTypeSystemStrategy(); |
| 116 |
| 117 @override |
| 118 bool checkClassEntity(ClassEntity cls) => true; |
| 119 |
| 120 @override |
| 121 bool checkMapNode(ir.Node node) => true; |
| 122 |
| 123 @override |
| 124 bool checkListNode(ir.Node node) => true; |
| 125 |
| 126 @override |
| 127 bool checkLoopPhiNode(ir.Node node) => true; |
| 128 |
| 129 @override |
| 130 bool checkPhiNode(ir.Node node) => true; |
| 131 |
| 132 @override |
| 133 void forEachParameter(FunctionEntity function, void f(Local parameter)) { |
| 134 throw new UnimplementedError('KernelTypeSystemStrategy.forEachParameter'); |
| 135 } |
| 136 |
| 137 @override |
| 138 ParameterTypeInformation createParameterTypeInformation( |
| 139 Local parameter, TypeSystem<ir.Node> types) { |
| 140 throw new UnimplementedError( |
| 141 'KernelTypeSystemStrategy.createParameterTypeInformation'); |
| 142 } |
| 143 |
| 144 @override |
| 145 MemberTypeInformation createMemberTypeInformation(MemberEntity member) { |
| 146 throw new UnimplementedError( |
| 147 'KernelTypeSystemStrategy.createParameterTypeInformation'); |
| 148 } |
| 149 } |
| OLD | NEW |