File tree Expand file tree Collapse file tree 2 files changed +15
-2
lines changed
Shrinker.Parser/Optimizations Expand file tree Collapse file tree 2 files changed +15
-2
lines changed Original file line number Diff line number Diff line change @@ -52,7 +52,7 @@ public static bool DetectConstants(this SyntaxNode rootNode)
52
52
var uses = nodesInScope
53
53
. Where ( o => o . Token ? . Content . StartsWithVarName ( defCandidate . Name ) == true )
54
54
. ToList ( ) ;
55
- var isModified = uses . Any ( o => o . Next ? . Token ? . IsAnyOf ( SymbolOperatorToken . ModifyingOperator ) == true ) ;
55
+ var isModified = uses . Any ( IsModifiedByOperator ) ;
56
56
57
57
// ...or '++i' ?
58
58
if ( ! isModified )
@@ -93,5 +93,18 @@ public static bool DetectConstants(this SyntaxNode rootNode)
93
93
94
94
return repeatSimplifications ;
95
95
}
96
+
97
+ private static bool IsModifiedByOperator ( SyntaxNode node )
98
+ {
99
+ // Could be node[index]
100
+ if ( node . Next is SquareBracketSyntaxNode )
101
+ node = node . Next ;
102
+
103
+ // Could be node.rgb
104
+ if ( node . Next ? . Token is DotToken )
105
+ node = node . Next ? . Next ;
106
+
107
+ return node . Next ? . Token ? . IsAnyOf ( SymbolOperatorToken . ModifyingOperator ) == true ;
108
+ }
96
109
}
97
110
}
Original file line number Diff line number Diff line change @@ -2032,7 +2032,7 @@ public void CheckFullOptimizationDoesNotCorruptArrays(
2032
2032
[ Values (
2033
2033
"int main() { const int arr[2] = int[2](23, 32); return arr[0]; }" ,
2034
2034
"int main() { int arr[2]; arr[0] = 1; }" ,
2035
- "int main() { const int arr[] = int[](1); arr[0] *= 2; }" ,
2035
+ "int main() { int arr[] = int[](1); arr[0] *= 2; }" ,
2036
2036
"int main() { int arr[] = int[](1); arr[0] = arr[1] * 2; }" ,
2037
2037
"int main() { const int arr[2] = int[2](23, 32); return arr[1]; }" ) ] string expected )
2038
2038
{
You can’t perform that action at this time.
0 commit comments