@@ -323,34 +323,38 @@ public static bool PerformArithmetic(this SyntaxNode rootNode)
323323 {
324324 // Find the second vector.
325325 var rhsVectorNode = symbolNode . Next ;
326- if ( rhsVectorNode ? . Token is TypeToken t && t . IsVector ( ) )
327- {
328- var rhsVectorBrackets = rhsVectorNode . Next as RoundBracketSyntaxNode ;
329- if ( IsSafeToPerformMath ( vectorNode , symbol , rhsVectorNode ) )
330- {
331- // Ensure both brackets have the same number of elements.
332- var lhsCsv = brackets . GetCsv ( ) . ToList ( ) ;
333- var rhsCsv = rhsVectorBrackets . GetCsv ( ) . ToList ( ) ;
334- while ( lhsCsv . Count < rhsCsv . Count )
335- lhsCsv . Add ( new [ ] { lhsCsv . First ( ) . Single ( ) . Clone ( ) } ) ;
336- while ( rhsCsv . Count < lhsCsv . Count )
337- rhsCsv . Add ( new [ ] { rhsCsv . First ( ) . Single ( ) . Clone ( ) } ) ;
338-
339- // Perform math on each bracketed value.
340- var newCsv =
341- lhsCsv
342- . Select ( ( o , i ) => DoNodeMath ( o . Single ( ) , symbolNode , rhsCsv [ i ] . Single ( ) ) )
343- . Select ( o => new GenericSyntaxNode ( FloatToken . From ( o , MaxDp ) . AsIntIfPossible ( ) ) ) ;
344-
345- // Replace bracket content and sum.
346- brackets . ReplaceWith ( new RoundBracketSyntaxNode ( newCsv . ToCsv ( ) ) ) ;
347- symbolNode . Remove ( ) ;
348- rhsVectorNode . Remove ( ) ;
349- rhsVectorBrackets . Remove ( ) ;
326+ if ( rhsVectorNode ? . Token is not TypeToken t || ! t . IsVector ( ) )
327+ continue ;
328+
329+ var rhsVectorBrackets = rhsVectorNode . Next as RoundBracketSyntaxNode ;
330+ if ( ! IsSafeToPerformMath ( vectorNode , symbol , rhsVectorNode ) )
331+ continue ;
332+
333+ // Ensure both brackets have the same number of elements.
334+ var lhsCsv = brackets . GetCsv ( ) . ToList ( ) ;
335+ var rhsCsv = rhsVectorBrackets . GetCsv ( ) . ToList ( ) ;
336+ while ( lhsCsv . Count < rhsCsv . Count )
337+ lhsCsv . Add ( new [ ] { lhsCsv . First ( ) . Single ( ) . Clone ( ) } ) ;
338+ while ( rhsCsv . Count < lhsCsv . Count )
339+ rhsCsv . Add ( new [ ] { rhsCsv . First ( ) . Single ( ) . Clone ( ) } ) ;
340+
341+ // Don't yet support 'vecN(f) * vecN(a * b, ...)'
342+ if ( lhsCsv . Any ( o => o . Count > 1 ) || rhsCsv . Any ( o => o . Count > 1 ) )
343+ continue ;
344+
345+ // Perform math on each bracketed value.
346+ var newCsv =
347+ lhsCsv
348+ . Select ( ( o , i ) => DoNodeMath ( o . Single ( ) , symbolNode , rhsCsv [ i ] . Single ( ) ) )
349+ . Select ( o => new GenericSyntaxNode ( FloatToken . From ( o , MaxDp ) . AsIntIfPossible ( ) ) ) ;
350+
351+ // Replace bracket content and sum.
352+ brackets . ReplaceWith ( new RoundBracketSyntaxNode ( newCsv . ToCsv ( ) ) ) ;
353+ symbolNode . Remove ( ) ;
354+ rhsVectorNode . Remove ( ) ;
355+ rhsVectorBrackets . Remove ( ) ;
350356
351- didChange = true ;
352- }
353- }
357+ didChange = true ;
354358 }
355359 }
356360 }
0 commit comments