Index: pkg/compiler/lib/src/ssa/builder_kernel.dart |
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart |
index 45b6e262d72022a2eafbec18353ced028a12a2c2..0c48c62aa12213f45f47c9138b9cd4bb01970d46 100644 |
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart |
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart |
@@ -2027,35 +2027,25 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder { |
// Invoke the getter |
_pushStaticInvocation(getter, const <HInstruction>[], |
_typeInferenceMap.getReturnTypeOf(getter)); |
- } else if (staticTarget is ir.Field && |
- (staticTarget.isConst || |
- staticTarget.isFinal && !_isLazyStatic(staticTarget))) { |
- ConstantValue value = _elementMap.getConstantValue( |
- staticTarget.initializer, |
- requireConstant: staticTarget.isConst); |
+ } else if (staticTarget is ir.Field) { |
+ FieldEntity field = _elementMap.getField(staticTarget); |
+ ConstantValue value = _elementMap.getFieldConstantValue(staticTarget); |
if (value != null) { |
- stack.add(graph.addConstant(value, closedWorld)); |
+ if (!field.isAssignable) { |
+ stack.add(graph.addConstant(value, closedWorld)); |
+ } else { |
+ push(new HStatic(field, _typeInferenceMap.getInferredTypeOf(field))); |
+ } |
} else { |
- FieldEntity field = _elementMap.getField(staticTarget); |
push( |
new HLazyStatic(field, _typeInferenceMap.getInferredTypeOf(field))); |
} |
} else { |
- if (_isLazyStatic(staticTarget)) { |
- FieldEntity field = _elementMap.getField(staticTarget); |
- push( |
- new HLazyStatic(field, _typeInferenceMap.getInferredTypeOf(field))); |
- } else { |
- MemberEntity member = _elementMap.getMember(staticTarget); |
- push(new HStatic(member, _typeInferenceMap.getInferredTypeOf(member))); |
- } |
+ MemberEntity member = _elementMap.getMember(staticTarget); |
+ push(new HStatic(member, _typeInferenceMap.getInferredTypeOf(member))); |
} |
} |
- bool _isLazyStatic(ir.Member target) { |
- return astAdapter.isLazyStatic(target); |
- } |
- |
@override |
void visitStaticSet(ir.StaticSet staticSet) { |
staticSet.value.accept(this); |