summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-parser.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-02-06 22:02:43 -0800
committerGitHub <noreply@github.com>2025-02-06 22:02:43 -0800
commitbae87afb20f95f9f27c64c4955bbc4464c576509 (patch)
tree44d079bd76002d69be20efdbd03ac6ff62ef8caf /source/slang/slang-parser.cpp
parent075b10e69055acc6536d74c1cb3399e0fe75338d (diff)
Support stage_switch. (#6311)
* Support stage_switch. * Update proposal status. * Fix gl_InstanceID. * Fix.
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"))