| 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 |
| 32 class KernelGlobalTypeInferenceResults |
| 33 extends GlobalTypeInferenceResults<ir.Node> { |
| 34 KernelGlobalTypeInferenceResults( |
| 35 TypesInferrer<ir.Node> inferrer, ClosedWorld closedWorld) |
| 36 : super(inferrer, closedWorld); |
| 37 |
| 38 GlobalTypeInferenceMemberResult<ir.Node> createMemberResult( |
| 39 TypeGraphInferrer<ir.Node> inferrer, MemberEntity member, |
| 40 {bool isJsInterop: false}) { |
| 41 return new GlobalTypeInferenceMemberResultImpl<ir.Node>( |
| 42 member, |
| 43 // We store data in the context of the enclosing method, even |
| 44 // for closure elements. |
| 45 inferrer.inferrer.lookupDataOfMember(member), |
| 46 inferrer, |
| 47 isJsInterop, |
| 48 dynamicType); |
| 49 } |
| 50 |
| 51 GlobalTypeInferenceParameterResult<ir.Node> createParameterResult( |
| 52 TypeGraphInferrer<ir.Node> inferrer, Local parameter) { |
| 53 return new GlobalTypeInferenceParameterResultImpl<ir.Node>( |
| 54 parameter, inferrer, dynamicType); |
| 55 } |
| 56 } |
| 57 |
| 58 class KernelInferrerEngine extends InferrerEngineImpl<ir.Node> { |
| 59 KernelInferrerEngine(Compiler compiler, ClosedWorld closedWorld, |
| 60 ClosedWorldRefiner closedWorldRefiner, FunctionEntity mainElement) |
| 61 : super(compiler, closedWorld, closedWorldRefiner, mainElement, |
| 62 const KernelTypeSystemStrategy()); |
| 63 |
| 64 @override |
| 65 ConstantValue getFieldConstant(FieldEntity field) { |
| 66 throw new UnimplementedError('KernelInferrerEngine.getFieldConstant'); |
| 67 } |
| 68 |
| 69 @override |
| 70 bool isFieldInitializerPotentiallyNull( |
| 71 FieldEntity field, ir.Node initializer) { |
| 72 throw new UnimplementedError( |
| 73 'KernelInferrerEngine.isFieldInitializerPotentiallyNull'); |
| 74 } |
| 75 |
| 76 @override |
| 77 TypeInformation computeMemberTypeInformation( |
| 78 MemberEntity member, ir.Node body) { |
| 79 throw new UnimplementedError( |
| 80 'KernelInferrerEngine.computeMemberTypeInformation'); |
| 81 } |
| 82 |
| 83 @override |
| 84 FunctionEntity lookupCallMethod(ClassEntity cls) { |
| 85 throw new UnimplementedError('KernelInferrerEngine.lookupCallMethod'); |
| 86 } |
| 87 |
| 88 @override |
| 89 void forEachParameter(FunctionEntity method, void f(Local parameter)) { |
| 90 throw new UnimplementedError('KernelInferrerEngine.forEachParameter'); |
| 91 } |
| 92 |
| 93 @override |
| 94 ir.Node computeMemberBody(MemberEntity member) { |
| 95 throw new UnimplementedError('KernelInferrerEngine.computeMemberBody'); |
| 96 } |
| 97 |
| 98 @override |
| 99 int computeMemberSize(MemberEntity member) { |
| 100 throw new UnimplementedError('KernelInferrerEngine.computeMemberSize'); |
| 101 } |
| 102 |
| 103 @override |
| 104 GlobalTypeInferenceElementData<ir.Node> createElementData() { |
| 105 throw new UnimplementedError('KernelInferrerEngine.createElementData'); |
| 106 } |
| 107 } |
| 108 |
| 109 class KernelTypeSystemStrategy implements TypeSystemStrategy<ir.Node> { |
| 110 const KernelTypeSystemStrategy(); |
| 111 |
| 112 @override |
| 113 bool checkClassEntity(ClassEntity cls) => true; |
| 114 |
| 115 @override |
| 116 bool checkMapNode(ir.Node node) => true; |
| 117 |
| 118 @override |
| 119 bool checkListNode(ir.Node node) => true; |
| 120 |
| 121 @override |
| 122 bool checkLoopPhiNode(ir.Node node) => true; |
| 123 |
| 124 @override |
| 125 bool checkPhiNode(ir.Node node) => true; |
| 126 |
| 127 @override |
| 128 void forEachParameter(FunctionEntity function, void f(Local parameter)) { |
| 129 throw new UnimplementedError('KernelTypeSystemStrategy.forEachParameter'); |
| 130 } |
| 131 |
| 132 @override |
| 133 ParameterTypeInformation createParameterTypeInformation( |
| 134 Local parameter, TypeSystem<ir.Node> types) { |
| 135 throw new UnimplementedError( |
| 136 'KernelTypeSystemStrategy.createParameterTypeInformation'); |
| 137 } |
| 138 |
| 139 @override |
| 140 MemberTypeInformation createMemberTypeInformation(MemberEntity member) { |
| 141 throw new UnimplementedError( |
| 142 'KernelTypeSystemStrategy.createParameterTypeInformation'); |
| 143 } |
| 144 } |
| OLD | NEW |