fix tests

This commit is contained in:
ryuukk 2023-02-14 14:55:12 +01:00
parent 516dff5f36
commit a70482fddd
2 changed files with 31 additions and 18 deletions

View File

@ -432,16 +432,6 @@ final class FirstPass : ASTVisitor
structFieldTypes.insert(null);
}
// for auto declaration, we'll properly traverse the initializer
// and set the proper crumbs instead of using just the first one
// so we can handle things like cast/templates
auto lookup = symbol.typeLookups.front;
istring[] copy;
foreach(crumb; lookup.breadcrumbs[])
copy ~= crumb;
lookup.breadcrumbs.clear();
auto initializer = part.initializer.nonVoidInitializer;
if (initializer && initializer.assignExpression)
{
@ -451,6 +441,8 @@ final class FirstPass : ASTVisitor
if (CastExpression castExpression = unary.castExpression)
{
warning("cast expression");
auto lookup = symbol.typeLookups.front;
lookup.breadcrumbs.clear();
if (castExpression.type && castExpression.type.type2)
{
Type2 t2 = castExpression.type.type2;
@ -459,6 +451,7 @@ final class FirstPass : ASTVisitor
buildChain(symbol, lookup, &lookup.ctx, t2.typeIdentifierPart);
}
}
continue;
}
else if (FunctionCallExpression fc = unary.functionCallExpression)
{
@ -469,8 +462,18 @@ final class FirstPass : ASTVisitor
}
}
if (unary)
if (unary
&& !unary.primaryExpression
&& !unary.indexExpression
&& !unary.throwExpression
&& !unary.assertExpression
&& !unary.argumentList
&& !unary.deleteExpression
&& !unary.newExpression
)
{
auto lookup = symbol.typeLookups.front;
lookup.breadcrumbs.clear();
// build chain
traverseUnaryExpression(symbol, lookup, &lookup.ctx, unary);
// needs to be reversed because it got added in order (right->left)
@ -509,14 +512,17 @@ final class FirstPass : ASTVisitor
}
}
if (symbol.acSymbol.name == "it")
if (symbol.acSymbol.name == "b")
{
import core.stdc.stdlib: exit;
auto lookup = symbol.typeLookups.front;
warning("crumb: ", lookup.breadcrumbs[]);
if (lookup.ctx.root)
{
warning("root: ", lookup.ctx.root.chain);
foreach(arg; lookup.ctx.root.args)
warning(" arg: ", arg.chain);
}
//exit(0);
}
}

View File

@ -70,8 +70,15 @@ void secondPass(SemanticSymbol* currentSymbol, Scope* moduleScope, ref ModuleCac
{
DSymbol*[string] mapping;
int depth;
try
{
resolveTemplate(currentSymbol.acSymbol, type, lookup, lookup.ctx.root, moduleScope, cache, depth, mapping);
}
catch(Exception e)
{
warning("exception: ".red, currentSymbol.acSymbol.name);
}
}
}
}
else
@ -243,7 +250,7 @@ DSymbol* createTypeWithTemplateArgs(DSymbol* type, TypeLookup* lookup, VariableC
if (type.kind == CompletionKind.functionName)
{
auto callTip = type.callTip;
if (callTip.length > 1)
if (callTip && callTip.length > 1)
{
auto retType = extractReturnType(callTip);
if (retType in mapping)