summaryrefslogtreecommitdiffstats
path: root/source/slang/lookup.cpp
diff options
context:
space:
mode:
authorTim Foley <tfoleyNV@users.noreply.github.com>2017-08-07 15:44:00 -0700
committerGitHub <noreply@github.com>2017-08-07 15:44:00 -0700
commit9ad2b40b79907c847451891ce2716fcbcdd2e916 (patch)
treee492a82b13334955c1c56f6e3f9d25e8165de82c /source/slang/lookup.cpp
parentca8eea98c89c632dd7b5a6a8b84d379d1e9e59cf (diff)
parent7b54f43fb1b123f451460edb0add218a0428fe95 (diff)
Merge pull request #153 from tfoleyNV/remove-globals
Remove uses of global variables
Diffstat (limited to 'source/slang/lookup.cpp')
-rw-r--r--source/slang/lookup.cpp64
1 files changed, 48 insertions, 16 deletions
diff --git a/source/slang/lookup.cpp b/source/slang/lookup.cpp
index f5e472ec5..b0e9ce971 100644
--- a/source/slang/lookup.cpp
+++ b/source/slang/lookup.cpp
@@ -22,8 +22,9 @@ struct BreadcrumbInfo
};
void DoLocalLookupImpl(
+ Session* session,
String const& name,
- DeclRef<ContainerDecl> containerDeclRef,
+ DeclRef<ContainerDecl> containerDeclRef,
LookupRequest const& request,
LookupResult& result,
BreadcrumbInfo* inBreadcrumbs);
@@ -151,6 +152,7 @@ LookupResultItem CreateLookupResultItem(
}
void DoMemberLookupImpl(
+ Session* session,
String const& name,
RefPtr<ExpressionType> baseType,
LookupRequest const& request,
@@ -168,7 +170,9 @@ void DoMemberLookupImpl(
derefBreacrumb.prev = breadcrumbs;
// Recursively perform lookup on the result of deref
- return DoMemberLookupImpl(name, pointerLikeType->elementType, request, ioResult, &derefBreacrumb);
+ return DoMemberLookupImpl(
+ session,
+ name, pointerLikeType->elementType, request, ioResult, &derefBreacrumb);
}
// Default case: no dereference needed
@@ -177,7 +181,9 @@ void DoMemberLookupImpl(
{
if (auto baseAggTypeDeclRef = baseDeclRefType->declRef.As<AggTypeDecl>())
{
- DoLocalLookupImpl(name, baseAggTypeDeclRef, request, ioResult, breadcrumbs);
+ DoLocalLookupImpl(
+ session,
+ name, baseAggTypeDeclRef, request, ioResult, breadcrumbs);
}
}
@@ -185,18 +191,24 @@ void DoMemberLookupImpl(
}
void DoMemberLookupImpl(
- String const& name,
- DeclRef<Decl> baseDeclRef,
+ Session* session,
+ String const& name,
+ DeclRef<Decl> baseDeclRef,
LookupRequest const& request,
LookupResult& ioResult,
BreadcrumbInfo* breadcrumbs)
{
- auto baseType = getTypeForDeclRef(baseDeclRef);
- return DoMemberLookupImpl(name, baseType, request, ioResult, breadcrumbs);
+ auto baseType = getTypeForDeclRef(
+ session,
+ baseDeclRef);
+ return DoMemberLookupImpl(
+ session,
+ name, baseType, request, ioResult, breadcrumbs);
}
// Look for members of the given name in the given container for declarations
void DoLocalLookupImpl(
+ Session* session,
String const& name,
DeclRef<ContainerDecl> containerDeclRef,
LookupRequest const& request,
@@ -246,13 +258,21 @@ void DoLocalLookupImpl(
memberRefBreadcrumb.declRef = transparentMemberDeclRef;
memberRefBreadcrumb.prev = inBreadcrumbs;
- DoMemberLookupImpl(name, transparentMemberDeclRef, request, result, &memberRefBreadcrumb);
+ DoMemberLookupImpl(
+ session,
+ name,
+ transparentMemberDeclRef,
+ request,
+ result,
+ &memberRefBreadcrumb);
}
// Consider lookup via extension
if( auto aggTypeDeclRef = containerDeclRef.As<AggTypeDecl>() )
{
- RefPtr<ExpressionType> type = DeclRefType::Create(aggTypeDeclRef);
+ RefPtr<ExpressionType> type = DeclRefType::Create(
+ session,
+ aggTypeDeclRef);
for (auto ext = GetCandidateExtensions(aggTypeDeclRef); ext; ext = ext->nextCandidateExtension)
{
@@ -264,12 +284,15 @@ void DoLocalLookupImpl(
// the constructed result can somehow indicate that a member
// was found through an extension.
- DoLocalLookupImpl(name, extDeclRef, request, result, inBreadcrumbs);
+ DoLocalLookupImpl(
+ session,
+ name, extDeclRef, request, result, inBreadcrumbs);
}
}
}
void DoLookupImpl(
+ Session* session,
String const& name,
LookupRequest const& request,
LookupResult& result)
@@ -301,7 +324,9 @@ void DoLookupImpl(
{
if( auto genericTypeParam = pp.As<GenericTypeParamDecl>() )
{
- subst->args.Add(DeclRefType::Create(DeclRef<GenericTypeParamDecl>(genericTypeParam.Ptr(), nullptr)));
+ subst->args.Add(DeclRefType::Create(
+ session,
+ DeclRef<GenericTypeParamDecl>(genericTypeParam.Ptr(), nullptr)));
}
else if( auto genericValParam = pp.As<GenericValueParamDecl>() )
{
@@ -311,7 +336,9 @@ void DoLookupImpl(
}
DeclRef<ContainerDecl> containerRef = DeclRef<Decl>(containerDecl, subst).As<ContainerDecl>();
- DoLocalLookupImpl(name, containerRef, request, result, nullptr);
+ DoLocalLookupImpl(
+ session,
+ name, containerRef, request, result, nullptr);
}
if (result.isValid())
@@ -325,14 +352,18 @@ void DoLookupImpl(
// If we run out of scopes, then we are done.
}
-LookupResult DoLookup(String const& name, LookupRequest const& request)
+LookupResult DoLookup(
+ Session* session,
+ String const& name,
+ LookupRequest const& request)
{
LookupResult result;
- DoLookupImpl(name, request, result);
+ DoLookupImpl(session, name, request, result);
return result;
}
LookupResult LookUp(
+ Session* session,
SemanticsVisitor* semantics,
String const& name,
RefPtr<Scope> scope)
@@ -340,12 +371,13 @@ LookupResult LookUp(
LookupRequest request;
request.semantics = semantics;
request.scope = scope;
- return DoLookup(name, request);
+ return DoLookup(session, name, request);
}
// perform lookup within the context of a particular container declaration,
// and do *not* look further up the chain
LookupResult LookUpLocal(
+ Session* session,
SemanticsVisitor* semantics,
String const& name,
DeclRef<ContainerDecl> containerDeclRef)
@@ -354,7 +386,7 @@ LookupResult LookUpLocal(
request.semantics = semantics;
LookupResult result;
- DoLocalLookupImpl(name, containerDeclRef, request, result, nullptr);
+ DoLocalLookupImpl(session, name, containerDeclRef, request, result, nullptr);
return result;
}