indentation fixes and unit test updates
This commit is contained in:
parent
7a8964d8b5
commit
59c6557c45
44
cache.d
44
cache.d
|
@ -40,7 +40,7 @@ private enum Queries : string
|
||||||
deleteFile = "delete from files where path = ?",
|
deleteFile = "delete from files where path = ?",
|
||||||
getPublicImports = "select importedId from publicImports where importerId = ?",
|
getPublicImports = "select importedId from publicImports where importerId = ?",
|
||||||
getModuleId = "select id from files where path = ?",
|
getModuleId = "select id from files where path = ?",
|
||||||
getContainersByModule = "select id from containers where fileId = ?"
|
getContainersByModule = "select id from containers where fileId = ?"
|
||||||
}
|
}
|
||||||
|
|
||||||
private sqlite3* getDatabase()
|
private sqlite3* getDatabase()
|
||||||
|
@ -173,41 +173,41 @@ private string getModuleIdFromPath(string filePath)
|
||||||
public string[] getContainersImported(string modulePath)
|
public string[] getContainersImported(string modulePath)
|
||||||
{
|
{
|
||||||
immutable string moduleId = getModuleIdFromPath(modulePath);
|
immutable string moduleId = getModuleIdFromPath(modulePath);
|
||||||
sqlite3* db = getDatabase();
|
sqlite3* db = getDatabase();
|
||||||
sqlite3_stmt* statement;
|
sqlite3_stmt* statement;
|
||||||
char* pzTail;
|
char* pzTail;
|
||||||
scope(exit) if (pzTail) free(pzTail);
|
scope(exit) if (pzTail) free(pzTail);
|
||||||
string[] moduleIds = getImportedModules(modulePath);
|
string[] moduleIds = getImportedModules(modulePath);
|
||||||
string[] containerIds;
|
string[] containerIds;
|
||||||
foreach (string id; moduleIds)
|
foreach (string id; moduleIds)
|
||||||
{
|
{
|
||||||
containerIds ~= getContainersByModule(id);
|
containerIds ~= getContainersByModule(id);
|
||||||
}
|
}
|
||||||
return containerIds;
|
return containerIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string[] getContainersByModule(string moduleId)
|
private string[] getContainersByModule(string moduleId)
|
||||||
{
|
{
|
||||||
sqlite3* db = getDatabase();
|
sqlite3* db = getDatabase();
|
||||||
sqlite3_stmt* statement;
|
sqlite3_stmt* statement;
|
||||||
scope(exit) if (statement !is null) sqlite3_finalize(statement);
|
scope(exit) if (statement !is null) sqlite3_finalize(statement);
|
||||||
char* pzTail;
|
char* pzTail;
|
||||||
prepareStatement(db, statement, Queries.getContainersByModule);
|
prepareStatement(db, statement, Queries.getContainersByModule);
|
||||||
bindText(statement, 1, moduleId);
|
bindText(statement, 1, moduleId);
|
||||||
string[] rVal;
|
string[] rVal;
|
||||||
while (sqlite3_step(statement) == SQLITE_ROW)
|
while (sqlite3_step(statement) == SQLITE_ROW)
|
||||||
{
|
{
|
||||||
rVal ~= to!string(sqlite3_column_text(statement, 1));
|
rVal ~= to!string(sqlite3_column_text(statement, 1));
|
||||||
}
|
}
|
||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void prepareStatement(sqlite3* db, sqlite3_stmt* statement, string query)
|
private void prepareStatement(sqlite3* db, sqlite3_stmt* statement, string query)
|
||||||
{
|
{
|
||||||
char* pzTail;
|
char* pzTail;
|
||||||
scope(exit) if (pzTail) free(pzTail);
|
scope(exit) if (pzTail) free(pzTail);
|
||||||
sqlite3_prepare_v2(db, query.toStringz(), cast(int) query.length + 1,
|
sqlite3_prepare_v2(db, query.toStringz(), cast(int) query.length + 1,
|
||||||
&statement, &pzTail);
|
&statement, &pzTail);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bindText(sqlite3_stmt* statement, int argPos, string text)
|
private void bindText(sqlite3_stmt* statement, int argPos, string text)
|
||||||
|
|
45
tokenizer.d
45
tokenizer.d
|
@ -165,7 +165,7 @@ body
|
||||||
{
|
{
|
||||||
app.put(popNewline(input, index));
|
app.put(popNewline(input, index));
|
||||||
lineNumber++;
|
lineNumber++;
|
||||||
}
|
}
|
||||||
else if (input.front == '+')
|
else if (input.front == '+')
|
||||||
{
|
{
|
||||||
app.put(input.front);
|
app.put(input.front);
|
||||||
|
@ -424,12 +424,12 @@ body
|
||||||
switch (input.front)
|
switch (input.front)
|
||||||
{
|
{
|
||||||
case 'w':
|
case 'w':
|
||||||
t.type = TokenType.StringLiteral;
|
t.type = TokenType.WStringLiteral;
|
||||||
input.popFront();
|
input.popFront();
|
||||||
++index;
|
++index;
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
t.type = TokenType.StringLiteral;
|
t.type = TokenType.DStringLiteral;
|
||||||
input.popFront();
|
input.popFront();
|
||||||
++index;
|
++index;
|
||||||
break;
|
break;
|
||||||
|
@ -456,6 +456,12 @@ unittest
|
||||||
assert (lexString(b, i, l) == "ab\ncd");
|
assert (lexString(b, i, l) == "ab\ncd");
|
||||||
auto c = "`abc\\ndef`";
|
auto c = "`abc\\ndef`";
|
||||||
assert (lexString(c, i, l, false) == "abc\\ndef");
|
assert (lexString(c, i, l, false) == "abc\\ndef");
|
||||||
|
auto d = `"12345"w`;
|
||||||
|
assert (lexString(d, i, l).type == TokenType.WStringLiteral);
|
||||||
|
auto e = `"abc"c`;
|
||||||
|
assert (lexString(e, i, l).type == TokenType.StringLiteral);
|
||||||
|
auto f = `"abc"d`;
|
||||||
|
assert (lexString(f, i, l).type == TokenType.DStringLiteral);
|
||||||
}
|
}
|
||||||
|
|
||||||
Token lexNumber(R)(ref R input, ref uint index, const uint lineNumber)
|
Token lexNumber(R)(ref R input, ref uint index, const uint lineNumber)
|
||||||
|
@ -520,7 +526,7 @@ Token lexBinary(R)(ref R input, ref uint index, const uint lineNumber,
|
||||||
case 'u':
|
case 'u':
|
||||||
case 'U':
|
case 'U':
|
||||||
if (isUnsigned)
|
if (isUnsigned)
|
||||||
break;
|
break binaryLoop;
|
||||||
app.put(input.front);
|
app.put(input.front);
|
||||||
input.popFront();
|
input.popFront();
|
||||||
++index;
|
++index;
|
||||||
|
@ -561,10 +567,41 @@ unittest
|
||||||
{
|
{
|
||||||
uint i;
|
uint i;
|
||||||
uint l;
|
uint l;
|
||||||
|
|
||||||
auto a = "0b000101";
|
auto a = "0b000101";
|
||||||
auto ar = lexNumber(a, i, l);
|
auto ar = lexNumber(a, i, l);
|
||||||
assert (ar.value == "0b000101");
|
assert (ar.value == "0b000101");
|
||||||
assert (a == "");
|
assert (a == "");
|
||||||
|
|
||||||
|
auto b = "0b001L_";
|
||||||
|
auto br = lexNumber(b, i, l);
|
||||||
|
assert (br.value == "0b001L");
|
||||||
|
assert (br.type == TokenType.LongLiteral);
|
||||||
|
|
||||||
|
auto c = "0b1101uLL";
|
||||||
|
auto cr = lexNumber(c, i, l);
|
||||||
|
assert (cr.value == "0b1101uL");
|
||||||
|
assert (cr.type == TokenType.UnsignedLongLiteral);
|
||||||
|
|
||||||
|
auto d = "0b1q";
|
||||||
|
auto dr = lexNumber(d, i, l);
|
||||||
|
assert (dr.value == "0b1");
|
||||||
|
assert (dr.type == TokenType.IntLiteral);
|
||||||
|
|
||||||
|
auto e = "0b1_0_1LU";
|
||||||
|
auto er = lexNumber(e, i, l);
|
||||||
|
assert (er.value == "0b1_0_1LU");
|
||||||
|
assert (er.type == TokenType.UnsignedLongLiteral);
|
||||||
|
|
||||||
|
auto f = "0b1_0_1uU";
|
||||||
|
auto fr = lexNumber(f, i, l);
|
||||||
|
assert (fr.value == "0b1_0_1u");
|
||||||
|
assert (fr.type == TokenType.UnsignedIntLiteral);
|
||||||
|
|
||||||
|
auto g = "0b1_0_1LL";
|
||||||
|
auto gr = lexNumber(g, i, l);
|
||||||
|
assert (gr.value == "0b1_0_1L");
|
||||||
|
assert (gr.type == TokenType.LongLiteral);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue