From ec61971d472450b8dec6f326c8844c353cfd200e Mon Sep 17 00:00:00 2001 From: CyrusNajmabadi Date: Fri, 11 Nov 2016 11:33:20 -0800 Subject: [PATCH] Move to two loops. --- .../Core/Portable/Syntax/SyntaxTriviaList.cs | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/Compilers/Core/Portable/Syntax/SyntaxTriviaList.cs b/src/Compilers/Core/Portable/Syntax/SyntaxTriviaList.cs index 12b0015a491..76c85244e41 100644 --- a/src/Compilers/Core/Portable/Syntax/SyntaxTriviaList.cs +++ b/src/Compilers/Core/Portable/Syntax/SyntaxTriviaList.cs @@ -244,7 +244,8 @@ public SyntaxTriviaList Insert(int index, SyntaxTrivia trivia) /// The trivia to insert. public SyntaxTriviaList InsertRange(int index, IEnumerable trivia) { - if (index < 0 || index > this.Count) + var thisCount = this.Count; + if (index < 0 || index > thisCount) { throw new ArgumentOutOfRangeException(nameof(index)); } @@ -254,23 +255,26 @@ public SyntaxTriviaList InsertRange(int index, IEnumerable trivia) throw new ArgumentNullException(nameof(trivia)); } + // Handle common case where we're passed an empty array. + var triviaList = trivia as IList; + if (triviaList.Count == 0) + { + return this; + } + var builder = SyntaxTriviaListBuilder.Create(); var current = 0; - foreach (var thisTrivia in this) + for (; current < index; current++) { - if (current == index) - { - builder.AddRange(trivia); - } - - builder.Add(thisTrivia); - current++; + builder.Add(this[current]); } - if (current == index) + builder.AddRange(trivia); + + for (; current < thisCount; current++) { - builder.AddRange(trivia); + builder.Add(this[current]); } return builder.ToList(); -- GitLab