Now starts up in 800ms and uses 105MB memory on druntime+phobos

This commit is contained in:
Hackerpilot 2014-05-18 11:00:54 +00:00
parent ae91019ab4
commit cf57888140
4 changed files with 22 additions and 18 deletions

View File

@ -110,17 +110,17 @@ public:
return array(parts.equalRange(&s));
}
/**
* Symbol's name
*/
string name;
/**
* Symbols that compose this symbol, such as enum members, class variables,
* methods, etc.
*/
TTree!(ACSymbol*, true, "a < b", false) parts;
/**
* Symbol's name
*/
string name;
/**
* Calltip to display if this is a function
*/

View File

@ -53,7 +53,9 @@ AutocompleteResponse getDoc(const AutocompleteRequest request)
Log.trace("Getting doc comments");
AutocompleteResponse response;
auto allocator = scoped!(CAllocatorImpl!(BlockAllocator!(1024 * 16)))();
ACSymbol*[] symbols = getSymbolsForCompletion(request, CompletionType.ddoc, allocator);
auto cache = StringCache(StringCache.defaultBucketCount);
ACSymbol*[] symbols = getSymbolsForCompletion(request, CompletionType.ddoc,
allocator, &cache);
if (symbols.length == 0)
Log.error("Could not find symbol");
else foreach (symbol; symbols)
@ -81,11 +83,13 @@ AutocompleteResponse findDeclaration(const AutocompleteRequest request)
Log.trace("Finding declaration");
AutocompleteResponse response;
auto allocator = scoped!(CAllocatorImpl!(BlockAllocator!(1024 * 16)))();
ACSymbol*[] symbols = getSymbolsForCompletion(request, CompletionType.location, allocator);
auto cache = StringCache(StringCache.defaultBucketCount);
ACSymbol*[] symbols = getSymbolsForCompletion(request,
CompletionType.location, allocator, &cache);
if (symbols.length > 0)
{
response.symbolLocation = symbols[0].location;
response.symbolFilePath = symbols[0].symbolFile;
response.symbolFilePath = symbols[0].symbolFile.idup;
Log.info(symbols[0].name, " declared in ",
response.symbolFilePath, " at ", response.symbolLocation);
}
@ -106,8 +110,9 @@ AutocompleteResponse complete(const AutocompleteRequest request)
Log.info("Got a completion request");
const(Token)[] tokenArray;
auto cache = StringCache(StringCache.defaultBucketCount);
auto beforeTokens = getTokensBeforeCursor(request.sourceCode,
request.cursorPosition, tokenArray);
request.cursorPosition, &cache, tokenArray);
string partial;
IdType tokenType;
@ -134,7 +139,7 @@ AutocompleteResponse complete(const AutocompleteRequest request)
foreach (symbol; (cast() arraySymbols)[])
{
response.completionKinds ~= symbol.kind;
response.completions ~= symbol.name;
response.completions ~= symbol.name.dup;
}
response.completionType = CompletionType.identifiers;
break;
@ -193,11 +198,10 @@ AutocompleteResponse complete(const AutocompleteRequest request)
* a sorted range of tokens before the cursor position
*/
auto getTokensBeforeCursor(const(ubyte[]) sourceCode, size_t cursorPosition,
out const(Token)[] tokenArray)
StringCache* cache, out const(Token)[] tokenArray)
{
LexerConfig config;
config.fileName = "stdin";
StringCache* cache = new StringCache(StringCache.defaultBucketCount);
auto tokens = byToken(cast(ubyte[]) sourceCode, config, cache);
tokenArray = tokens.array();
auto sortedTokens = assumeSorted(tokenArray);
@ -213,11 +217,11 @@ auto getTokensBeforeCursor(const(ubyte[]) sourceCode, size_t cursorPosition,
* the request's source code, cursor position, and completion type.
*/
ACSymbol*[] getSymbolsForCompletion(const AutocompleteRequest request,
const CompletionType type, CAllocator allocator)
const CompletionType type, CAllocator allocator, StringCache* cache)
{
const(Token)[] tokenArray;
auto beforeTokens = getTokensBeforeCursor(request.sourceCode,
request.cursorPosition, tokenArray);
request.cursorPosition, cache, tokenArray);
auto semanticAllocator = scoped!(CAllocatorImpl!(BlockAllocator!(1024*16)));
Scope* completionScope = generateAutocompleteTrees(tokenArray,
"stdin", allocator, semanticAllocator);
@ -470,7 +474,7 @@ void setCompletions(T)(ref AutocompleteResponse response,
.filter!(a => a.name.toUpper().startsWith(partial.toUpper())))
{
response.completionKinds ~= s.kind;
response.completions ~= s.name;
response.completions ~= s.name.dup;
}
response.completionType = CompletionType.identifiers;
return;
@ -502,7 +506,7 @@ void setCompletions(T)(ref AutocompleteResponse response,
{
// Log.trace("Adding ", s.name, " to the completion list");
response.completionKinds ~= s.kind;
response.completions ~= s.name;
response.completions ~= s.name.dup;
}
response.completionType = CompletionType.identifiers;
}

View File

@ -42,7 +42,7 @@ dmd\
-Icontainers/src\
-Imsgpack-d/src\
-Idscanner\
-wi -O -release\
-wi -O -release -inline\
-ofdcd-server
#gdc client.d\

@ -1 +1 @@
Subproject commit 19dc7c707f857b104144e909d77543b2db1521b8
Subproject commit 25f0d93b90cf039577ed2fb7091efd18770dc06c