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-check-expr.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-check-expr.cpp')
| -rw-r--r-- | source/slang/slang-check-expr.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp index addd3a5c4..b7f99c4e7 100644 --- a/source/slang/slang-check-expr.cpp +++ b/source/slang/slang-check-expr.cpp @@ -382,15 +382,15 @@ namespace Slang Expr* base, SourceLoc loc) { - auto ptrLikeType = as<PointerLikeType>(base->type); - SLANG_ASSERT(ptrLikeType); + auto elementType = getPointedToTypeIfCanImplicitDeref(base->type); + SLANG_ASSERT(elementType); auto derefExpr = m_astBuilder->create<DerefExpr>(); derefExpr->loc = loc; derefExpr->base = base; - derefExpr->type = QualType(ptrLikeType->elementType); + derefExpr->type = QualType(elementType); - // TODO(tfoley): handle l-value status here + derefExpr->type.isLeftValue = base->type.isLeftValue; return derefExpr; } @@ -1258,7 +1258,9 @@ namespace Slang m_astBuilder, this, name, - baseType); + baseType, + LookupMask::Default, + LookupOptions::NoDeref); if (!lookupResult.isValid()) { goto fail; |
