@@ -563,7 +563,7 @@ class EdgeBuilder extends GeneralizingAstVisitor<DecoratedType>
563
563
} else {
564
564
_handleAssignment (defaultValue,
565
565
destinationType: getOrComputeElementType (node.declaredElement),
566
- canInsertChecks : false );
566
+ fromDefaultValue : true );
567
567
}
568
568
return null ;
569
569
}
@@ -1591,7 +1591,7 @@ class EdgeBuilder extends GeneralizingAstVisitor<DecoratedType>
1591
1591
Expression destinationExpression,
1592
1592
AssignmentExpression compoundOperatorInfo,
1593
1593
Expression questionAssignNode,
1594
- bool canInsertChecks = true }) {
1594
+ bool fromDefaultValue = false }) {
1595
1595
assert (
1596
1596
(destinationExpression == null ) != (destinationType == null ),
1597
1597
'Either destinationExpression or destinationType should be supplied, '
@@ -1621,12 +1621,18 @@ class EdgeBuilder extends GeneralizingAstVisitor<DecoratedType>
1621
1621
throw StateError ('No type computed for ${expression .runtimeType } '
1622
1622
'(${expression .toSource ()}) offset=${expression .offset }' );
1623
1623
}
1624
- ExpressionChecksOrigin expressionChecksOrigin;
1625
- if (canInsertChecks && ! sourceType.type.isDynamic) {
1626
- expressionChecksOrigin = ExpressionChecksOrigin (
1627
- source, expression, ExpressionChecks (expression.end));
1628
- _variables.recordExpressionChecks (
1629
- source, expression, expressionChecksOrigin);
1624
+ EdgeOrigin edgeOrigin;
1625
+ if (! sourceType.type.isDynamic) {
1626
+ if (fromDefaultValue) {
1627
+ edgeOrigin = DefaultValueOrigin (source, expression);
1628
+ } else {
1629
+ ExpressionChecksOrigin expressionChecksOrigin =
1630
+ ExpressionChecksOrigin (
1631
+ source, expression, ExpressionChecks (expression.end));
1632
+ _variables.recordExpressionChecks (
1633
+ source, expression, expressionChecksOrigin);
1634
+ edgeOrigin = expressionChecksOrigin;
1635
+ }
1630
1636
}
1631
1637
if (compoundOperatorInfo != null ) {
1632
1638
var compoundOperatorMethod = compoundOperatorInfo.staticElement;
@@ -1640,7 +1646,7 @@ class EdgeBuilder extends GeneralizingAstVisitor<DecoratedType>
1640
1646
DecoratedType compoundOperatorType =
1641
1647
getOrComputeElementType (compoundOperatorMethod);
1642
1648
assert (compoundOperatorType.positionalParameters.length > 0 );
1643
- _checkAssignment (expressionChecksOrigin ,
1649
+ _checkAssignment (edgeOrigin ,
1644
1650
source: sourceType,
1645
1651
destination: compoundOperatorType.positionalParameters[0 ],
1646
1652
hard: _postDominatedLocals.isReferenceInScope (expression));
@@ -1655,7 +1661,7 @@ class EdgeBuilder extends GeneralizingAstVisitor<DecoratedType>
1655
1661
sourceType = _dynamicType;
1656
1662
}
1657
1663
} else {
1658
- _checkAssignment (expressionChecksOrigin ,
1664
+ _checkAssignment (edgeOrigin ,
1659
1665
source: sourceType,
1660
1666
destination: destinationType,
1661
1667
hard: questionAssignNode == null &&
0 commit comments