summaryrefslogtreecommitdiff
path: root/source/slang/slang-lookup.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-08-04 14:05:02 -0700
committerGitHub <noreply@github.com>2022-08-04 14:05:02 -0700
commit11b29eff99910d55a54658b8a1d053cc4ec076fc (patch)
treeac82bef698df94f74a788cdc160dfd30472fb601 /source/slang/slang-lookup.cpp
parente43ef82e288afe486f45ef2736d378e88f40cc90 (diff)
Implicit pointer dereference when using member operator. (#2348)
* Implicit pointer dereference when using member operator. * Add expected test result * Fix lookup. Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-lookup.cpp')
-rw-r--r--source/slang/slang-lookup.cpp27
1 files changed, 15 insertions, 12 deletions
diff --git a/source/slang/slang-lookup.cpp b/source/slang/slang-lookup.cpp
index 8c69e2013..85924ab30 100644
--- a/source/slang/slang-lookup.cpp
+++ b/source/slang/slang-lookup.cpp
@@ -607,19 +607,22 @@ static void _lookUpMembersInSuperTypeImpl(
{
// If the type was pointer-like, then dereference it
// automatically here.
- if (auto pointerLikeType = as<PointerLikeType>(superType))
+ if (((uint32_t)request.options & (uint32_t)LookupOptions::NoDeref) == 0)
{
- // Need to leave a breadcrumb to indicate that we
- // did an implicit dereference here
- BreadcrumbInfo derefBreacrumb;
- derefBreacrumb.kind = LookupResultItem::Breadcrumb::Kind::Deref;
- derefBreacrumb.prev = inBreadcrumbs;
-
- // Recursively perform lookup on the result of deref
- _lookUpMembersInType(
- astBuilder,
- name, pointerLikeType->elementType, request, ioResult, &derefBreacrumb);
- return;
+ if (auto pointerElementType = getPointedToTypeIfCanImplicitDeref(superType))
+ {
+ // Need to leave a breadcrumb to indicate that we
+ // did an implicit dereference here
+ BreadcrumbInfo derefBreacrumb;
+ derefBreacrumb.kind = LookupResultItem::Breadcrumb::Kind::Deref;
+ derefBreacrumb.prev = inBreadcrumbs;
+
+ // Recursively perform lookup on the result of deref
+ _lookUpMembersInType(
+ astBuilder,
+ name, pointerElementType, request, ioResult, &derefBreacrumb);
+ return;
+ }
}
// Default case: no dereference needed