Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Side by Side Diff: pkg/compiler/lib/src/inferrer/kernel_inferrer_engine.dart

Issue 3009693002: Handle int/double literals in inference (Closed)
Patch Set: Updated cf. comments Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/inferrer/builder_kernel.dart ('k') | tests/compiler/dart2js/inference/data/simple.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698