[dart2js] Migrate ssa/ssa.dart to null safety. Change-Id: Iab3caf10b2cb26ab22c4f97a64f540b70ca15bf9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/277261 Reviewed-by: Stephen Adams <sra@google.com>
diff --git a/pkg/compiler/lib/src/common/codegen.dart b/pkg/compiler/lib/src/common/codegen.dart index 82eddc3..f048cbe 100644 --- a/pkg/compiler/lib/src/common/codegen.dart +++ b/pkg/compiler/lib/src/common/codegen.dart
@@ -396,7 +396,7 @@ _expressions.add(expression); } - CodegenResult close(js.Fun code) { + CodegenResult close(js.Fun? code) { return CodegenResult(code, _worldImpact, _names.isEmpty ? const [] : _names, _expressions.isEmpty ? const [] : _expressions); }
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart index 4905b98..a90ea9f 100644 --- a/pkg/compiler/lib/src/js_model/js_strategy.dart +++ b/pkg/compiler/lib/src/js_model/js_strategy.dart
@@ -384,6 +384,7 @@ } /// Creates the [SsaBuilder] used for the element model. + @override SsaBuilder createSsaBuilder( CompilerTask task, SourceInformationStrategy sourceInformationStrategy) { return KernelSsaBuilder(
diff --git a/pkg/compiler/lib/src/js_model/js_strategy_interfaces.dart b/pkg/compiler/lib/src/js_model/js_strategy_interfaces.dart index 0e0c6b3..db28658 100644 --- a/pkg/compiler/lib/src/js_model/js_strategy_interfaces.dart +++ b/pkg/compiler/lib/src/js_model/js_strategy_interfaces.dart
@@ -14,6 +14,7 @@ import '../js_model/js_world.dart' show JClosedWorld; import '../native/enqueue.dart'; import '../serialization/serialization.dart'; +import '../ssa/ssa.dart'; import 'locals.dart'; abstract class JsBackendStrategy { @@ -31,4 +32,6 @@ Map<MemberEntity, js.Expression> get generatedCode; void prepareCodegenReader(DataSourceReader source); EntityWriter forEachCodegenMember(void Function(MemberEntity member) f); + SsaBuilder createSsaBuilder(SsaBuilderTask ssaBuilderTask, + SourceInformationStrategy sourceInformationFactory); }
diff --git a/pkg/compiler/lib/src/ssa/ssa.dart b/pkg/compiler/lib/src/ssa/ssa.dart index 2f7ecad..2cfa4d4 100644 --- a/pkg/compiler/lib/src/ssa/ssa.dart +++ b/pkg/compiler/lib/src/ssa/ssa.dart
@@ -2,8 +2,6 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -// @dart = 2.10 - library ssa; import 'package:compiler/src/ssa/metrics.dart'; @@ -28,7 +26,7 @@ import '../js_emitter/startup_emitter/emitter.dart' show ModularEmitterImpl; import '../js_model/elements.dart'; import '../js_model/type_recipe.dart' show TypeExpressionRecipe; -import '../js_model/js_strategy.dart'; +import '../js_model/js_strategy_interfaces.dart'; import '../js_model/js_world.dart' show JClosedWorld; import '../options.dart'; import '../universe/call_structure.dart' show CallStructure; @@ -48,8 +46,8 @@ final SsaBuilderTask _builder; final SsaOptimizerTask optimizer; final SourceInformationStrategy sourceInformationStrategy; - /*late*/ GlobalTypeInferenceResults _globalInferenceResults; - CodegenInputs _codegen; + late final GlobalTypeInferenceResults _globalInferenceResults; + late final CodegenInputs _codegen; SsaFunctionCompiler( this._options, @@ -88,11 +86,12 @@ return registry.close(null); } - HGraph graph = _builder.build(member, closedWorld, _globalInferenceResults, + final graph = _builder.build(member, closedWorld, _globalInferenceResults, _codegen, registry, namer, emitter); if (graph == null) { return registry.close(null); } + optimizer.optimize(member, graph, _codegen, closedWorld, _globalInferenceResults, registry, _metrics); js.Expression result = generator.generateCode( @@ -107,7 +106,7 @@ registry, namer, emitter, - member, + member as FunctionEntity, result, graph.asyncElementType, sourceInformationBuilder.buildAsyncBody(), @@ -120,7 +119,7 @@ sourceInformationStrategy.buildSourceMappedMarker()); } - return registry.close(result); + return registry.close(result as js.Fun); } js.Expression _rewriteAsync( @@ -132,12 +131,12 @@ ModularEmitter emitter, FunctionEntity element, js.Expression code, - DartType asyncTypeParameter, - SourceInformation bodySourceInformation, - SourceInformation exitSourceInformation) { + DartType? asyncTypeParameter, + SourceInformation? bodySourceInformation, + SourceInformation? exitSourceInformation) { if (element.asyncMarker == AsyncMarker.SYNC) return code; - AsyncRewriterBase rewriter = null; + late final AsyncRewriterBase rewriter; js.Name name = namer.methodPropertyName( element is JGeneratorBody ? element.function : element); @@ -182,7 +181,8 @@ name); break; } - return rewriter.rewrite(code, bodySourceInformation, exitSourceInformation); + return rewriter.rewrite( + code as js.Fun, bodySourceInformation, exitSourceInformation); } /// Returns an optional expression that evaluates [type]. Returns `null` if @@ -190,8 +190,8 @@ /// added as a function parameter to the rewritten code. // TODO(sra): We could also return an empty list if the generator takes no // type (e.g. due to rtiNeed optimization). - List<js.Expression> _fetchItemTypeNewRti( - CommonElements commonElements, CodegenRegistry registry, DartType type) { + List<js.Expression>? _fetchItemTypeNewRti( + CommonElements commonElements, CodegenRegistry registry, DartType? type) { if (type == null) return null; registry.registerStaticUse( StaticUse.staticInvoke(commonElements.findType, CallStructure.ONE_ARG)); @@ -207,12 +207,12 @@ ModularEmitter emitter, FunctionEntity element, js.Expression code, - DartType elementType, + DartType? elementType, js.Name name) { FunctionEntity startFunction = commonElements.asyncHelperStartSync; FunctionEntity completerFactory = commonElements.asyncAwaitCompleterFactory; - List<js.Expression> itemTypeExpression = + final itemTypeExpression = _fetchItemTypeNewRti(commonElements, registry, elementType); AsyncRewriter rewriter = AsyncRewriter(_reporter, element, @@ -246,9 +246,9 @@ ModularEmitter emitter, FunctionEntity element, js.Expression code, - DartType asyncTypeParameter, + DartType? asyncTypeParameter, js.Name name) { - List<js.Expression> itemTypeExpression = + final itemTypeExpression = _fetchItemTypeNewRti(commonElements, registry, asyncTypeParameter); SyncStarRewriter rewriter = SyncStarRewriter(_reporter, element, @@ -281,9 +281,9 @@ ModularEmitter emitter, FunctionEntity element, js.Expression code, - DartType asyncTypeParameter, + DartType? asyncTypeParameter, js.Name name) { - List<js.Expression> itemTypeExpression = + final itemTypeExpression = _fetchItemTypeNewRti(commonElements, registry, asyncTypeParameter); AsyncStarRewriter rewriter = AsyncStarRewriter(_reporter, element, @@ -319,7 +319,7 @@ abstract class SsaBuilder { /// Creates the [HGraph] for [member] or returns `null` if no code is needed /// for [member]. - HGraph build( + HGraph? build( MemberEntity member, JClosedWorld closedWorld, GlobalTypeInferenceResults globalInferenceResults, @@ -332,16 +332,15 @@ class SsaBuilderTask extends CompilerTask { final JsBackendStrategy _backendStrategy; final SourceInformationStrategy _sourceInformationFactory; - SsaBuilder _builder; + late SsaBuilder _builder; final SsaMetrics _metrics; @override Metrics get metrics => _metrics; - SsaBuilderTask(Measurer measurer, this._backendStrategy, - this._sourceInformationFactory, this._metrics) - : super(measurer); + SsaBuilderTask(super.measurer, this._backendStrategy, + this._sourceInformationFactory, this._metrics); @override String get name => 'SSA builder'; @@ -353,7 +352,7 @@ /// Creates the [HGraph] for [member] or returns `null` if no code is needed /// for [member]. - HGraph build( + HGraph? build( MemberEntity member, JClosedWorld closedWorld, GlobalTypeInferenceResults globalInferenceResults,