[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 <alexmarkov@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
committed by
Commit Queue
parent
575566dafa
commit
87beee922a
@@ -3372,8 +3372,14 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
}
|
||||
|
||||
bool _hasNonTrivialInitializer(Field field) {
|
||||
if (field.initializer == null) return false;
|
||||
return !_isTrivialInitializer(field.initializer);
|
||||
final initializer = field.initializer;
|
||||
if (initializer == null) return false;
|
||||
if (options.emitInstanceFieldInitializers && !field.isStatic) {
|
||||
// Hot reload needs initializers for all instance fields
|
||||
// except fields initialized with null.
|
||||
return !_isNullInitializer(initializer);
|
||||
}
|
||||
return !_isTrivialInitializer(initializer);
|
||||
}
|
||||
|
||||
bool _isTrivialInitializer(Expression? initializer) {
|
||||
@@ -3392,6 +3398,11 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool _isNullInitializer(Expression? initializer) =>
|
||||
initializer is NullLiteral ||
|
||||
(initializer is ConstantExpression &&
|
||||
initializer.constant is NullConstant);
|
||||
|
||||
@override
|
||||
void visitStaticGet(StaticGet node) {
|
||||
final target = node.target;
|
||||
|
||||
Reference in New Issue
Block a user