diff options
| author | Yong He <yonghe@outlook.com> | 2024-03-21 17:19:03 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-21 17:19:03 -0700 |
| commit | 7a8ef896196ad0d7095412d8558dd9a2542874c8 (patch) | |
| tree | deef82a216f468fd57164f94700f2624164c7ca9 /source/slang/slang-parser.cpp | |
| parent | dd32414bd7332c55dc37ea2972ffcca73328d834 (diff) | |
Support arrow operator `->` on pointers. (#3812)
Diffstat (limited to 'source/slang/slang-parser.cpp')
| -rw-r--r-- | source/slang/slang-parser.cpp | 13 |
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; |
