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.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp
index 95eb971ee..38285c41f 100644
--- a/source/slang/slang-parser.cpp
+++ b/source/slang/slang-parser.cpp
@@ -5380,9 +5380,8 @@ static Stmt* ParseDefaultStmt(Parser* parser)
return stmt;
}
-static Stmt* parseTargetSwitchStmt(Parser* parser)
+static Stmt* parseTargetSwitchStmtImpl(Parser* parser, TargetSwitchStmt* stmt)
{
- TargetSwitchStmt* stmt = parser->astBuilder->create<TargetSwitchStmt>();
parser->FillPosition(stmt);
parser->ReadToken();
if (!beginMatch(parser, MatchedTokenType::CurlyBraces))
@@ -5479,6 +5478,18 @@ static Stmt* parseTargetSwitchStmt(Parser* parser)
return stmt;
}
+static Stmt* parseTargetSwitchStmt(Parser* parser)
+{
+ auto stmt = parser->astBuilder->create<TargetSwitchStmt>();
+ return parseTargetSwitchStmtImpl(parser, stmt);
+}
+
+static Stmt* parseStageSwitchStmt(Parser* parser)
+{
+ auto stmt = parser->astBuilder->create<StageSwitchStmt>();
+ return parseTargetSwitchStmtImpl(parser, stmt);
+}
+
static Stmt* parseIntrinsicAsmStmt(Parser* parser)
{
IntrinsicAsmStmt* stmt = parser->astBuilder->create<IntrinsicAsmStmt>();
@@ -5725,6 +5736,8 @@ Stmt* Parser::ParseStatement(Stmt* parentStmt)
statement = ParseSwitchStmt(this);
else if (LookAheadToken("__target_switch"))
statement = parseTargetSwitchStmt(this);
+ else if (LookAheadToken("__stage_switch"))
+ statement = parseStageSwitchStmt(this);
else if (LookAheadToken("__intrinsic_asm"))
statement = parseIntrinsicAsmStmt(this);
else if (LookAheadToken("case"))