From 4e29c56cdd9604efdbca1c034baffc6d69dae507 Mon Sep 17 00:00:00 2001 From: Dmitri Hrybenko Date: Fri, 18 Oct 2013 18:04:41 +0000 Subject: [PATCH] Code completion: don't copy static strings into a separate allocator Swift SVN r9484 --- include/swift/IDE/CodeCompletion.h | 37 +++++++++++++++++++----------- lib/IDE/CodeCompletion.cpp | 15 ++++++------ 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/include/swift/IDE/CodeCompletion.h b/include/swift/IDE/CodeCompletion.h index 11360a137a0..4f22b9af65d 100644 --- a/include/swift/IDE/CodeCompletion.h +++ b/include/swift/IDE/CodeCompletion.h @@ -343,6 +343,12 @@ class CodeCompletionResultBuilder { void addChunkWithText(CodeCompletionString::Chunk::ChunkKind Kind, StringRef Text); + void addChunkWithTextNoCopy(CodeCompletionString::Chunk::ChunkKind Kind, + StringRef Text) { + Chunks.push_back(CodeCompletionString::Chunk::createWithText( + Kind, CurrentNestingLevel, Text)); + } + void addSimpleChunk(CodeCompletionString::Chunk::ChunkKind Kind) { Chunks.push_back( CodeCompletionString::Chunk::createSimple(Kind, @@ -377,27 +383,33 @@ public: } void addLeftParen() { - addChunkWithText(CodeCompletionString::Chunk::ChunkKind::LeftParen, "("); + addChunkWithTextNoCopy( + CodeCompletionString::Chunk::ChunkKind::LeftParen, "("); } void addRightParen() { - addChunkWithText(CodeCompletionString::Chunk::ChunkKind::RightParen, ")"); + addChunkWithTextNoCopy( + CodeCompletionString::Chunk::ChunkKind::RightParen, ")"); } void addLeftBracket() { - addChunkWithText(CodeCompletionString::Chunk::ChunkKind::LeftBracket, "["); + addChunkWithTextNoCopy( + CodeCompletionString::Chunk::ChunkKind::LeftBracket, "["); } void addRightBracket() { - addChunkWithText(CodeCompletionString::Chunk::ChunkKind::RightBracket, "]"); + addChunkWithTextNoCopy( + CodeCompletionString::Chunk::ChunkKind::RightBracket, "]"); } void addLeftAngle() { - addChunkWithText(CodeCompletionString::Chunk::ChunkKind::LeftAngle, "<"); + addChunkWithTextNoCopy( + CodeCompletionString::Chunk::ChunkKind::LeftAngle, "<"); } void addRightAngle() { - addChunkWithText(CodeCompletionString::Chunk::ChunkKind::RightAngle, ">"); + addChunkWithTextNoCopy( + CodeCompletionString::Chunk::ChunkKind::RightAngle, ">"); } void addLeadingDot() { @@ -406,22 +418,21 @@ public: } void addDot() { - addChunkWithText(CodeCompletionString::Chunk::ChunkKind::Dot, "."); + addChunkWithTextNoCopy(CodeCompletionString::Chunk::ChunkKind::Dot, "."); } - void addComma(StringRef Text) { - if (Text.empty()) - Text = ","; - addChunkWithText(CodeCompletionString::Chunk::ChunkKind::Comma, Text); + void addComma() { + addChunkWithTextNoCopy( + CodeCompletionString::Chunk::ChunkKind::Comma, ", "); } void addExclamationMark() { - addChunkWithText( + addChunkWithTextNoCopy( CodeCompletionString::Chunk::ChunkKind::ExclamationMark, "!"); } void addQuestionMark() { - addChunkWithText( + addChunkWithTextNoCopy( CodeCompletionString::Chunk::ChunkKind::QuestionMark, "?"); } diff --git a/lib/IDE/CodeCompletion.cpp b/lib/IDE/CodeCompletion.cpp index cc5e15866ad..1e683adcc49 100644 --- a/lib/IDE/CodeCompletion.cpp +++ b/lib/IDE/CodeCompletion.cpp @@ -201,8 +201,7 @@ void CodeCompletionResult::dump() const { void CodeCompletionResultBuilder::addChunkWithText( CodeCompletionString::Chunk::ChunkKind Kind, StringRef Text) { - Chunks.push_back(CodeCompletionString::Chunk::createWithText( - Kind, CurrentNestingLevel, Context.copyString(Text))); + addChunkWithTextNoCopy(Kind, Context.copyString(Text)); } CodeCompletionResult *CodeCompletionResultBuilder::takeResult() { @@ -756,7 +755,7 @@ public: bool NeedComma = false; for (auto TupleElt : TP->getFields()) { if (NeedComma) - Builder.addComma(", "); + Builder.addComma(); Builder.addCallParameter(TupleElt.getPattern()->getBoundName(), TupleElt.getPattern()->getType().getString()); NeedComma = true; @@ -782,7 +781,7 @@ public: bool NeedComma = false; for (auto TupleElt : TT->getFields()) { if (NeedComma) - Builder.addComma(", "); + Builder.addComma(); addPatternFromTypeImpl(Builder, TupleElt.getType(), TupleElt.getName()); NeedComma = true; @@ -813,7 +812,7 @@ public: if (auto *TT = AFT->getInput()->getAs()) { for (auto TupleElt : TT->getFields()) { if (NeedComma) - Builder.addComma(", "); + Builder.addComma(); Builder.addCallParameter(TupleElt.getName(), TupleElt.getType().getString()); NeedComma = true; @@ -1366,7 +1365,7 @@ private: Builder.addTextChunk("Vec"); Builder.addLeftAngle(); Builder.addGenericParameter("type"); - Builder.addComma(", "); + Builder.addComma(); Builder.addGenericParameter("length"); Builder.addRightAngle(); @@ -1384,10 +1383,10 @@ private: Builder.addTextChunk("Matrix"); Builder.addLeftAngle(); Builder.addGenericParameter("type"); - Builder.addComma(", "); + Builder.addComma(); Builder.addGenericParameter("rows"); // FIXME: Make this a default argument. - Builder.addComma(", "); + Builder.addComma(); Builder.addGenericParameter("columns"); Builder.addRightAngle();