Skip to content

Commit

Permalink
Version 3.6.0-15.0.dev
Browse files Browse the repository at this point in the history
Merge 8767626 into dev
  • Loading branch information
Dart CI committed Jul 8, 2024
2 parents 7895d35 + 8767626 commit 1679aba
Show file tree
Hide file tree
Showing 95 changed files with 942 additions and 651 deletions.
16 changes: 7 additions & 9 deletions pkg/_js_interop_checks/lib/js_interop_checks.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@

// ignore_for_file: implementation_imports

import 'package:_fe_analyzer_shared/src/messages/codes.dart'
import 'package:_fe_analyzer_shared/src/messages/severity.dart' show Severity;
import 'package:_js_interop_checks/src/transformations/export_checker.dart';
import 'package:_js_interop_checks/src/transformations/js_util_optimizer.dart';
import 'package:front_end/src/api_prototype/codes.dart'
show
Message,
LocatedMessage,
Expand Down Expand Up @@ -39,19 +42,14 @@ import 'package:_fe_analyzer_shared/src/messages/codes.dart'
templateJsInteropNativeClassInAnnotation,
templateJsInteropStaticInteropTearOffsDisallowed,
templateJsInteropStaticInteropTrustTypesUsageNotAllowed,
templateJsInteropStaticInteropTrustTypesUsedWithoutStaticInterop;
import 'package:_fe_analyzer_shared/src/messages/severity.dart' show Severity;
import 'package:_js_interop_checks/src/transformations/export_checker.dart';
import 'package:_js_interop_checks/src/transformations/js_util_optimizer.dart';
// Used for importing CFE utility functions for constructor tear-offs.
import 'package:front_end/src/api_prototype/lowering_predicates.dart';
import 'package:front_end/src/codes/cfe_codes.dart'
show
templateJsInteropStaticInteropTrustTypesUsedWithoutStaticInterop,
templateJsInteropExtensionTypeNotInterop,
templateJsInteropFunctionToJSRequiresStaticType,
templateJsInteropStaticInteropExternalAccessorTypeViolation,
templateJsInteropStaticInteropExternalFunctionTypeViolation,
templateJsInteropStaticInteropToJSFunctionTypeViolation;
// Used for importing CFE utility functions for constructor tear-offs.
import 'package:front_end/src/api_prototype/lowering_predicates.dart';
import 'package:kernel/class_hierarchy.dart';
import 'package:kernel/core_types.dart';
import 'package:kernel/kernel.dart' hide Pattern;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,13 @@

// ignore_for_file: implementation_imports

import 'package:_fe_analyzer_shared/src/messages/codes.dart'
show
messageJsInteropIsATearoff,
templateJsInteropExportClassNotMarkedExportable;
import 'package:_js_interop_checks/js_interop_checks.dart'
show JsInteropDiagnosticReporter;
import 'package:_js_interop_checks/src/js_interop.dart' as js_interop;
import 'package:front_end/src/codes/cfe_codes.dart'
import 'package:front_end/src/api_prototype/codes.dart'
show
messageJsInteropIsATearoff,
templateJsInteropExportClassNotMarkedExportable,
templateJsInteropExportInvalidInteropTypeArgument,
templateJsInteropExportInvalidTypeArgument,
templateJsInteropIsAInvalidType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,13 @@

// ignore_for_file: implementation_imports

