summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-check-expr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-check-expr.cpp')
-rw-r--r--source/slang/slang-check-expr.cpp35
1 files changed, 20 insertions, 15 deletions
diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp
index ec064b5b3..3414c16b5 100644
--- a/source/slang/slang-check-expr.cpp
+++ b/source/slang/slang-check-expr.cpp
@@ -326,10 +326,11 @@ namespace Slang
}
DeclRefExpr* SemanticsVisitor::ConstructDeclRefExpr(
- DeclRef<Decl> declRef,
- Expr* baseExpr,
+ DeclRef<Decl> declRef,
+ Expr* baseExpr,
+ Name* name,
SourceLoc loc,
- Expr* originalExpr)
+ Expr* originalExpr)
{
// Compute the type that this declaration reference will have in context.
//
@@ -382,7 +383,7 @@ namespace Slang
expr->loc = loc;
expr->type = type;
expr->baseExpression = baseExpr;
- expr->name = declRef.getName();
+ expr->name = name;
expr->declRef = declRef;
expr->memberOperatorLoc = _getMemberOpLoc(originalExpr);
return expr;
@@ -399,7 +400,7 @@ namespace Slang
expr->loc = loc;
expr->type = type;
expr->baseExpression = baseTypeExpr;
- expr->name = declRef.getName();
+ expr->name = name;
expr->declRef = declRef;
expr->memberOperatorLoc = _getMemberOpLoc(originalExpr);
return expr;
@@ -413,7 +414,7 @@ namespace Slang
expr->loc = loc;
expr->type = type;
expr->baseExpression = baseExpr;
- expr->name = declRef.getName();
+ expr->name = name;
expr->declRef = declRef;
expr->memberOperatorLoc = _getMemberOpLoc(originalExpr);
@@ -464,7 +465,7 @@ namespace Slang
//
auto expr = m_astBuilder->create<VarExpr>();
expr->loc = loc;
- expr->name = declRef.getName();
+ expr->name = name;
expr->type = type;
expr->declRef = declRef;
// Keep a reference to the original expr if it was a genericApp/member.
@@ -666,13 +667,15 @@ namespace Slang
return ConstructDeclRefExpr(
synthDeclMemberRef,
nullptr,
+ item.declRef.getName(),
originalExpr ? originalExpr->loc : SourceLoc(),
originalExpr);
}
Expr* SemanticsVisitor::ConstructLookupResultExpr(
LookupResultItem const& item,
- Expr* baseExpr,
+ Expr* baseExpr,
+ Name* name,
SourceLoc loc,
Expr* originalExpr)
{
@@ -696,7 +699,7 @@ namespace Slang
switch (breadcrumb->kind)
{
case LookupResultItem::Breadcrumb::Kind::Member:
- bb = ConstructDeclRefExpr(breadcrumb->declRef, bb, loc, originalExpr);
+ bb = ConstructDeclRefExpr(breadcrumb->declRef, bb, name, loc, originalExpr);
break;
case LookupResultItem::Breadcrumb::Kind::Deref:
@@ -827,7 +830,7 @@ namespace Slang
}
}
- return ConstructDeclRefExpr(item.declRef, bb, loc, originalExpr);
+ return ConstructDeclRefExpr(item.declRef, bb, name, loc, originalExpr);
}
void SemanticsVisitor::suggestCompletionItems(
@@ -844,9 +847,9 @@ namespace Slang
Expr* SemanticsVisitor::createLookupResultExpr(
- Name* name,
- LookupResult const& lookupResult,
- Expr* baseExpr,
+ Name* name,
+ LookupResult const& lookupResult,
+ Expr* baseExpr,
SourceLoc loc,
Expr* originalExpr)
{
@@ -864,7 +867,7 @@ namespace Slang
}
else
{
- return ConstructLookupResultExpr(lookupResult.item, baseExpr, loc, originalExpr);
+ return ConstructLookupResultExpr(lookupResult.item, baseExpr, name, loc, originalExpr);
}
}
@@ -1058,7 +1061,7 @@ namespace Slang
// expression.
//
return ConstructLookupResultExpr(
- lookupResult.item, overloadedExpr->base, overloadedExpr->loc, overloadedExpr);
+ lookupResult.item, overloadedExpr->base, overloadedExpr->name, overloadedExpr->loc, overloadedExpr);
}
// Otherwise, we weren't able to resolve the overloading given
@@ -1166,6 +1169,7 @@ namespace Slang
auto diffTypeExpr = ConstructLookupResultExpr(
diffTypeLookupResult.item,
baseTypeExpr,
+ declRefType->getDeclRef().getName(),
declRefType->getDeclRef().getLoc(),
baseTypeExpr);
@@ -3145,6 +3149,7 @@ namespace Slang
{
auto lookupResultExpr = semantics->ConstructLookupResultExpr(item,
nullptr,
+ overloadedExpr->name,
overloadedExpr->loc,
nullptr);
auto candidateExpr = actions->createHigherOrderInvokeExpr(semantics);