[dart2wasm] Initialize the function class early.

Subclasses of the _Function class are generated on the fly as fields
with function types are encountered. Therefore, this class must be early
in the initialization order.

Change-Id: Ia0b998c443af9f6bdb4af512f6da99e6e3767c1f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/237681
Reviewed-by: Joshua Litt <joshualitt@google.com>
Commit-Queue: Aske Simon Christensen <askesc@google.com>
This commit is contained in:
Aske Simon Christensen 2022-03-18 17:44:57 +00:00 committed by Commit Bot
parent a77ee421d9
commit 58cad00468
3 changed files with 36 additions and 0 deletions

View file

@ -315,6 +315,10 @@ class ClassInfoCollector {
void collect() {
// Create class info and Wasm structs for all classes.
initializeTop();
// Subclasses of the [_Function] class are generated on the fly as fields
// with function types are encountered. Therefore, this class must be early
// in the initialization order.
initialize(translator.functionClass);
for (Library library in translator.component.libraries) {
for (Class cls in library.classes) {
initialize(cls);

View file

@ -0,0 +1,16 @@
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// 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:expect/expect.dart";
class A {
int Function(int) f;
A(this.f);
}
main() {
A a = A((x) => x + x);
Expect.equals(a.f(2), 4);
}

View file

@ -0,0 +1,16 @@
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// 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:expect/expect.dart";
class A {
int Function(int) f;
A(this.f);
}
main() {
A a = A((x) => x + x);
Expect.equals(a.f(2), 4);
}