Lines 84-118
Link Here
|
84 |
} else if (isConditionOptimizedFalse) { |
84 |
} else if (isConditionOptimizedFalse) { |
85 |
mergedInfo = falseFlowInfo.addPotentialInitializationsFrom(trueFlowInfo); |
85 |
mergedInfo = falseFlowInfo.addPotentialInitializationsFrom(trueFlowInfo); |
86 |
} else { |
86 |
} else { |
87 |
// if ((t && (v = t)) ? t : t && (v = f)) r = v; -- ok |
87 |
mergedInfo = FlowInfo.conditional(trueFlowInfo, falseFlowInfo); |
88 |
cst = this.optimizedIfTrueConstant; |
|
|
89 |
boolean isValueIfTrueOptimizedTrue = cst != null && cst != Constant.NotAConstant && cst.booleanValue() == true; |
90 |
boolean isValueIfTrueOptimizedFalse = cst != null && cst != Constant.NotAConstant && cst.booleanValue() == false; |
91 |
|
92 |
cst = this.optimizedIfFalseConstant; |
93 |
boolean isValueIfFalseOptimizedTrue = cst != null && cst != Constant.NotAConstant && cst.booleanValue() == true; |
94 |
boolean isValueIfFalseOptimizedFalse = cst != null && cst != Constant.NotAConstant && cst.booleanValue() == false; |
95 |
|
96 |
UnconditionalFlowInfo trueInfoWhenTrue = trueFlowInfo.initsWhenTrue().unconditionalCopy(); |
97 |
UnconditionalFlowInfo falseInfoWhenTrue = falseFlowInfo.initsWhenTrue().unconditionalCopy(); |
98 |
UnconditionalFlowInfo trueInfoWhenFalse = trueFlowInfo.initsWhenFalse().unconditionalInits(); |
99 |
UnconditionalFlowInfo falseInfoWhenFalse = falseFlowInfo.initsWhenFalse().unconditionalInits(); |
100 |
if (isValueIfTrueOptimizedFalse) { |
101 |
trueInfoWhenTrue.setReachMode(FlowInfo.UNREACHABLE); |
102 |
} |
103 |
if (isValueIfFalseOptimizedFalse) { |
104 |
falseInfoWhenTrue.setReachMode(FlowInfo.UNREACHABLE); |
105 |
} |
106 |
if (isValueIfTrueOptimizedTrue) { |
107 |
trueInfoWhenFalse.setReachMode(FlowInfo.UNREACHABLE); |
108 |
} |
109 |
if (isValueIfFalseOptimizedTrue) { |
110 |
falseInfoWhenFalse.setReachMode(FlowInfo.UNREACHABLE); |
111 |
} |
112 |
mergedInfo = |
113 |
FlowInfo.conditional( |
114 |
trueInfoWhenTrue.mergedWith(falseInfoWhenTrue), |
115 |
trueInfoWhenFalse.mergedWith(falseInfoWhenFalse)); |
116 |
} |
88 |
} |
117 |
this.mergedInitStateIndex = |
89 |
this.mergedInitStateIndex = |
118 |
currentScope.methodScope().recordInitializationStates(mergedInfo); |
90 |
currentScope.methodScope().recordInitializationStates(mergedInfo); |
Lines 314-321
Link Here
|
314 |
} |
286 |
} |
315 |
return this.valueIfFalse.nullStatus(flowInfo); |
287 |
return this.valueIfFalse.nullStatus(flowInfo); |
316 |
} |
288 |
} |
317 |
int ifTrueNullStatus = this.valueIfTrue.nullStatus(flowInfo), |
289 |
int ifTrueNullStatus = this.valueIfTrue.nullStatus(flowInfo.initsWhenTrue()), |
318 |
ifFalseNullStatus = this.valueIfFalse.nullStatus(flowInfo); |
290 |
ifFalseNullStatus = this.valueIfFalse.nullStatus(flowInfo.initsWhenFalse()); |
319 |
if (ifTrueNullStatus == ifFalseNullStatus) { |
291 |
if (ifTrueNullStatus == ifFalseNullStatus) { |
320 |
return ifTrueNullStatus; |
292 |
return ifTrueNullStatus; |
321 |
} |
293 |
} |