mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 12:48:10 +00:00
[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:
parent
a77ee421d9
commit
58cad00468
|
@ -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);
|
||||
|
|
16
tests/language/field/function_field_test.dart
Normal file
16
tests/language/field/function_field_test.dart
Normal 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);
|
||||
}
|
16
tests/language_2/field/function_field_test.dart
Normal file
16
tests/language_2/field/function_field_test.dart
Normal 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);
|
||||
}
|
Loading…
Reference in a new issue