Skip to content

Commit

Permalink
Version 2.19.0-310.0.dev
Browse files Browse the repository at this point in the history
Merge 20ad5db into dev
  • Loading branch information
Dart CI committed Oct 13, 2022
2 parents 96029f1 + 20ad5db commit 04b379b
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 15 deletions.
9 changes: 6 additions & 3 deletions pkg/dev_compiler/lib/src/kernel/compiler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,8 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
_syncIterableClass = sdk.getClass('dart:_js_helper', 'SyncIterable'),
_asyncStarImplClass = sdk.getClass('dart:async', '_AsyncStarImpl'),
_assertInteropMethod = sdk.getTopLevelMember(
'dart:_runtime', 'assertInterop') as Procedure;
'dart:_runtime', 'assertInterop') as Procedure,
_futureOrNormalizer = FutureOrNormalizer(_coreTypes);

@override
Library? get currentLibrary => _currentLibrary;
Expand All @@ -355,6 +356,8 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
InterfaceType get internalSymbolType =>
_coreTypes.legacyRawType(_coreTypes.internalSymbolClass);

final FutureOrNormalizer _futureOrNormalizer;

/// Module can be emitted only once, and the compiler can be reused after
/// only in incremental mode, for expression compilation only.
js_ast.Program emitModule(Component component) {
Expand Down Expand Up @@ -942,7 +945,7 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
}
return _emitInterfaceType(t, emitNullability: emitNullability);
} else if (t is FutureOrType) {
var normalizedType = normalizeFutureOr(t, _coreTypes);
var normalizedType = _futureOrNormalizer.normalize(t);
if (normalizedType is FutureOrType) {
_declareBeforeUse(_coreTypes.deprecatedFutureOrClass);
var typeRep = _emitFutureOrTypeWithArgument(
Expand Down Expand Up @@ -2933,7 +2936,7 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>

@override
js_ast.Expression visitFutureOrType(FutureOrType type) {
var normalizedType = normalizeFutureOr(type, _coreTypes);
var normalizedType = _futureOrNormalizer.normalize(type);
return normalizedType is FutureOrType
? _emitFutureOrType(normalizedType)
: normalizedType.accept(this);
Expand Down
16 changes: 5 additions & 11 deletions pkg/dev_compiler/lib/src/kernel/future_or_normalizer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,6 @@ import 'package:kernel/core_types.dart';
import 'package:kernel/kernel.dart';
import 'package:kernel/src/replacement_visitor.dart';

/// Normalizes all `FutureOr` types found in [type].
DartType normalizeFutureOr(DartType type, CoreTypes coreTypes) =>
type.accept1(_FutureOrNormalizer.instance(coreTypes), Variance.unrelated) ??
type;

/// Visit methods returns a normalized version of `FutureOr` types or `null` if
/// no normalization was applied.
///
Expand All @@ -23,15 +18,14 @@ DartType normalizeFutureOr(DartType type, CoreTypes coreTypes) =>
///
/// Any changes to the normalization logic here should be mirrored in the
/// classes.dart runtime library method named `normalizeFutureOr`.
class _FutureOrNormalizer extends ReplacementVisitor {
class FutureOrNormalizer extends ReplacementVisitor {
final CoreTypes _coreTypes;

static _FutureOrNormalizer? _instance;

_FutureOrNormalizer._(this._coreTypes);
FutureOrNormalizer(this._coreTypes);

factory _FutureOrNormalizer.instance(CoreTypes coreTypes) =>
_instance ?? (_instance = _FutureOrNormalizer._(coreTypes));
/// Normalizes all `FutureOr` types found in [type].
DartType normalize(DartType type) =>
type.accept1(this, Variance.unrelated) ?? type;

@override
DartType? visitFutureOrType(FutureOrType futureOr, int variance) {
Expand Down
2 changes: 1 addition & 1 deletion tools/VERSION
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@ CHANNEL dev
MAJOR 2
MINOR 19
PATCH 0
PRERELEASE 309
PRERELEASE 310
PRERELEASE_PATCH 0

0 comments on commit 04b379b

Please sign in to comment.