blob: 21b0b0f26a15b038fc373cb3eea657add25d5f81 [file] [log] [blame]
# Copyright (c) 2023, 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.
# Reproduce the crash in https://github.com/flutter/flutter/issues/124369.
type: newworld
worlds:
- entry: main.dart
sources:
main.dart: |
import 'dart:ffi';
import 'lib.dart';
import 'lib2.dart';
class Foo implements Bar {
const Foo({required this.bar});
final HelperClass bar;
}
abstract class Bar {
const factory Bar({required HelperClass bar}) = Foo;
}
class HelperClass implements Finalizable {}
lib.dart: |
class FooX implements BarX {
const FooX({required this.bar});
final HelperClassX bar;
}
abstract class BarX {
const factory BarX({required HelperClassX bar}) = FooX;
}
class HelperClassX {}
lib2.dart: |
import "main.dart";
import "lib.dart";
void baz() {
Bar bar = new Bar(bar: new HelperClass());
print(bar);
BarX barX = new BarX(bar: new HelperClassX());
print(barX);
}
expectedLibraryCount: 3
# By having `worldType: updated` we force loading from "memory kernel".
- entry: main.dart
worldType: updated
compareWithFromScratch: true
expectInitializeFromDill: false
invalidate:
- main.dart
expectedLibraryCount: 3
advancedInvalidation: importsFfi
# By having `worldType: updated` we force loading from "memory kernel".
# By invalidating lib2.dart we ensure we can use the redirecting factory that
# is "from dill".
- entry: main.dart
worldType: updated
compareWithFromScratch: true
expectInitializeFromDill: false
invalidate:
- lib2.dart
expectedLibraryCount: 3
advancedInvalidation: bodiesOnly
# By *NOT* having `worldType: updated` we force loading from
# "serialized kernel".
# By invalidating lib2.dart we ensure we can use the redirecting factory that
# is "from dill".
- entry: main.dart
expectInitializeFromDill: true
compareWithFromScratch: true
invalidate:
- lib2.dart
sources:
main.dart: |
import 'dart:ffi';
import 'lib.dart';
import 'lib2.dart';
class Foo implements Bar {
const Foo({required this.bar});
final HelperClass bar;
}
abstract class Bar {
const factory Bar({required HelperClass bar}) = Foo;
}
class HelperClass implements Finalizable {}
lib.dart: |
class FooX implements BarX {
const FooX({required this.bar});
final HelperClassX bar;
}
abstract class BarX {
const factory BarX({required HelperClassX bar}) = FooX;
}
class HelperClassX {}
lib2.dart: |
import "main.dart";
import "lib.dart";
void baz() {
Bar bar = new Bar(bar: new HelperClass());
print(bar);
BarX barX = new BarX(bar: new HelperClassX());
print(barX);
}
expectedLibraryCount: 3
advancedInvalidation: bodiesOnly