summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-parser.cpp')
-rw-r--r--source/slang/slang-parser.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp
index aec3b4e90..6bf26b014 100644
--- a/source/slang/slang-parser.cpp
+++ b/source/slang/slang-parser.cpp
@@ -7721,6 +7721,31 @@ static Expr* parsePostfixExpr(Parser* parser)
expr = memberExpr;
}
break;
+ case TokenType::OpMul:
+ {
+ // We may have a pointer type expr, e.g. T*, or the `*` is a mul operator.
+ // We can easily disambiguate by looking ahead of `*`, if the token after it
+ // is `,`, `>`, `)` or `>>`, then it must be a type postfix.
+ auto lookahead = peekTokenType(parser, 1);
+ switch (lookahead)
+ {
+ case TokenType::Comma:
+ case TokenType::RParent:
+ case TokenType::OpGreater:
+ case TokenType::OpRsh:
+ case TokenType::Colon:
+ case TokenType::Semicolon:
+ case TokenType::LBracket:
+ case TokenType::OpMul:
+ case TokenType::Dot:
+ case TokenType::Scope:
+ expr = parsePostfixTypeSuffix(parser, expr);
+ break;
+ default:
+ return expr;
+ }
+ }
+ break;
}
}
}