summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-impl.h
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-12-09 04:48:03 -0800
committerGitHub <noreply@github.com>2024-12-09 20:48:03 +0800
commit09a9d673322ebf4ca2fcb7d48f13a44e015ea33f (patch)
tree8bae8fa5718669dcbff98b8bcb29784483905f34 /source/slang/slang-check-impl.h
parent051ae8acec0a641bcaf86e7eeff35eff29e8922d (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.h19
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,