20faaa5d94
Change-Id: Ib18f554c1076f27a3f7c0df5a36410da41a1f467 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148784 Reviewed-by: Paul Berry <paulberry@google.com> Reviewed-by: Sigmund Cherem <sigmund@google.com>
95 lines
2.3 KiB
Dart
95 lines
2.3 KiB
Dart
// Copyright (c) 2014, 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.
|
|
|
|
// @dart = 2.7
|
|
|
|
// Test that the additional runtime type support is output to the right
|
|
// Files when using deferred loading.
|
|
|
|
import 'package:async_helper/async_helper.dart';
|
|
import 'constant_emission_test_helper.dart';
|
|
|
|
void main() {
|
|
runTest() async {
|
|
Map<String, Set<String>> expectedOutputUnits = {
|
|
'ConstructedConstant(C(x=IntConstant(1)))': {'main'},
|
|
'DeferredGlobalConstant(ConstructedConstant(C(x=IntConstant(1))))':
|
|
// With CFE constants, the references are inlined, so the constant
|
|
// only occurs in main.
|
|
{},
|
|
'ConstructedConstant(C(x=IntConstant(2)))': {'lib1'},
|
|
'DeferredGlobalConstant(ConstructedConstant(C(x=IntConstant(2))))': {
|
|
'lib1'
|
|
},
|
|
'ConstructedConstant(C(x=IntConstant(3)))': {'lib1'},
|
|
'ConstructedConstant(C(x=IntConstant(4)))': {'lib2'},
|
|
'DeferredGlobalConstant(ConstructedConstant(C(x=IntConstant(4))))': {
|
|
'lib2'
|
|
},
|
|
'ConstructedConstant(C(x=IntConstant(5)))': {'lib2'},
|
|
};
|
|
await run(
|
|
MEMORY_SOURCE_FILES,
|
|
const [
|
|
OutputUnitDescriptor('memory:lib1.dart', 'm1', 'lib1'),
|
|
OutputUnitDescriptor('memory:lib2.dart', 'm2', 'lib2'),
|
|
],
|
|
expectedOutputUnits);
|
|
}
|
|
|
|
asyncTest(() async {
|
|
print('--test from kernel------------------------------------------------');
|
|
await runTest();
|
|
});
|
|
}
|
|
|
|
// Make sure that deferred constants are not inlined into the main hunk.
|
|
const Map<String, String> MEMORY_SOURCE_FILES = const {
|
|
"main.dart": r"""
|
|
import 'c.dart';
|
|
import 'lib1.dart' deferred as l1;
|
|
|
|
const c1 = const C(1);
|
|
|
|
main() async {
|
|
print(c1.x);
|
|
await l1.loadLibrary();
|
|
l1.m1();
|
|
print(l1.c2);
|
|
}
|
|
""",
|
|
"lib1.dart": """
|
|
import 'c.dart';
|
|
import 'lib2.dart' deferred as l2;
|
|
|
|
const c2 = const C(2);
|
|
const c3 = const C(3);
|
|
|
|
m1() async {
|
|
print(c2);
|
|
print(c3);
|
|
await l2.loadLibrary();
|
|
l2.m2();
|
|
print(l2.c3);
|
|
print(l2.c4);
|
|
}
|
|
""",
|
|
"lib2.dart": """
|
|
import 'c.dart';
|
|
|
|
const c3 = const C(1);
|
|
const c4 = const C(4);
|
|
const c5 = const C(5);
|
|
|
|
m2() async {
|
|
print(c3);
|
|
print(c4);
|
|
print(c5);
|
|
}
|
|
""",
|
|
"c.dart": """
|
|
class C { const C(this.x); final x; }
|
|
""",
|
|
};
|