diff --git a/pkg/dart2wasm/lib/code_generator.dart b/pkg/dart2wasm/lib/code_generator.dart index 8f31e77928b..bdfdb7d098e 100644 --- a/pkg/dart2wasm/lib/code_generator.dart +++ b/pkg/dart2wasm/lib/code_generator.dart @@ -4108,8 +4108,8 @@ class StaticFieldImplicitAccessorCodeGenerator extends AstCodeGenerator { final globalDefinition = translator.dartGlobals.getDefinitionForStaticField(field); if (isImplicitGetter) { - final initFunction = - translator.functions.getExistingFunction(field.fieldReference); + final initFunction = translator.functions + .getExistingFunction(field.staticFieldInitializer); _generateGetter(globalDefinition, initFunction); } else { _generateSetter(globalDefinition); diff --git a/pkg/dart2wasm/lib/deferred_load/dependencies.dart b/pkg/dart2wasm/lib/deferred_load/dependencies.dart index 838627d0292..4ce02301488 100644 --- a/pkg/dart2wasm/lib/deferred_load/dependencies.dart +++ b/pkg/dart2wasm/lib/deferred_load/dependencies.dart @@ -80,16 +80,25 @@ class DependenciesCollector { return deps; } if (node is Field) { - node.initializer?.accept(collector); - if (node.fieldReference != reference) { - collector.addReference(node.fieldReference); - } - if (node.getterReference != reference) { - collector.addReference(node.getterReference); - } - if (node.setterReference case final setterReference?) { - if (setterReference != reference) { - collector.addReference(setterReference); + if (node.isInstanceMember) { + // Instance field getters/setters have no dependencies: The field + // initializers are initialized at constructor invocation time not at + // field access time. The field itself doesn't have a storage location + // (like a static field). + assert(node.getterReference == reference || + node.hasSetter && node.setterReference == reference); + } else { + if (node.getterReference == reference) { + // A static getter may invoke the initializer and accesses the storage + // location of the field. + collector.addReference(node.fieldReference); + node.initializer?.accept(collector); + } else if (node.setterReference == reference) { + // A static setter only accesses the storage location of the field. + collector.addReference(node.fieldReference); + } else { + assert(node.fieldReference == reference); + // The field storage itself has no dependencies. } } return deps; @@ -127,7 +136,7 @@ class DependenciesCollector { deps.references.add(superReference); } for (final m in klass.members) { - if (m.isInstanceMember) { + if (m.isInstanceMember && !m.isAbstract) { if (m is Field) { if (!_devirtualizionOracle .isAlwaysStaticallyDispatchedTo(m.getterReference)) { diff --git a/pkg/dart2wasm/lib/deferred_loading.dart b/pkg/dart2wasm/lib/deferred_loading.dart index 4c9fb9e089d..4aebce852f0 100644 --- a/pkg/dart2wasm/lib/deferred_loading.dart +++ b/pkg/dart2wasm/lib/deferred_loading.dart @@ -309,7 +309,16 @@ Set findWasmRoots(CoreTypes coreTypes, Component component) { for (final klass in library.classes) { if (check(klass)) exports.add(klass.reference); for (final member in klass.members) { - if (check(member)) exports.add(member.reference); + if (check(member)) { + if (member is Field) { + exports.add(member.getterReference); + if (member.hasSetter) { + exports.add(member.setterReference!); + } + } else { + exports.add(member.reference); + } + } } } } diff --git a/pkg/dart2wasm/lib/functions.dart b/pkg/dart2wasm/lib/functions.dart index 8635e944e0e..1bc7c668dfb 100644 --- a/pkg/dart2wasm/lib/functions.dart +++ b/pkg/dart2wasm/lib/functions.dart @@ -282,7 +282,7 @@ class FunctionCollector { if (target.isImplicitSetter) { return '$memberName= implicit setter'; } - if (target.isFieldInitializer) { + if (target.isStaticFieldInitializer) { return '$memberName field initializer'; } return '$memberName implicit getter'; @@ -615,15 +615,12 @@ w.FunctionType _makeFunctionType( Member member = target.asMember; if (member is Field && !member.isInstanceMember) { - final isGetter = target.isImplicitGetter; - final isSetter = target.isImplicitSetter; - if (isGetter || isSetter) { - final fieldType = translator.translateTypeOfField(member); - if (isGetter) { - return translator.typesBuilder.defineFunction(const [], [fieldType]); - } - return translator.typesBuilder.defineFunction([fieldType], const []); + final fieldType = translator.translateTypeOfField(member); + if (target.isImplicitGetter || target.isStaticFieldInitializer) { + return translator.typesBuilder.defineFunction(const [], [fieldType]); } + assert(target.isImplicitSetter); + return translator.typesBuilder.defineFunction([fieldType], const []); } // Translate types differently for imports and exports. diff --git a/pkg/dart2wasm/lib/globals.dart b/pkg/dart2wasm/lib/globals.dart index f0fc11f983b..f055cc5c75b 100644 --- a/pkg/dart2wasm/lib/globals.dart +++ b/pkg/dart2wasm/lib/globals.dart @@ -7,6 +7,7 @@ import 'package:kernel/ast.dart'; import 'package:wasm_builder/wasm_builder.dart' as w; import 'code_generator.dart' show EagerStaticFieldInitializerCodeGenerator; +import 'reference_extensions.dart'; import 'table_based_globals.dart'; import 'translator.dart'; import 'util.dart' as util; @@ -170,7 +171,7 @@ class DartGlobals { } // Add initializer function to the compilation queue. - translator.functions.getFunction(field.fieldReference); + translator.functions.getFunction(field.staticFieldInitializer); // We will have to initialize the global lazily, meaning each access will // check if it's initialized and if not, cause initialization. diff --git a/pkg/dart2wasm/lib/modules.dart b/pkg/dart2wasm/lib/modules.dart index f031524db04..a30604f36ee 100644 --- a/pkg/dart2wasm/lib/modules.dart +++ b/pkg/dart2wasm/lib/modules.dart @@ -114,15 +114,36 @@ class ModuleOutputData { ModuleMetadata moduleForReference(Reference reference) { // Turn artificial [Reference]s used in dart2wasm to the normal Kernel AST // [Reference]s. - if (reference.node is Member && - (reference.isTypeCheckerReference || - reference.isCheckedEntryReference || - reference.isUncheckedEntryReference || - reference.isBodyReference || - reference.isInitializerReference || - reference.isConstructorBodyReference || - reference.isTearOffReference)) { - reference = reference.asMember.reference; + final node = reference.node; + if (node is Field) { + if (reference.isGetter) { + reference = node.getterReference; + } else if (reference.isSetter) { + reference = node.setterReference!; + } else if (reference.isStaticFieldInitializer) { + assert(node.isStatic); + reference = node.getterReference; + } else { + assert(reference == node.fieldReference); + } + } else if (node is Constructor) { + if (reference.isInitializerReference || + reference.isConstructorBodyReference) { + reference = node.reference; + } else { + assert(reference == node.reference); + } + } else { + node as Procedure; + if (reference.isTypeCheckerReference || + reference.isCheckedEntryReference || + reference.isUncheckedEntryReference || + reference.isBodyReference || + reference.isTearOffReference) { + reference = reference.asMember.reference; + } else { + assert(reference == reference.asMember.reference); + } } // We may have fine-grained partitioning of the application. diff --git a/pkg/dart2wasm/lib/reference_extensions.dart b/pkg/dart2wasm/lib/reference_extensions.dart index d9ee8c53a12..eb79d7a3f52 100644 --- a/pkg/dart2wasm/lib/reference_extensions.dart +++ b/pkg/dart2wasm/lib/reference_extensions.dart @@ -18,20 +18,13 @@ extension GetterSetterReference on Reference { if (member.setterReference == this) return true; if (member.isInstanceMember) { return _isUncheckedEntrySetterReference || - _isCheckedEntrySetterReference; + _isCheckedEntrySetterReference || + isTypeCheckerReference; } } return false; } - bool get isFieldInitializer { - Member member = asMember; - if (member is Field) { - if (member.fieldReference == this) return true; - } - return false; - } - bool get isGetter { Member member = asMember; return (member is Procedure && member.isGetter) || isImplicitGetter; @@ -49,6 +42,7 @@ extension GetterSetterReference on Reference { // do in plain kernel. // Use Expandos to avoid keeping the procedure alive. +final Expando _staticFieldInitializerReference = Expando(); final Expando _tearOffReference = Expando(); final Expando _typeCheckerReference = Expando(); final Expando _checkedEntryReferences = Expando(); @@ -58,6 +52,9 @@ final Expando _initializerReference = Expando(); final Expando _constructorBodyReference = Expando(); extension CustomReference on Member { + Reference get staticFieldInitializer => + _staticFieldInitializerReference[this] ??= Reference()..node = this; + Reference get tearOffReference => _tearOffReference[this] ??= Reference()..node = this; @@ -87,6 +84,9 @@ extension CustomReference on Member { } extension IsCustomReference on Reference { + bool get isStaticFieldInitializer => + _staticFieldInitializerReference[asMember] == this; + bool get isTearOffReference => _tearOffReference[asMember] == this; bool get isTypeCheckerReference => _typeCheckerReference[asMember] == this; diff --git a/pkg/dart2wasm/lib/serialization.dart b/pkg/dart2wasm/lib/serialization.dart index 035cd84ae7d..a58c60c9888 100644 --- a/pkg/dart2wasm/lib/serialization.dart +++ b/pkg/dart2wasm/lib/serialization.dart @@ -42,8 +42,9 @@ class _EntityToIdMapper { if (reference.isCheckedEntryReference) return 6; if (reference.isUncheckedEntryReference) return 7; if (reference.isBodyReference) return 8; + if (reference.isStaticFieldInitializer) return 9; assert(reference == reference.asMember.reference); - return 9; + return 10; } } @@ -88,7 +89,8 @@ class _IdToEntityMapper { if (flag == 6) return member.checkedEntryReference; if (flag == 7) return member.uncheckedEntryReference; if (flag == 8) return member.bodyReference; - assert(flag == 9); + if (flag == 9) return (member as Field).staticFieldInitializer; + assert(flag == 10); return member.reference; } } diff --git a/pkg/dart2wasm/test/deferred_loading/partition_test.dart b/pkg/dart2wasm/test/deferred_loading/partition_test.dart index 46de07ddb26..0490fd32e0a 100644 --- a/pkg/dart2wasm/test/deferred_loading/partition_test.dart +++ b/pkg/dart2wasm/test/deferred_loading/partition_test.dart @@ -75,6 +75,7 @@ Future testPartitionExpectation(String mainFile, ConstraintData? constraints, final result = await Process.run('/usr/bin/env', [ 'bash', 'pkg/dart2wasm/tool/compile_benchmark', + '--compiler-asserts', '--phases=cfe,tfa', '--enable-deferred-loading', '-o', diff --git a/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_and.constraints.txt b/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_and.constraints.txt index 39c3fc776cf..6f592be18a6 100644 --- a/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_and.constraints.txt +++ b/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_and.constraints.txt @@ -28,15 +28,12 @@ Part 0 - package:expect/expect.dart::Expect::@methods::package:expect/expect.dart::_truncateString - package:expect/expect.dart::ExpectException - package:expect/expect.dart::ExpectException::@constructors:: - - package:expect/expect.dart::ExpectException::@fields::message - - package:expect/expect.dart::ExpectException::@fields::name - package:expect/expect.dart::ExpectException::@fields::package:expect/expect.dart::_getTestName - package:expect/expect.dart::ExpectException::@getters::message - package:expect/expect.dart::ExpectException::@getters::name - package:expect/expect.dart::ExpectException::@getters::package:expect/expect.dart::_getTestName - package:expect/expect.dart::ExpectException::@methods::package:expect/expect.dart::_kEmptyString - package:expect/expect.dart::ExpectException::@methods::toString - - package:expect/expect.dart::ExpectException::@setters::package:expect/expect.dart::_getTestName - pkg/compiler/test/custom_split/data/fuse_with_and/libImport.dart::@methods::f_001_0 - pkg/compiler/test/custom_split/data/fuse_with_and/libImport.dart::@methods::f_001_1 - pkg/compiler/test/custom_split/data/fuse_with_and/libImport.dart::@methods::f_010_0 diff --git a/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_and.default.txt b/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_and.default.txt index b88f163b9aa..df710cf745e 100644 --- a/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_and.default.txt +++ b/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_and.default.txt @@ -1,4 +1,13 @@ Part 0 + ImportSet + - pkg/compiler/test/custom_split/data/fuse_with_and/lib1.dart prefix: b1 + References + - pkg/compiler/test/custom_split/data/fuse_with_and/libImport.dart::@methods::f_100_0 + - pkg/compiler/test/custom_split/data/fuse_with_and/lib_100_0.dart::@methods::g_100_0 + Constants + - StringConstant("1000") + +Part 1 ImportSet - pkg/compiler/test/custom_split/data/fuse_with_and/lib1.dart prefix: b1 - pkg/compiler/test/custom_split/data/fuse_with_and/lib2.dart prefix: b2 @@ -28,15 +37,12 @@ Part 0 - package:expect/expect.dart::Expect::@methods::package:expect/expect.dart::_truncateString - package:expect/expect.dart::ExpectException - package:expect/expect.dart::ExpectException::@constructors:: - - package:expect/expect.dart::ExpectException::@fields::message - - package:expect/expect.dart::ExpectException::@fields::name - package:expect/expect.dart::ExpectException::@fields::package:expect/expect.dart::_getTestName - package:expect/expect.dart::ExpectException::@getters::message - package:expect/expect.dart::ExpectException::@getters::name - package:expect/expect.dart::ExpectException::@getters::package:expect/expect.dart::_getTestName - package:expect/expect.dart::ExpectException::@methods::package:expect/expect.dart::_kEmptyString - package:expect/expect.dart::ExpectException::@methods::toString - - package:expect/expect.dart::ExpectException::@setters::package:expect/expect.dart::_getTestName - pkg/compiler/test/custom_split/data/fuse_with_and/libImport.dart::@methods::f_111_1 - pkg/compiler/test/custom_split/data/fuse_with_and/libImport.dart::@methods::v Constants @@ -71,15 +77,6 @@ Part 0 - StringConstant("equals") - StringConstant("radix") -Part 1 - ImportSet - - pkg/compiler/test/custom_split/data/fuse_with_and/lib1.dart prefix: b1 - References - - pkg/compiler/test/custom_split/data/fuse_with_and/libImport.dart::@methods::f_100_0 - - pkg/compiler/test/custom_split/data/fuse_with_and/lib_100_0.dart::@methods::g_100_0 - Constants - - StringConstant("1000") - Part 2 ImportSet - pkg/compiler/test/custom_split/data/fuse_with_and/lib2.dart prefix: b2 diff --git a/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_or.constraints.txt b/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_or.constraints.txt index ac170704617..8d35751c5e4 100644 --- a/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_or.constraints.txt +++ b/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_or.constraints.txt @@ -28,15 +28,12 @@ Part 0 - package:expect/expect.dart::Expect::@methods::package:expect/expect.dart::_truncateString - package:expect/expect.dart::ExpectException - package:expect/expect.dart::ExpectException::@constructors:: - - package:expect/expect.dart::ExpectException::@fields::message - - package:expect/expect.dart::ExpectException::@fields::name - package:expect/expect.dart::ExpectException::@fields::package:expect/expect.dart::_getTestName - package:expect/expect.dart::ExpectException::@getters::message - package:expect/expect.dart::ExpectException::@getters::name - package:expect/expect.dart::ExpectException::@getters::package:expect/expect.dart::_getTestName - package:expect/expect.dart::ExpectException::@methods::package:expect/expect.dart::_kEmptyString - package:expect/expect.dart::ExpectException::@methods::toString - - package:expect/expect.dart::ExpectException::@setters::package:expect/expect.dart::_getTestName - pkg/compiler/test/custom_split/data/fuse_with_or/libImport.dart::@methods::f_001_0 - pkg/compiler/test/custom_split/data/fuse_with_or/libImport.dart::@methods::f_001_1 - pkg/compiler/test/custom_split/data/fuse_with_or/libImport.dart::@methods::f_011_0 diff --git a/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_or.default.txt b/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_or.default.txt index dbe351233a1..f2b524903b2 100644 --- a/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_or.default.txt +++ b/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/fuse_with_or.default.txt @@ -1,4 +1,13 @@ Part 0 + ImportSet + - pkg/compiler/test/custom_split/data/fuse_with_or/lib1.dart prefix: b1 + References + - pkg/compiler/test/custom_split/data/fuse_with_or/libImport.dart::@methods::f_100_0 + - pkg/compiler/test/custom_split/data/fuse_with_or/lib_100_0.dart::@methods::g_100_0 + Constants + - StringConstant("1000") + +Part 1 ImportSet - pkg/compiler/test/custom_split/data/fuse_with_or/lib1.dart prefix: b1 - pkg/compiler/test/custom_split/data/fuse_with_or/lib2.dart prefix: b2 @@ -28,15 +37,12 @@ Part 0 - package:expect/expect.dart::Expect::@methods::package:expect/expect.dart::_truncateString - package:expect/expect.dart::ExpectException - package:expect/expect.dart::ExpectException::@constructors:: - - package:expect/expect.dart::ExpectException::@fields::message - - package:expect/expect.dart::ExpectException::@fields::name - package:expect/expect.dart::ExpectException::@fields::package:expect/expect.dart::_getTestName - package:expect/expect.dart::ExpectException::@getters::message - package:expect/expect.dart::ExpectException::@getters::name - package:expect/expect.dart::ExpectException::@getters::package:expect/expect.dart::_getTestName - package:expect/expect.dart::ExpectException::@methods::package:expect/expect.dart::_kEmptyString - package:expect/expect.dart::ExpectException::@methods::toString - - package:expect/expect.dart::ExpectException::@setters::package:expect/expect.dart::_getTestName - pkg/compiler/test/custom_split/data/fuse_with_or/libImport.dart::@methods::f_111_1 - pkg/compiler/test/custom_split/data/fuse_with_or/libImport.dart::@methods::v Constants @@ -71,15 +77,6 @@ Part 0 - StringConstant("equals") - StringConstant("radix") -Part 1 - ImportSet - - pkg/compiler/test/custom_split/data/fuse_with_or/lib1.dart prefix: b1 - References - - pkg/compiler/test/custom_split/data/fuse_with_or/libImport.dart::@methods::f_100_0 - - pkg/compiler/test/custom_split/data/fuse_with_or/lib_100_0.dart::@methods::g_100_0 - Constants - - StringConstant("1000") - Part 2 ImportSet - pkg/compiler/test/custom_split/data/fuse_with_or/lib2.dart prefix: b2 diff --git a/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/just_fuse.constraints.txt b/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/just_fuse.constraints.txt index 063d2f83cb3..5abb67ecad4 100644 --- a/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/just_fuse.constraints.txt +++ b/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/just_fuse.constraints.txt @@ -1,4 +1,19 @@ Part 0 + ImportSet + - pkg/compiler/test/custom_split/data/just_fuse/lib1.dart prefix: b1 + - pkg/compiler/test/custom_split/data/just_fuse/lib2.dart prefix: b2 + References + - pkg/compiler/test/custom_split/data/just_fuse/libImport.dart::@methods::f_010_0 + - pkg/compiler/test/custom_split/data/just_fuse/libImport.dart::@methods::f_100_0 + - pkg/compiler/test/custom_split/data/just_fuse/libImport.dart::@methods::f_110_0 + - pkg/compiler/test/custom_split/data/just_fuse/lib_010_0.dart::@methods::g_010_0 + - pkg/compiler/test/custom_split/data/just_fuse/lib_100_0.dart::@methods::g_100_0 + Constants + - StringConstant("0100") + - StringConstant("1000") + - StringConstant("1100") + +Part 1 ImportSet - pkg/compiler/test/custom_split/data/just_fuse/lib1.dart prefix: b1 - pkg/compiler/test/custom_split/data/just_fuse/lib2.dart prefix: b2 @@ -28,15 +43,12 @@ Part 0 - package:expect/expect.dart::Expect::@methods::package:expect/expect.dart::_truncateString - package:expect/expect.dart::ExpectException - package:expect/expect.dart::ExpectException::@constructors:: - - package:expect/expect.dart::ExpectException::@fields::message - - package:expect/expect.dart::ExpectException::@fields::name - package:expect/expect.dart::ExpectException::@fields::package:expect/expect.dart::_getTestName - package:expect/expect.dart::ExpectException::@getters::message - package:expect/expect.dart::ExpectException::@getters::name - package:expect/expect.dart::ExpectException::@getters::package:expect/expect.dart::_getTestName - package:expect/expect.dart::ExpectException::@methods::package:expect/expect.dart::_kEmptyString - package:expect/expect.dart::ExpectException::@methods::toString - - package:expect/expect.dart::ExpectException::@setters::package:expect/expect.dart::_getTestName - pkg/compiler/test/custom_split/data/just_fuse/libImport.dart::@methods::f_011_1 - pkg/compiler/test/custom_split/data/just_fuse/libImport.dart::@methods::f_101_1 - pkg/compiler/test/custom_split/data/just_fuse/libImport.dart::@methods::f_111_1 @@ -75,21 +87,6 @@ Part 0 - StringConstant("equals") - StringConstant("radix") -Part 1 - ImportSet - - pkg/compiler/test/custom_split/data/just_fuse/lib1.dart prefix: b1 - - pkg/compiler/test/custom_split/data/just_fuse/lib2.dart prefix: b2 - References - - pkg/compiler/test/custom_split/data/just_fuse/libImport.dart::@methods::f_010_0 - - pkg/compiler/test/custom_split/data/just_fuse/libImport.dart::@methods::f_100_0 - - pkg/compiler/test/custom_split/data/just_fuse/libImport.dart::@methods::f_110_0 - - pkg/compiler/test/custom_split/data/just_fuse/lib_010_0.dart::@methods::g_010_0 - - pkg/compiler/test/custom_split/data/just_fuse/lib_100_0.dart::@methods::g_100_0 - Constants - - StringConstant("0100") - - StringConstant("1000") - - StringConstant("1100") - Part 2 ImportSet - pkg/compiler/test/custom_split/data/just_fuse/lib3.dart prefix: b3 diff --git a/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/just_fuse.default.txt b/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/just_fuse.default.txt index a50011672b5..05cd8aa3407 100644 --- a/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/just_fuse.default.txt +++ b/pkg/dart2wasm/test/deferred_loading/partition_tests_dart2js/custom_split/just_fuse.default.txt @@ -1,4 +1,13 @@ Part 0 + ImportSet + - pkg/compiler/test/custom_split/data/just_fuse/lib1.dart prefix: b1 + References + - pkg/compiler/test/custom_split/data/just_fuse/libImport.dart::@methods::f_100_0 + - pkg/compiler/test/custom_split/data/just_fuse/lib_100_0.dart::@methods::g_100_0 + Constants + - StringConstant("1000") + +Part 1 ImportSet - pkg/compiler/test/custom_split/data/just_fuse/lib1.dart prefix: b1 - pkg/compiler/test/custom_split/data/just_fuse/lib2.dart prefix: b2 @@ -28,15 +37,12 @@ Part 0 - package:expect/expect.dart::Expect::@methods::package:expect/expect.dart::_truncateString - package:expect/expect.dart::ExpectException - package:expect/expect.dart::ExpectException::@constructors:: - - package:expect/expect.dart::ExpectException::@fields::message - - package:expect/expect.dart::ExpectException::@fields::name - package:expect/expect.dart::ExpectException::@fields::package:expect/expect.dart::_getTestName - package:expect/expect.dart::ExpectException::@getters::message - package:expect/expect.dart::ExpectException::@getters::name - package:expect/expect.dart::ExpectException::@getters::package:expect/expect.dart::_getTestName - package:expect/expect.dart::ExpectException::@methods::package:expect/expect.dart::_kEmptyString - package:expect/expect.dart::ExpectException::@methods::toString - - package:expect/expect.dart::ExpectException::@setters::package:expect/expect.dart::_getTestName - pkg/compiler/test/custom_split/data/just_fuse/libImport.dart::@methods::f_111_1 - pkg/compiler/test/custom_split/data/just_fuse/libImport.dart::@methods::v Constants @@ -71,15 +77,6 @@ Part 0 - StringConstant("equals") - StringConstant("radix") -Part 1 - ImportSet - - pkg/compiler/test/custom_split/data/just_fuse/lib1.dart prefix: b1 - References - - pkg/compiler/test/custom_split/data/just_fuse/libImport.dart::@methods::f_100_0 - - pkg/compiler/test/custom_split/data/just_fuse/lib_100_0.dart::@methods::g_100_0 - Constants - - StringConstant("1000") - Part 2 ImportSet - pkg/compiler/test/custom_split/data/just_fuse/lib2.dart prefix: b2 diff --git a/pkg/dart2wasm/test/ir_tests/deferred.fine_grained.wat b/pkg/dart2wasm/test/ir_tests/deferred.fine_grained.wat index 51d5fc21efa..be6b7aaa7f9 100644 --- a/pkg/dart2wasm/test/ir_tests/deferred.fine_grained.wat +++ b/pkg/dart2wasm/test/ir_tests/deferred.fine_grained.wat @@ -12,9 +12,14 @@ (type $type0 <...>) (type $_AsyncSuspendState <...>) ) + (func $"wasm:js-string.charCodeAt (import)" (import "wasm:js-string" "charCodeAt") (param externref i32) (result i32)) + (@binaryen.removable.if.unused) + (func $"wasm:js-string.equals (import)" (import "wasm:js-string" "equals") (param externref externref) (result i32)) + (@binaryen.removable.if.unused) + (func $"wasm:js-string.length (import)" (import "wasm:js-string" "length") (param externref) (result i32)) (global $".FooConst0(" (import "" "FooConst0(") (ref extern)) (global $".FooConstBase(" (import "" "FooConstBase(") (ref extern)) - (table $cross-module-funcs-0 (export "cross-module-funcs-0") 34 funcref) + (table $cross-module-funcs-0 (export "cross-module-funcs-0") 46 funcref) (global $"\")\"" (ref $JSExternWrapper) <...>) (global $"\"FooConst0(\"" (ref $JSExternWrapper) (i32.const 108) @@ -46,12 +51,21 @@ (set 10 (ref.func $jsExceptionStackTrace)) (set 14 (ref.func $print)) (set 15 (ref.func $JSStringImpl._interpolate3)) - (set 16 (ref.func $"fooGlobal0 implicit getter")) - (set 17 (ref.func $"foo0Code ")) - (set 26 (ref.func $"_throwIndexError ")) - (set 27 (ref.func $FooConstBase.doit)) - (set 28 (ref.func $GrowableList._withData)) - (set 29 (ref.func $int.parse))) + (set 16 (ref.func $"foo0Code ")) + (set 21 (ref.func $"_throwIndexError ")) + (set 22 (ref.func $FooConstBase.doit)) + (set 23 (ref.func $GrowableList._withData)) + (set 26 (ref.func $"wasm:js-string.length (import)")) + (set 27 (ref.func $"wasm:js-string.charCodeAt (import)")) + (set 28 (ref.func $IntegerDivisionByZeroException)) + (set 29 (ref.func $"Error._throwWithCurrentStackTrace ")) + (set 30 (ref.func $"wasm:js-string.equals (import)")) + (set 31 (ref.func $JSStringImpl.substring)) + (set 32 (ref.func $JSStringImpl.+)) + (set 33 (ref.func $JSStringImpl._interpolate)) + (set 34 (ref.func $JSStringImpl.fromRefUnchecked)) + (set 35 (ref.func $JSStringImpl._interpolate2))) + (func $Error._throwWithCurrentStackTrace (param $var0 (ref $#Top)) (result (ref none)) <...>) (func $_throwIndexError (param $var0 i64) (param $var1 i64) (param $var2 (ref null $JSExternWrapper)) (result (ref none)) <...>) (func $"foo0Code " (param $var0 (ref null $#Top)) (result (ref null $#Top)) global.get $FooConst0 @@ -67,7 +81,6 @@ global.set $fooGlobal0 ref.null none ) - (func $fooGlobal0 implicit getter (result (ref $#Top)) <...>) (func $FooConst0.doit (param $var0 (ref $Object)) (param $var1 (ref null $#Top)) (result (ref null $#Top)) global.get $"\"FooConst0(\"" local.get $var1 @@ -91,7 +104,13 @@ ref.null none ) (func $GrowableList._withData (param $var0 (ref $_Type)) (param $var1 (ref $Array)) (result (ref $WasmListBase)) <...>) + (func $IntegerDivisionByZeroException (result (ref $Object)) <...>) + (func $JSStringImpl.+ (param $var0 (ref $JSExternWrapper)) (param $var1 (ref $JSExternWrapper)) (result (ref $JSExternWrapper)) <...>) + (func $JSStringImpl._interpolate (param $var0 (ref $Array)) (result (ref $JSExternWrapper)) <...>) + (func $JSStringImpl._interpolate2 (param $var0 (ref null $#Top)) (param $var1 (ref null $#Top)) (result (ref $JSExternWrapper)) <...>) (func $JSStringImpl._interpolate3 (param $var0 (ref null $#Top)) (param $var1 (ref null $#Top)) (param $var2 (ref null $#Top)) (result (ref $JSExternWrapper)) <...>) + (func $JSStringImpl.fromRefUnchecked (param $var0 externref) (result (ref $JSExternWrapper)) <...>) + (func $JSStringImpl.substring (param $var0 (ref $JSExternWrapper)) (param $var1 i64) (param $var2 i64) (result (ref $JSExternWrapper)) <...>) (func $_AsyncSuspendState._complete (param $var0 (ref $_AsyncSuspendState)) (param $var1 (ref null $#Top)) (result (ref null $#Top)) <...>) (func $_AsyncSuspendState._completeError (param $var0 (ref $_AsyncSuspendState)) (param $var1 (ref $#Top)) (param $var2 (ref $Object)) (result (ref null $#Top)) <...>) (func $_awaitHelper (param $var0 (ref $_AsyncSuspendState)) (param $var1 (ref $_Future)) (result (ref null $#Top)) <...>) @@ -99,7 +118,6 @@ (func $_newAsyncSuspendState (param $var0 (ref $type0)) (param $var1 structref) (param $var2 (ref $_Future)) (result (ref $_AsyncSuspendState)) <...>) (func $boxJsException (param $var0 externref) (result (ref $#Top)) <...>) (func $checkLibraryIsLoadedFromLoadId (param $var0 i64) (result i32) <...>) - (func $int.parse (param $var0 (ref $JSExternWrapper)) (result i64) <...>) (func $jsExceptionStackTrace (param $var0 externref) (result (ref $JavaScriptStack)) <...>) (func $loadLibraryFromLoadId (param $var0 i64) (result (ref $_Future)) <...>) (func $print (param $var0 (ref null $#Top)) (result (ref null $#Top)) <...>) diff --git a/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module1.wat b/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module1.wat index c4db2f55236..83e6c2046ec 100644 --- a/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module1.wat +++ b/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module1.wat @@ -7,7 +7,7 @@ (global $".FooConst1(" (import "" "FooConst1(") (ref extern)) (global $"\")\"" (import "module0" "global4") (ref $JSExternWrapper)) (global $1 (import "module0" "global8") (ref $BoxedInt)) - (table $module0.cross-module-funcs-0 (import "module0" "cross-module-funcs-0") 34 funcref) + (table $module0.cross-module-funcs-0 (import "module0" "cross-module-funcs-0") 46 funcref) (global $"\"FooConst1(\"" (ref $JSExternWrapper) (i32.const 108) (i32.const 0) @@ -22,9 +22,10 @@ (ref.null none)) (elem $module0.cross-module-funcs-0 (set 0 (ref.func $foo1)) - (set 18 (ref.func $"fooGlobal1 implicit getter")) - (set 19 (ref.func $"foo1Code ")) - (set 30 (ref.func $0))) + (set 17 (ref.func $"foo1Code ")) + (set 40 (ref.func $0)) + (set 41 (ref.func $1)) + (set 42 (ref.func $2))) (func $"foo1Code " (param $var0 (ref null $#Top)) (result (ref null $#Top)) global.get $FooConst1 i32.const 14 @@ -42,7 +43,8 @@ global.set $fooGlobal1 ref.null none ) - (func $fooGlobal1 implicit getter (result (ref $#Top)) <...>) + (func $null (result (ref null $#Top)) <...>) + (func $null (param $var0 (ref null $#Top)) <...>) (func $null (result (ref $Object)) <...>) (func $FooConst1.doit (param $var0 (ref $Object)) (param $var1 (ref null $#Top)) (result (ref null $#Top)) global.get $"\"FooConst1(\"" @@ -55,7 +57,7 @@ drop local.get $var0 local.get $var1 - i32.const 27 + i32.const 22 call_indirect $module0.cross-module-funcs-0 (param (ref $Object) (ref null $#Top)) (result (ref null $#Top)) drop ref.null none diff --git a/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module2.wat b/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module2.wat index 3f363ee19a1..be2c689c65c 100644 --- a/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module2.wat +++ b/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module2.wat @@ -6,8 +6,8 @@ (type $_Future <...>) (global $".FooConst2(" (import "" "FooConst2(") (ref extern)) (global $"\")\"" (import "module0" "global4") (ref $JSExternWrapper)) - (global $2 (import "module0" "global12") (ref $BoxedInt)) - (table $module0.cross-module-funcs-0 (import "module0" "cross-module-funcs-0") 34 funcref) + (global $2 (import "module0" "global19") (ref $BoxedInt)) + (table $module0.cross-module-funcs-0 (import "module0" "cross-module-funcs-0") 46 funcref) (global $"\"FooConst2(\"" (ref $JSExternWrapper) (i32.const 108) (i32.const 0) @@ -22,9 +22,10 @@ (ref.null none)) (elem $module0.cross-module-funcs-0 (set 6 (ref.func $foo2)) - (set 20 (ref.func $"fooGlobal2 implicit getter")) - (set 21 (ref.func $"foo2Code ")) - (set 31 (ref.func $0))) + (set 18 (ref.func $"foo2Code ")) + (set 38 (ref.func $0)) + (set 39 (ref.func $1)) + (set 43 (ref.func $2))) (func $"foo2Code " (param $var0 (ref null $#Top)) (result (ref null $#Top)) global.get $FooConst2 i32.const 14 @@ -42,7 +43,8 @@ global.set $fooGlobal2 ref.null none ) - (func $fooGlobal2 implicit getter (result (ref $#Top)) <...>) + (func $null (result (ref null $#Top)) <...>) + (func $null (param $var0 (ref null $#Top)) <...>) (func $null (result (ref $Object)) <...>) (func $FooConst2.doit (param $var0 (ref $Object)) (param $var1 (ref null $#Top)) (result (ref null $#Top)) global.get $"\"FooConst2(\"" @@ -55,7 +57,7 @@ drop local.get $var0 local.get $var1 - i32.const 27 + i32.const 22 call_indirect $module0.cross-module-funcs-0 (param (ref $Object) (ref null $#Top)) (result (ref null $#Top)) drop ref.null none diff --git a/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module3.wat b/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module3.wat index 8d6f9e556f0..b30dfe7fffa 100644 --- a/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module3.wat +++ b/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module3.wat @@ -6,8 +6,8 @@ (type $_Future <...>) (global $".FooConst3(" (import "" "FooConst3(") (ref extern)) (global $"\")\"" (import "module0" "global4") (ref $JSExternWrapper)) - (global $3 (import "module0" "global11") (ref $BoxedInt)) - (table $module0.cross-module-funcs-0 (import "module0" "cross-module-funcs-0") 34 funcref) + (global $3 (import "module0" "global18") (ref $BoxedInt)) + (table $module0.cross-module-funcs-0 (import "module0" "cross-module-funcs-0") 46 funcref) (global $"\"FooConst3(\"" (ref $JSExternWrapper) (i32.const 108) (i32.const 0) @@ -22,9 +22,10 @@ (ref.null none)) (elem $module0.cross-module-funcs-0 (set 11 (ref.func $foo3)) - (set 22 (ref.func $"fooGlobal3 implicit getter")) - (set 23 (ref.func $"foo3Code ")) - (set 32 (ref.func $0))) + (set 19 (ref.func $"foo3Code ")) + (set 36 (ref.func $0)) + (set 37 (ref.func $1)) + (set 44 (ref.func $2))) (func $"foo3Code " (param $var0 (ref null $#Top)) (result (ref null $#Top)) global.get $FooConst3 i32.const 14 @@ -42,7 +43,8 @@ global.set $fooGlobal3 ref.null none ) - (func $fooGlobal3 implicit getter (result (ref $#Top)) <...>) + (func $null (result (ref null $#Top)) <...>) + (func $null (param $var0 (ref null $#Top)) <...>) (func $null (result (ref $Object)) <...>) (func $FooConst3.doit (param $var0 (ref $Object)) (param $var1 (ref null $#Top)) (result (ref null $#Top)) global.get $"\"FooConst3(\"" @@ -55,7 +57,7 @@ drop local.get $var0 local.get $var1 - i32.const 27 + i32.const 22 call_indirect $module0.cross-module-funcs-0 (param (ref $Object) (ref null $#Top)) (result (ref null $#Top)) drop ref.null none diff --git a/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module4.wat b/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module4.wat index 9660efc723f..58e48dca82d 100644 --- a/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module4.wat +++ b/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module4.wat @@ -6,8 +6,8 @@ (type $_Future <...>) (global $".FooConst4(" (import "" "FooConst4(") (ref extern)) (global $"\")\"" (import "module0" "global4") (ref $JSExternWrapper)) - (global $4 (import "module0" "global10") (ref $BoxedInt)) - (table $module0.cross-module-funcs-0 (import "module0" "cross-module-funcs-0") 34 funcref) + (global $4 (import "module0" "global17") (ref $BoxedInt)) + (table $module0.cross-module-funcs-0 (import "module0" "cross-module-funcs-0") 46 funcref) (global $"\"FooConst4(\"" (ref $JSExternWrapper) (i32.const 108) (i32.const 0) @@ -22,9 +22,10 @@ (ref.null none)) (elem $module0.cross-module-funcs-0 (set 12 (ref.func $foo4)) - (set 24 (ref.func $"fooGlobal4 implicit getter")) - (set 25 (ref.func $"foo4Code ")) - (set 33 (ref.func $0))) + (set 20 (ref.func $"foo4Code ")) + (set 24 (ref.func $0)) + (set 25 (ref.func $1)) + (set 45 (ref.func $2))) (func $"foo4Code " (param $var0 (ref null $#Top)) (result (ref null $#Top)) global.get $FooConst4 i32.const 14 @@ -42,7 +43,8 @@ global.set $fooGlobal4 ref.null none ) - (func $fooGlobal4 implicit getter (result (ref $#Top)) <...>) + (func $null (result (ref null $#Top)) <...>) + (func $null (param $var0 (ref null $#Top)) <...>) (func $null (result (ref $Object)) <...>) (func $FooConst4.doit (param $var0 (ref $Object)) (param $var1 (ref null $#Top)) (result (ref null $#Top)) global.get $"\"FooConst4(\"" @@ -55,7 +57,7 @@ drop local.get $var0 local.get $var1 - i32.const 27 + i32.const 22 call_indirect $module0.cross-module-funcs-0 (param (ref $Object) (ref null $#Top)) (result (ref null $#Top)) drop ref.null none diff --git a/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module5.wat b/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module5.wat index b3e8f2f3f35..5c01ee69d41 100644 --- a/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module5.wat +++ b/pkg/dart2wasm/test/ir_tests/deferred.fine_grained_module5.wat @@ -11,10 +11,17 @@ (global $".FooConst5(" (import "" "FooConst5(") (ref extern)) (global $"\")\"" (import "module0" "global4") (ref $JSExternWrapper)) (global $"\"[]\"" (import "module0" "global6") (ref $JSExternWrapper)) + (global $1 (import "module0" "global8") (ref $BoxedInt)) (global $5 (import "module0" "global5") (ref $BoxedInt)) (global $FooConst0 (import "module0" "global7") (ref $Object)) - (table $module0.cross-module-funcs-0 (import "module0" "cross-module-funcs-0") 34 funcref) + (global $fooGlobal0 (import "module0" "global16") (ref null $#Top)) + (table $module0.cross-module-funcs-0 (import "module0" "cross-module-funcs-0") 46 funcref) (table $module0.dispatch0 (import "module0" "dispatch0") 695 funcref) + (global $"\"0\"" (ref $JSExternWrapper) <...>) + (global $"\"1\"" (ref $JSExternWrapper) <...>) + (global $"\"2\"" (ref $JSExternWrapper) <...>) + (global $"\"3\"" (ref $JSExternWrapper) <...>) + (global $"\"4\"" (ref $JSExternWrapper) <...>) (global $"\"FooConst5(\"" (ref $JSExternWrapper) (i32.const 108) (i32.const 0) @@ -51,52 +58,120 @@ drop global.get $5 global.set $fooGlobal5 + block $label0 (result (ref $#Top)) + global.get $fooGlobal0 + br_on_non_null $label0 + global.get $1 + global.get $"\"1\"" + global.get $"\"0\"" + call $int.parse + i64.const 1 + i64.eq + select (ref $#Top) + local.tee $var0 + global.set $fooGlobal0 + local.get $var0 + end $label0 i32.const 16 - call_indirect $module0.cross-module-funcs-0 (result (ref $#Top)) + call_indirect $module0.cross-module-funcs-0 (param (ref null $#Top)) (result (ref null $#Top)) + drop + block $label1 (result (ref $#Top)) + i32.const 40 + call_indirect $module0.cross-module-funcs-0 (result (ref null $#Top)) + br_on_non_null $label1 + global.get $1 + global.get $"\"1\"" + global.get $"\"1\"" + call $int.parse + i64.const 1 + i64.eq + select (ref $#Top) + local.tee $var0 + i32.const 41 + call_indirect $module0.cross-module-funcs-0 (param (ref null $#Top)) + local.get $var0 + end $label1 i32.const 17 call_indirect $module0.cross-module-funcs-0 (param (ref null $#Top)) (result (ref null $#Top)) drop + block $label2 (result (ref $#Top)) + i32.const 38 + call_indirect $module0.cross-module-funcs-0 (result (ref null $#Top)) + br_on_non_null $label2 + global.get $1 + global.get $"\"1\"" + global.get $"\"2\"" + call $int.parse + i64.const 1 + i64.eq + select (ref $#Top) + local.tee $var0 + i32.const 39 + call_indirect $module0.cross-module-funcs-0 (param (ref null $#Top)) + local.get $var0 + end $label2 i32.const 18 - call_indirect $module0.cross-module-funcs-0 (result (ref $#Top)) + call_indirect $module0.cross-module-funcs-0 (param (ref null $#Top)) (result (ref null $#Top)) + drop + block $label3 (result (ref $#Top)) + i32.const 36 + call_indirect $module0.cross-module-funcs-0 (result (ref null $#Top)) + br_on_non_null $label3 + global.get $1 + global.get $"\"1\"" + global.get $"\"3\"" + call $int.parse + i64.const 1 + i64.eq + select (ref $#Top) + local.tee $var0 + i32.const 37 + call_indirect $module0.cross-module-funcs-0 (param (ref null $#Top)) + local.get $var0 + end $label3 i32.const 19 call_indirect $module0.cross-module-funcs-0 (param (ref null $#Top)) (result (ref null $#Top)) drop + block $label4 (result (ref $#Top)) + i32.const 24 + call_indirect $module0.cross-module-funcs-0 (result (ref null $#Top)) + br_on_non_null $label4 + global.get $1 + global.get $"\"1\"" + global.get $"\"4\"" + call $int.parse + i64.const 1 + i64.eq + select (ref $#Top) + local.tee $var0 + i32.const 25 + call_indirect $module0.cross-module-funcs-0 (param (ref null $#Top)) + local.get $var0 + end $label4 i32.const 20 - call_indirect $module0.cross-module-funcs-0 (result (ref $#Top)) - i32.const 21 call_indirect $module0.cross-module-funcs-0 (param (ref null $#Top)) (result (ref null $#Top)) drop - i32.const 22 - call_indirect $module0.cross-module-funcs-0 (result (ref $#Top)) - i32.const 23 - call_indirect $module0.cross-module-funcs-0 (param (ref null $#Top)) (result (ref null $#Top)) - drop - i32.const 24 - call_indirect $module0.cross-module-funcs-0 (result (ref $#Top)) - i32.const 25 - call_indirect $module0.cross-module-funcs-0 (param (ref null $#Top)) (result (ref null $#Top)) - drop - block $label0 (result (ref $WasmListBase)) + block $label5 (result (ref $WasmListBase)) global.get $allFooConstants - br_on_non_null $label0 + br_on_non_null $label5 global.get $_InterfaceType global.get $FooConst0 - i32.const 30 + i32.const 42 call_indirect $module0.cross-module-funcs-0 (result (ref $Object)) - i32.const 31 + i32.const 43 call_indirect $module0.cross-module-funcs-0 (result (ref $Object)) - i32.const 32 + i32.const 44 call_indirect $module0.cross-module-funcs-0 (result (ref $Object)) - i32.const 33 + i32.const 45 call_indirect $module0.cross-module-funcs-0 (result (ref $Object)) global.get $FooConst5 array.new_fixed $Array 6 - i32.const 28 + i32.const 23 call_indirect $module0.cross-module-funcs-0 (param (ref $_Type) (ref $Array)) (result (ref $WasmListBase)) local.tee $var1 global.set $allFooConstants local.get $var1 - end $label0 + end $label5 local.tee $var1 struct.get $WasmListBase $_length local.tee $var3 @@ -105,7 +180,7 @@ i64.const 0 local.get $var3 global.get $"\"[]\"" - i32.const 26 + i32.const 21 call_indirect $module0.cross-module-funcs-0 (param i64 i64 (ref null $JSExternWrapper)) (result (ref none)) unreachable end @@ -135,10 +210,11 @@ drop local.get $var0 local.get $var1 - i32.const 27 + i32.const 22 call_indirect $module0.cross-module-funcs-0 (param (ref $Object) (ref null $#Top)) (result (ref null $#Top)) drop ref.null none ) (func $foo5 (result (ref $_Future)) <...>) + (func $int.parse (param $var0 (ref $JSExternWrapper)) (result i64) <...>) ) \ No newline at end of file