Skip to content

Commit 612cc3b

Browse files
natebiggsCommit Queue
authored and
Commit Queue
committed
[dart2js] Prep ssa/builder.dart for null safety migration.
Change-Id: I7ff792c38bd2257bcff55186e9f6f0cabf5f9021 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/277160 Reviewed-by: Stephen Adams <[email protected]> Commit-Queue: Nate Biggs <[email protected]> Reviewed-by: Sigmund Cherem <[email protected]>
1 parent d968d14 commit 612cc3b

File tree

4 files changed

+122
-114
lines changed

4 files changed

+122
-114
lines changed

pkg/compiler/lib/src/js_model/element_map.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,32 +168,32 @@ abstract class KernelToTypeInferenceMap {
168168
/// Returns the inferred receiver type of the dynamic [invocation].
169169
// TODO(johnniwinther): Improve the type of the [invocation] once the new
170170
// method invocation encoding is fully utilized.
171-
AbstractValue receiverTypeOfInvocation(
171+
AbstractValue? receiverTypeOfInvocation(
172172
ir.Expression invocation, AbstractValueDomain abstractValueDomain);
173173

174174
/// Returns the inferred receiver type of the dynamic [read].
175175
// TODO(johnniwinther): Improve the type of the [invocation] once the new
176176
// method invocation encoding is fully utilized.
177-
AbstractValue receiverTypeOfGet(ir.Expression read);
177+
AbstractValue? receiverTypeOfGet(ir.Expression read);
178178

179179
/// Returns the inferred receiver type of the dynamic [write].
180180
// TODO(johnniwinther): Improve the type of the [invocation] once the new
181181
// method invocation encoding is fully utilized.
182-
AbstractValue receiverTypeOfSet(
182+
AbstractValue? receiverTypeOfSet(
183183
ir.Expression write, AbstractValueDomain abstractValueDomain);
184184

185185
/// Returns the inferred type of [listLiteral].
186186
AbstractValue typeOfListLiteral(
187187
ir.ListLiteral listLiteral, AbstractValueDomain abstractValueDomain);
188188

189189
/// Returns the inferred type of iterator in [forInStatement].
190-
AbstractValue typeOfIterator(ir.ForInStatement forInStatement);
190+
AbstractValue? typeOfIterator(ir.ForInStatement forInStatement);
191191

192192
/// Returns the inferred type of `current` in [forInStatement].
193-
AbstractValue typeOfIteratorCurrent(ir.ForInStatement forInStatement);
193+
AbstractValue? typeOfIteratorCurrent(ir.ForInStatement forInStatement);
194194

195195
/// Returns the inferred type of `moveNext` in [forInStatement].
196-
AbstractValue typeOfIteratorMoveNext(ir.ForInStatement forInStatement);
196+
AbstractValue? typeOfIteratorMoveNext(ir.ForInStatement forInStatement);
197197

198198
/// Returns `true` if [forInStatement] is inferred to be a JavaScript
199199
/// indexable iterator.

pkg/compiler/lib/src/js_model/js_strategy.dart

Lines changed: 0 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66

77
library dart2js.js_model.strategy;
88

9-
import 'package:kernel/ast.dart' as ir;
10-
119
import '../common.dart';
1210
import '../common/codegen.dart';
1311
import '../common/elements.dart' show CommonElements, ElementEnvironment;
@@ -22,7 +20,6 @@ import '../enqueue.dart';
2220
import '../io/kernel_source_information.dart'
2321
show KernelSourceInformationStrategy;
2422
import '../io/source_information.dart';
25-
import '../inferrer/abstract_value_domain.dart';
2623
import '../inferrer/type_graph_inferrer.dart';
2724
import '../inferrer/types.dart';
2825
import '../inferrer_experimental/types.dart' as experimentalInferrer;
@@ -56,18 +53,15 @@ import '../js_model/js_world.dart' show JClosedWorld;
5653
import '../js/js.dart' as js;
5754
import '../kernel/kernel_strategy.dart';
5855
import '../kernel/kernel_world.dart';
59-
import '../native/behavior.dart';
6056
import '../native/enqueue.dart';
6157
import '../options.dart';
6258
import '../serialization/serialization.dart';
6359
import '../ssa/builder.dart';
6460
import '../ssa/metrics.dart';
6561
import '../ssa/nodes.dart';
6662
import '../ssa/ssa.dart';
67-
import '../ssa/types.dart';
6863
import '../tracer.dart';
6964
import '../universe/codegen_world_builder.dart';
70-
import '../universe/selector.dart';
7165
import '../universe/world_impact.dart';
7266
import 'closure.dart';
7367
import 'element_map.dart';
@@ -556,103 +550,3 @@ class KernelSsaBuilder implements SsaBuilder {
556550
});
557551
}
558552
}
559-
560-
class KernelToTypeInferenceMapImpl implements KernelToTypeInferenceMap {
561-
final GlobalTypeInferenceResults _globalInferenceResults;
562-
GlobalTypeInferenceMemberResult _targetResults;
563-
564-
KernelToTypeInferenceMapImpl(
565-
MemberEntity target, this._globalInferenceResults) {
566-
_targetResults = _resultOf(target);
567-
}
568-
569-
GlobalTypeInferenceMemberResult _resultOf(MemberEntity e) =>
570-
_globalInferenceResults
571-
.resultOfMember(e is ConstructorBodyEntity ? e.constructor : e);
572-
573-
@override
574-
AbstractValue getReturnTypeOf(FunctionEntity function) {
575-
return AbstractValueFactory.inferredReturnTypeForElement(
576-
function, _globalInferenceResults);
577-
}
578-
579-
@override
580-
AbstractValue receiverTypeOfInvocation(
581-
ir.Expression node, AbstractValueDomain abstractValueDomain) {
582-
return _targetResults.typeOfReceiver(node);
583-
}
584-
585-
@override
586-
AbstractValue receiverTypeOfGet(ir.Expression node) {
587-
return _targetResults.typeOfReceiver(node);
588-
}
589-
590-
@override
591-
AbstractValue receiverTypeOfSet(
592-
ir.Expression node, AbstractValueDomain abstractValueDomain) {
593-
return _targetResults.typeOfReceiver(node);
594-
}
595-
596-
@override
597-
AbstractValue typeOfListLiteral(
598-
ir.ListLiteral listLiteral, AbstractValueDomain abstractValueDomain) {
599-
return _globalInferenceResults.typeOfListLiteral(listLiteral) ??
600-
abstractValueDomain.dynamicType;
601-
}
602-
603-
@override
604-
AbstractValue typeOfIterator(ir.ForInStatement node) {
605-
return _targetResults.typeOfIterator(node);
606-
}
607-
608-
@override
609-
AbstractValue typeOfIteratorCurrent(ir.ForInStatement node) {
610-
return _targetResults.typeOfIteratorCurrent(node);
611-
}
612-
613-
@override
614-
AbstractValue typeOfIteratorMoveNext(ir.ForInStatement node) {
615-
return _targetResults.typeOfIteratorMoveNext(node);
616-
}
617-
618-
@override
619-
bool isJsIndexableIterator(
620-
ir.ForInStatement node, AbstractValueDomain abstractValueDomain) {
621-
AbstractValue mask = typeOfIterator(node);
622-
// TODO(sra): Investigate why mask is sometimes null.
623-
if (mask == null) return false;
624-
return abstractValueDomain.isJsIndexableAndIterable(mask).isDefinitelyTrue;
625-
}
626-
627-
@override
628-
AbstractValue inferredIndexType(ir.ForInStatement node) {
629-
return AbstractValueFactory.inferredResultTypeForSelector(
630-
Selector.index(), typeOfIterator(node), _globalInferenceResults);
631-
}
632-
633-
@override
634-
AbstractValue getInferredTypeOf(MemberEntity member) {
635-
return AbstractValueFactory.inferredTypeForMember(
636-
member, _globalInferenceResults);
637-
}
638-
639-
@override
640-
AbstractValue getInferredTypeOfParameter(Local parameter) {
641-
return AbstractValueFactory.inferredTypeForParameter(
642-
parameter, _globalInferenceResults);
643-
}
644-
645-
@override
646-
AbstractValue resultTypeOfSelector(Selector selector, AbstractValue mask) {
647-
return AbstractValueFactory.inferredResultTypeForSelector(
648-
selector, mask, _globalInferenceResults);
649-
}
650-
651-
@override
652-
AbstractValue typeFromNativeBehavior(
653-
// TODO(48820): remove covariant once interface and implementation match.
654-
NativeBehavior nativeBehavior,
655-
covariant JClosedWorld closedWorld) {
656-
return AbstractValueFactory.fromNativeBehavior(nativeBehavior, closedWorld);
657-
}
658-
}
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
// Copyright (c) 2022, 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 '../elements/entities.dart';
8+
import '../inferrer/abstract_value_domain.dart';
9+
import '../inferrer/types.dart';
10+
import '../native/behavior.dart';
11+
import '../ssa/types.dart';
12+
import '../universe/selector.dart';
13+
import 'element_map.dart';
14+
import 'js_world.dart';
15+
16+
class KernelToTypeInferenceMapImpl implements KernelToTypeInferenceMap {
17+
final GlobalTypeInferenceResults _globalInferenceResults;
18+
late final GlobalTypeInferenceMemberResult _targetResults;
19+
20+
KernelToTypeInferenceMapImpl(
21+
MemberEntity target, this._globalInferenceResults) {
22+
_targetResults = _resultOf(target);
23+
}
24+
25+
GlobalTypeInferenceMemberResult _resultOf(MemberEntity e) =>
26+
_globalInferenceResults
27+
.resultOfMember(e is ConstructorBodyEntity ? e.constructor : e);
28+
29+
@override
30+
AbstractValue getReturnTypeOf(FunctionEntity function) {
31+
return AbstractValueFactory.inferredReturnTypeForElement(
32+
function, _globalInferenceResults);
33+
}
34+
35+
@override
36+
AbstractValue? receiverTypeOfInvocation(
37+
ir.Expression node, AbstractValueDomain abstractValueDomain) {
38+
return _targetResults.typeOfReceiver(node);
39+
}
40+
41+
@override
42+
AbstractValue? receiverTypeOfGet(ir.Expression node) {
43+
return _targetResults.typeOfReceiver(node);
44+
}
45+
46+
@override
47+
AbstractValue? receiverTypeOfSet(
48+
ir.Expression node, AbstractValueDomain abstractValueDomain) {
49+
return _targetResults.typeOfReceiver(node);
50+
}
51+
52+
@override
53+
AbstractValue typeOfListLiteral(
54+
ir.ListLiteral listLiteral, AbstractValueDomain abstractValueDomain) {
55+
return _globalInferenceResults.typeOfListLiteral(listLiteral) ??
56+
abstractValueDomain.dynamicType;
57+
}
58+
59+
@override
60+
AbstractValue? typeOfIterator(ir.ForInStatement node) {
61+
return _targetResults.typeOfIterator(node);
62+
}
63+
64+
@override
65+
AbstractValue? typeOfIteratorCurrent(ir.ForInStatement node) {
66+
return _targetResults.typeOfIteratorCurrent(node);
67+
}
68+
69+
@override
70+
AbstractValue? typeOfIteratorMoveNext(ir.ForInStatement node) {
71+
return _targetResults.typeOfIteratorMoveNext(node);
72+
}
73+
74+
@override
75+
bool isJsIndexableIterator(
76+
ir.ForInStatement node, AbstractValueDomain abstractValueDomain) {
77+
final mask = typeOfIterator(node);
78+
// TODO(sra): Investigate why mask is sometimes null.
79+
if (mask == null) return false;
80+
return abstractValueDomain.isJsIndexableAndIterable(mask).isDefinitelyTrue;
81+
}
82+
83+
@override
84+
AbstractValue inferredIndexType(ir.ForInStatement node) {
85+
return AbstractValueFactory.inferredResultTypeForSelector(
86+
Selector.index(), typeOfIterator(node)!, _globalInferenceResults);
87+
}
88+
89+
@override
90+
AbstractValue getInferredTypeOf(MemberEntity member) {
91+
return AbstractValueFactory.inferredTypeForMember(
92+
member, _globalInferenceResults);
93+
}
94+
95+
@override
96+
AbstractValue getInferredTypeOfParameter(Local parameter) {
97+
return AbstractValueFactory.inferredTypeForParameter(
98+
parameter, _globalInferenceResults);
99+
}
100+
101+
@override
102+
AbstractValue resultTypeOfSelector(Selector selector, AbstractValue mask) {
103+
return AbstractValueFactory.inferredResultTypeForSelector(
104+
selector, mask, _globalInferenceResults);
105+
}
106+
107+
@override
108+
AbstractValue typeFromNativeBehavior(
109+
// TODO(48820): remove covariant once interface and implementation match.
110+
NativeBehavior nativeBehavior,
111+
covariant JClosedWorld closedWorld) {
112+
return AbstractValueFactory.fromNativeBehavior(nativeBehavior, closedWorld);
113+
}
114+
}

pkg/compiler/lib/src/ssa/builder.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import '../js_emitter/code_emitter_task.dart' show ModularEmitter;
4242
import '../js_model/class_type_variable_access.dart';
4343
import '../js_model/element_map.dart';
4444
import '../js_model/elements.dart' show JGeneratorBody;
45-
import '../js_model/js_strategy.dart';
45+
import '../js_model/js_strategy_migrated.dart';
4646
import '../js_model/js_world.dart' show JClosedWorld;
4747
import '../js_model/locals.dart' show GlobalLocalsMap, JumpVisitor;
4848
import '../js_model/type_recipe.dart';
@@ -265,7 +265,7 @@ class KernelSsaGraphBuilder extends ir.Visitor<void>
265265
/// The current block to add instructions to. Might be null, if we are
266266
/// visiting dead code, but see [_isReachable].
267267
@override
268-
HBasicBlock get current => _current /*!*/;
268+
HBasicBlock get current => _current;
269269

270270
void set current(c) {
271271
_isReachable = c != null;

0 commit comments

Comments
 (0)