Skip to content

Commit 87beee9

Browse files
alexmarkovCommit Queue
authored andcommitted
[dart2bytecode] Generate instance field initializers for hot reload
Hot reload needs to run instance field initializers for all newly added fields except fields initialized with null. TEST=ci (vm/cc/IsolateReload_RunNewFieldInitializers) Change-Id: I3ead726aa12b9d6c5aa515c7297deca0ddd9eb9f Cq-Include-Trybots: luci.dart.try:vm-aot-dyn-linux-debug-x64-try,vm-aot-dyn-linux-product-x64-try,vm-dyn-linux-debug-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/441861 Commit-Queue: Alexander Markov <[email protected]> Reviewed-by: Ryan Macnak <[email protected]>
1 parent 575566d commit 87beee9

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

pkg/dart2bytecode/lib/bytecode_generator.dart

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3372,8 +3372,14 @@ class BytecodeGenerator extends RecursiveVisitor {
33723372
}
33733373

33743374
bool _hasNonTrivialInitializer(Field field) {
3375-
if (field.initializer == null) return false;
3376-
return !_isTrivialInitializer(field.initializer);
3375+
final initializer = field.initializer;
3376+
if (initializer == null) return false;
3377+
if (options.emitInstanceFieldInitializers && !field.isStatic) {
3378+
// Hot reload needs initializers for all instance fields
3379+
// except fields initialized with null.
3380+
return !_isNullInitializer(initializer);
3381+
}
3382+
return !_isTrivialInitializer(initializer);
33773383
}
33783384

33793385
bool _isTrivialInitializer(Expression? initializer) {
@@ -3392,6 +3398,11 @@ class BytecodeGenerator extends RecursiveVisitor {
33923398
return false;
33933399
}
33943400

3401+
bool _isNullInitializer(Expression? initializer) =>
3402+
initializer is NullLiteral ||
3403+
(initializer is ConstantExpression &&
3404+
initializer.constant is NullConstant);
3405+
33953406
@override
33963407
void visitStaticGet(StaticGet node) {
33973408
final target = node.target;

0 commit comments

Comments
 (0)