diff options
| author | Yong He <yonghe@outlook.com> | 2024-12-09 04:48:03 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-09 20:48:03 +0800 |
| commit | 09a9d673322ebf4ca2fcb7d48f13a44e015ea33f (patch) | |
| tree | 8bae8fa5718669dcbff98b8bcb29784483905f34 /source/slang/slang-check-impl.h | |
| parent | 051ae8acec0a641bcaf86e7eeff35eff29e8922d (diff) | |
Allow pointers to existential values. (#5793)
* Fix pointer offset logic and add executable tests.
* Fix.
* Fix test.
* Add existential ptr test.
* Allow pointers to existential values.
* Fix.
* Fix.
---------
Co-authored-by: Ellie Hermaszewska <ellieh@nvidia.com>
Diffstat (limited to 'source/slang/slang-check-impl.h')
| -rw-r--r-- | source/slang/slang-check-impl.h | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/source/slang/slang-check-impl.h b/source/slang/slang-check-impl.h index 95ec872a5..460e87cb9 100644 --- a/source/slang/slang-check-impl.h +++ b/source/slang/slang-check-impl.h @@ -2654,8 +2654,6 @@ public: // // - Expr* MaybeDereference(Expr* inExpr); - Expr* CheckMatrixSwizzleExpr( MemberExpr* memberRefExpr, Type* baseElementType, @@ -2696,11 +2694,24 @@ public: /// Perform checking operations required for the "base" expression of a member-reference like /// `base.someField` - Expr* checkBaseForMemberExpr(Expr* baseExpr, bool& outNeedDeref); + enum class CheckBaseContext + { + Member, + Subscript, + }; + Expr* checkBaseForMemberExpr( + Expr* baseExpr, + CheckBaseContext checkBaseContext, + bool& outNeedDeref); + + Expr* maybeDereference(Expr* inExpr, CheckBaseContext checkBaseContext); /// Prepare baseExpr for use as the base of a member expr. /// This include inserting implicit open-existential operations as needed. - Expr* maybeInsertImplicitOpForMemberBase(Expr* baseExpr, bool& outNeedDeref); + Expr* maybeInsertImplicitOpForMemberBase( + Expr* baseExpr, + CheckBaseContext checkBaseContext, + bool& outNeedDeref); Expr* lookupMemberResultFailure( DeclRefExpr* expr, |
