summaryrefslogtreecommitdiffstats
path: root/source/slang/lookup.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/lookup.cpp')
-rw-r--r--source/slang/lookup.cpp27
1 files changed, 19 insertions, 8 deletions
diff --git a/source/slang/lookup.cpp b/source/slang/lookup.cpp
index e5ffa00f7..eebef6503 100644
--- a/source/slang/lookup.cpp
+++ b/source/slang/lookup.cpp
@@ -96,6 +96,11 @@ bool DeclPassesLookupMask(Decl* decl, LookupMask mask)
{
return (int(mask) & int(LookupMask::Function)) != 0;
}
+ // attribute declaration
+ else if( auto attrDecl = dynamic_cast<AttributeDecl*>(decl) )
+ {
+ return (int(mask) & int(LookupMask::Attribute)) != 0;
+ }
// default behavior is to assume a value declaration
// (no overloading allowed)
@@ -423,11 +428,13 @@ LookupResult lookUp(
Session* session,
SemanticsVisitor* semantics,
Name* name,
- RefPtr<Scope> scope)
+ RefPtr<Scope> scope,
+ LookupMask mask)
{
LookupRequest request;
request.semantics = semantics;
request.scope = scope;
+ request.mask = mask;
return DoLookup(session, name, request);
}
@@ -437,10 +444,12 @@ LookupResult lookUpLocal(
Session* session,
SemanticsVisitor* semantics,
Name* name,
- DeclRef<ContainerDecl> containerDeclRef)
+ DeclRef<ContainerDecl> containerDeclRef,
+ LookupMask mask)
{
LookupRequest request;
request.semantics = semantics;
+ request.mask = mask;
LookupResult result;
DoLocalLookupImpl(session, name, containerDeclRef, request, result, nullptr);
@@ -448,12 +457,13 @@ LookupResult lookUpLocal(
}
void lookUpMemberImpl(
- Session* session,
+ Session* session,
SemanticsVisitor* semantics,
Name* name,
Type* type,
LookupResult& ioResult,
- BreadcrumbInfo* inBreadcrumbs)
+ BreadcrumbInfo* inBreadcrumbs,
+ LookupMask mask)
{
if (auto declRefType = type->As<DeclRefType>())
{
@@ -475,7 +485,7 @@ void lookUpMemberImpl(
breadcrumb.declRef = constraintDeclRef;
// TODO: Need to consider case where this might recurse infinitely.
- lookUpMemberImpl(session, semantics, name, bound, ioResult, &breadcrumb);
+ lookUpMemberImpl(session, semantics, name, bound, ioResult, &breadcrumb, mask);
}
}
else if (auto aggTypeDeclRef = declRef.As<AggTypeDecl>())
@@ -517,7 +527,7 @@ void lookUpMemberImpl(
breadcrumb.declRef = constraintDeclRef;
// TODO: Need to consider case where this might recurse infinitely.
- lookUpMemberImpl(session, semantics, name, bound, ioResult, &breadcrumb);
+ lookUpMemberImpl(session, semantics, name, bound, ioResult, &breadcrumb, mask);
}
}
@@ -529,10 +539,11 @@ LookupResult lookUpMember(
Session* session,
SemanticsVisitor* semantics,
Name* name,
- Type* type)
+ Type* type,
+ LookupMask mask)
{
LookupResult result;
- lookUpMemberImpl(session, semantics, name, type, result, nullptr);
+ lookUpMemberImpl(session, semantics, name, type, result, nullptr, mask);
return result;
}