import 'package:_fe_analyzer_shared/src/messages/codes.dart'
show
templateJsInteropStaticInteropMockMissingGetterOrSetter,
templateJsInteropStaticInteropMockMissingImplements;
import 'package:_js_interop_checks/js_interop_checks.dart'
show JsInteropDiagnosticReporter;
import 'package:_js_interop_checks/src/js_interop.dart' as js_interop;
import 'package:front_end/src/codes/cfe_codes.dart'
import 'package:front_end/src/api_prototype/codes.dart'
show
templateJsInteropStaticInteropMockMissingGetterOrSetter,
templateJsInteropStaticInteropMockMissingImplements,
templateJsInteropStaticInteropMockNotStaticInteropType,
templateJsInteropStaticInteropMockTypeParametersNotAllowed;
import 'package:kernel/ast.dart';
Expand Down
3 changes: 1 addition & 2 deletions pkg/compiler/lib/src/phase/load_kernel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import 'dart:async';
import 'package:_js_interop_checks/src/transformations/static_interop_class_eraser.dart';
import 'package:collection/collection.dart';
import 'package:front_end/src/api_unstable/dart2js.dart' as fe;
import 'package:front_end/src/kernel/utils.dart';
import 'package:kernel/ast.dart' as ir;
import 'package:kernel/binary/ast_from_binary.dart' show BinaryBuilder;
import 'package:kernel/class_hierarchy.dart' as ir;
Expand Down Expand Up @@ -417,7 +416,7 @@ Future<Output?> run(Input input) async {
if (component == null) return null;
if (input.forceSerialization) {
// TODO(johnniwinther): Remove this when #34942 is fixed.
List<int> data = serializeComponent(component);
List<int> data = fe.serializeComponent(component);
component = ir.Component();
BinaryBuilder(data).readComponent(component);
// Ensure we use the new deserialized entry point library.
Expand Down
8 changes: 4 additions & 4 deletions pkg/compiler/lib/src/serialization/strategies.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

import 'dart:io';

import 'package:front_end/src/kernel/utils.dart' as ir show serializeComponent;
import 'package:front_end/src/kernel/utils.dart';
import 'package:front_end/src/api_unstable/dart2js.dart' as ir
show serializeComponent, ByteSink;
import 'package:kernel/ast.dart' as ir;
import 'package:kernel/binary/ast_from_binary.dart' show BinaryBuilder;

Expand Down Expand Up @@ -75,7 +75,7 @@ class BytesInMemorySerializationStrategy extends SerializationStrategy<int> {
GlobalTypeInferenceResults results,
CompilerOptions options,
SerializationIndices indices) {
ByteSink byteSink = ByteSink();
ir.ByteSink byteSink = ir.ByteSink();
DataSinkWriter sink = DataSinkWriter(
BinaryDataSink(byteSink), options, indices,
useDataKinds: useDataKinds);
Expand Down Expand Up @@ -110,7 +110,7 @@ class BytesInMemorySerializationStrategy extends SerializationStrategy<int> {
@override
List<int> serializeClosedWorld(JClosedWorld closedWorld,
CompilerOptions options, SerializationIndices indices) {
ByteSink byteSink = ByteSink();
ir.ByteSink byteSink = ir.ByteSink();
DataSinkWriter sink = DataSinkWriter(
BinaryDataSink(byteSink), options, indices,
useDataKinds: useDataKinds);
Expand Down
21 changes: 10 additions & 11 deletions pkg/compiler/lib/src/util/memory_compiler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,20 @@ import 'dart:async';

import 'package:compiler/compiler_api.dart' as api
show CompilationResult, CompilerDiagnostics, CompilerOutput, Diagnostic;
import 'package:compiler/src/compiler.dart' show Compiler;
import 'package:compiler/src/common.dart';
import 'package:compiler/src/commandline_options.dart';
import 'package:compiler/src/common.dart';
import 'package:compiler/src/compiler.dart' show Compiler;
import 'package:compiler/src/diagnostics/messages.dart' show Message;
import 'package:compiler/src/null_compiler_output.dart' show NullCompilerOutput;
import 'package:compiler/src/options.dart' show CompilerOptions;

import 'package:front_end/src/api_unstable/dart2js.dart' as fe;
import 'package:front_end/src/compute_platform_binaries_location.dart'
show computePlatformBinariesLocation;

import 'memory_source_file_helper.dart';

export 'output_collector.dart';
export 'package:compiler/compiler_api.dart' show CompilationResult;

export 'diagnostic_helper.dart';
export 'output_collector.dart';

String sdkPath = 'sdk/lib';

Expand All @@ -32,16 +30,17 @@ String sdkLibrariesSpecificationPath = '$sdkPath/libraries.json';
Uri sdkLibrariesSpecificationUri =
Uri.base.resolve(sdkLibrariesSpecificationPath);

Uri sdkPlatformBinariesUri = computePlatformBinariesLocation()
Uri sdkPlatformBinariesUri = fe
.computePlatformBinariesLocation()
.resolve("dart2js_platform.dill")
.resolve('.');

String sdkPlatformBinariesPath = sdkPlatformBinariesUri.toString();

Uri buildPlatformBinariesUri =
computePlatformBinariesLocation(forceBuildDir: true)
.resolve("dart2js_platform.dill")
.resolve('.');
Uri buildPlatformBinariesUri = fe
.computePlatformBinariesLocation(forceBuildDir: true)
.resolve("dart2js_platform.dill")
.resolve('.');

String buildPlatformBinariesPath = buildPlatformBinariesUri.toString();

Expand Down
1 change: 0 additions & 1 deletion pkg/compiler/test/end_to_end/dill_loader_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import 'package:compiler/src/kernel/dart2js_target.dart';
import 'package:compiler/src/phase/load_kernel.dart' as load_kernel;
import 'package:expect/expect.dart';
import 'package:front_end/src/api_unstable/dart2js.dart';
import 'package:front_end/src/kernel/utils.dart' show serializeComponent;
import 'package:kernel/target/targets.dart' show TargetFlags;

/// Test that the compiler can successfully read in .dill kernel files rather
Expand Down
1 change: 0 additions & 1 deletion pkg/compiler/test/end_to_end/modular_loader_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import 'package:front_end/src/api_prototype/front_end.dart';
import 'package:front_end/src/api_prototype/memory_file_system.dart';
import 'package:front_end/src/api_prototype/standard_file_system.dart';
import 'package:front_end/src/api_unstable/dart2js.dart';
import 'package:front_end/src/kernel/utils.dart' show serializeComponent;
import 'package:kernel/ast.dart';
import 'package:kernel/target/targets.dart' show TargetFlags;

Expand Down
2 changes: 1 addition & 1 deletion pkg/compiler/test/end_to_end/user_crash_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import 'dart:async';
import 'package:async_helper/async_helper.dart';
import 'package:expect/expect.dart';
import 'package:front_end/src/base/messages.dart'
import 'package:front_end/src/api_prototype/codes.dart'
show templateCantReadFile, messageMissingMain;
import 'package:compiler/compiler_api.dart' as api;
import 'package:compiler/src/util/memory_compiler.dart';
Expand Down
5 changes: 3 additions & 2 deletions pkg/compiler/test/equivalence/id_equivalence.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ import 'package:compiler/src/ir/util.dart';
import 'package:compiler/src/js_model/locals.dart';
import 'package:expect/expect.dart';
import 'package:kernel/ast.dart' as ir;
import 'package:front_end/src/testing/id_extractor.dart';
import 'package:front_end/src/api_prototype/testing.dart';

export 'package:_fe_analyzer_shared/src/testing/id.dart';
export 'package:front_end/src/testing/id_extractor.dart';
export 'package:front_end/src/api_prototype/testing.dart'
show computeMemberId, computeTreeNodeWithOffset;

SourceSpan computeSourceSpanFromUriOffset(Uri uri, int offset) {
return offset != -1
Expand Down
3 changes: 2 additions & 1 deletion pkg/compiler/test/equivalence/id_testing_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
import 'package:compiler/src/elements/entities.dart';
import 'package:compiler/src/kernel/element_map.dart';
import 'package:compiler/src/kernel/kernel_strategy.dart';
import 'package:front_end/src/testing/id_testing_utils.dart';
import 'package:front_end/src/api_prototype/testing.dart'
show getMemberName, getEnclosingMember;
import 'package:kernel/ast.dart' as ir;
import '../equivalence/id_equivalence.dart';
import '../equivalence/id_equivalence_helper.dart';
Expand Down
2 changes: 1 addition & 1 deletion pkg/compiler/test/serialization/on_disk_split_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import 'package:async_helper/async_helper.dart';
import 'package:compiler/src/commandline_options.dart';
import 'package:compiler/src/dart2js.dart';
import 'package:compiler/src/util/memory_compiler.dart';
import 'package:front_end/src/compute_platform_binaries_location.dart'
import 'package:front_end/src/api_unstable/dart2js.dart'
show computePlatformBinariesLocation;

main(List<String> args) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import "dart:io";

import "package:expect/expect.dart";
import "package:expect/minitest.dart"; // ignore: deprecated_member_use
import 'package:front_end/src/compute_platform_binaries_location.dart';
import 'package:front_end/src/api_unstable/dart2js.dart';
import "package:kernel/kernel.dart";
import "package:path/path.dart" as path;

Expand Down
2 changes: 1 addition & 1 deletion pkg/compiler/tool/modular_test_suite_helper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import 'dart:async';

import 'package:compiler/src/commandline_options.dart';
import 'package:compiler/src/kernel/dart2js_target.dart';
import 'package:front_end/src/compute_platform_binaries_location.dart'
import 'package:front_end/src/api_unstable/dart2js.dart'
show computePlatformBinariesLocation;
import 'package:modular_test/src/create_package_config.dart';
import 'package:modular_test/src/io_pipeline.dart';
Expand Down
2 changes: 1 addition & 1 deletion pkg/dart2wasm/lib/constant_evaluator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// 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.

import 'package:front_end/src/kernel/constant_evaluator.dart' as kernel;
import 'package:front_end/src/api_prototype/constant_evaluator.dart' as kernel;
import 'package:kernel/ast.dart';
import 'package:kernel/class_hierarchy.dart';
import 'package:kernel/core_types.dart';
Expand Down
119 changes: 84 additions & 35 deletions pkg/dart2wasm/lib/dispatch_table.dart
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,7 @@ class DispatchTable {
(selector.callCount > 0 && selector.targetCount > 1) ||
(selector.paramInfo.member! == translator.objectNoSuchMethod);

List<SelectorInfo> selectors =
final List<SelectorInfo> selectors =
_selectorInfo.values.where(needsDispatch).toList();

// Sort the selectors based on number of targets and number of use sites.
Expand All @@ -427,40 +427,19 @@ class DispatchTable {

selectors.sort((a, b) => selectorSortWeight(b) - selectorSortWeight(a));

int firstAvailable = 0;
_table = [];
bool first = true;
for (SelectorInfo selector in selectors) {
int offset = first ? 0 : firstAvailable - selector.classIds.first;
first = false;
bool fits;
do {
fits = true;
for (int classId in selector.classIds) {
int entry = offset + classId;
if (entry >= _table.length) {
// Fits
break;
}
if (_table[entry] != null) {
fits = false;
break;
}
}
if (!fits) offset++;
} while (!fits);
selector.offset = offset;
for (int classId in selector.classIds) {
int entry = offset + classId;
while (_table.length <= entry) {
_table.add(null);
}
assert(_table[entry] == null);
_table[entry] = selector.targets[classId];
}
while (firstAvailable < _table.length && _table[firstAvailable] != null) {
firstAvailable++;
}
final rows = <Row<Reference>>[];
for (final selector in selectors) {
final rowValues = <({int index, Reference value})>[];
selector.targets.forEach((int classId, Reference target) {
rowValues.add((index: classId, value: target));
});
rowValues.sort((a, b) => a.index.compareTo(b.index));
rows.add(Row(rowValues));
}

_table = buildRowDisplacementTable<Reference>(rows);
for (int i = 0; i < rows.length; ++i) {
selectors[i].offset = rows[i].offset;
}

wasmTable = m.tables.define(w.RefType.func(nullable: true), _table.length);
Expand All @@ -478,3 +457,73 @@ class DispatchTable {
}
}
}

/// Build a row-displacement table based on fitting the [rows].
///
/// The returned list is the resulting row displacement table with `null`
/// entries representing unused space.
///
/// The offset of all [Row]s will be initialized.
List<V?> buildRowDisplacementTable<V extends Object>(List<Row<V>> rows,
{int firstAvailable = 0}) {
final table = <V?>[];
for (final row in rows) {
final values = row.values;
int offset = firstAvailable - values.first.index;
bool fits;
do {
fits = true;
for (final value in values) {
final int entry = offset + value.index;
if (entry >= table.length) {
// Fits
break;
}
if (table[entry] != null) {
fits = false;
break;
}
}
if (!fits) offset++;
} while (!fits);
row.offset = offset;
for (final (:index, :value) in values) {
final int tableIndex = offset + index;
while (table.length <= tableIndex) {
table.add(null);
}
assert(table[tableIndex] == null);
table[tableIndex] = value;
}
while (firstAvailable < table.length && table[firstAvailable] != null) {
firstAvailable++;
}
}
return table;
}

class Row<V extends Object> {
/// The values of the table row, represented sparsely as (index, value) tuples.
final List<({int index, V value})> values;

/// The given [values] must not be empty and should be sorted by index.
Row(this.values) {
assert(values.isNotEmpty);
assert(() {
int previous = values.first.index;
for (final value in values.skip(1)) {
if (value.index <= previous) return false;
previous = value.index;
}
return true;
}());
}

/// The selected offset of this row.
late final int offset;

int get width => values.last.index - values.first.index + 1;
int get holes => width - values.length;
int get density => (100 * values.length) ~/ width;
int get sparsity => 100 - density;
}
Loading

0 comments on commit 1679aba

Please sign in to comment.