summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-parser.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-03-21 17:19:03 -0700
committerGitHub <noreply@github.com>2024-03-21 17:19:03 -0700
commit7a8ef896196ad0d7095412d8558dd9a2542874c8 (patch)
treedeef82a216f468fd57164f94700f2624164c7ca9 /source/slang/slang-parser.cpp
parentdd32414bd7332c55dc37ea2972ffcca73328d834 (diff)
Support arrow operator `->` on pointers. (#3812)
Diffstat (limited to 'source/slang/slang-parser.cpp')
-rw-r--r--source/slang/slang-parser.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp
index ab69b66d8..d64329add 100644
--- a/source/slang/slang-parser.cpp
+++ b/source/slang/slang-parser.cpp
@@ -6884,7 +6884,8 @@ namespace Slang
auto expr = parseAtomicExpr(parser);
for(;;)
{
- switch( peekTokenType(parser) )
+ auto nextTokenType = peekTokenType(parser);
+ switch (nextTokenType)
{
default:
return expr;
@@ -6976,16 +6977,20 @@ namespace Slang
break;
}
- // Member access `x.m`
+ // Member access `x.m` or `x->m`
case TokenType::Dot:
+ case TokenType::RightArrow:
{
- MemberExpr* memberExpr = parser->astBuilder->create<MemberExpr>();
+
+ MemberExpr* memberExpr = nextTokenType == TokenType::Dot
+ ? parser->astBuilder->create<MemberExpr>()
+ : parser->astBuilder->create<DerefMemberExpr>();
// TODO(tfoley): why would a member expression need this?
memberExpr->scope = parser->currentScope;
memberExpr->memberOperatorLoc = parser->tokenReader.peekLoc();
memberExpr->baseExpression = expr;
- parser->ReadToken(TokenType::Dot);
+ parser->ReadToken(nextTokenType);
parser->FillPosition(memberExpr);
memberExpr->name = expectIdentifier(parser).name;