diff options
| author | Yong He <yonghe@outlook.com> | 2022-08-04 14:05:02 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-04 14:05:02 -0700 |
| commit | 11b29eff99910d55a54658b8a1d053cc4ec076fc (patch) | |
| tree | ac82bef698df94f74a788cdc160dfd30472fb601 /source/slang/slang-lookup.cpp | |
| parent | e43ef82e288afe486f45ef2736d378e88f40cc90 (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.cpp | 27 |
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 |
