From 11b29eff99910d55a54658b8a1d053cc4ec076fc Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 4 Aug 2022 14:05:02 -0700 Subject: 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 --- source/slang/slang-lookup.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'source/slang/slang-lookup.cpp') 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(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 -- cgit v1.2.3