summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-parser.cpp
diff options
context:
space:
mode:
authorJulius Ikkala <julius.ikkala@gmail.com>2025-04-07 06:08:29 +0300
committerGitHub <noreply@github.com>2025-04-06 20:08:29 -0700
commit1b82501dd0c74347cda4a2c7fe5a84fd610bb485 (patch)
treef283a491e0545aa6b890a988ac9fb14f192b4663 /source/slang/slang-parser.cpp
parent680fb0b4e9cbb65d46677183a3f68630be1f6179 (diff)
Add defer statement (#6619)
Diffstat (limited to 'source/slang/slang-parser.cpp')
-rw-r--r--source/slang/slang-parser.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp
index 1b862de77..97777c9fe 100644
--- a/source/slang/slang-parser.cpp
+++ b/source/slang/slang-parser.cpp
@@ -215,6 +215,7 @@ public:
BreakStmt* ParseBreakStatement();
ContinueStmt* ParseContinueStatement();
ReturnStmt* ParseReturnStatement();
+ DeferStmt* ParseDeferStatement();
ExpressionStmt* ParseExpressionStatement();
Expr* ParseExpression(Precedence level = Precedence::Comma);
@@ -5770,6 +5771,10 @@ Stmt* Parser::ParseStatement(Stmt* parentStmt)
{
statement = parseCompileTimeStmt(this);
}
+ else if (LookAheadToken("defer"))
+ {
+ statement = ParseDeferStatement();
+ }
else if (LookAheadToken("try"))
{
statement = ParseExpressionStatement();
@@ -6299,6 +6304,15 @@ ReturnStmt* Parser::ParseReturnStatement()
return returnStatement;
}
+DeferStmt* Parser::ParseDeferStatement()
+{
+ DeferStmt* deferStatement = astBuilder->create<DeferStmt>();
+ FillPosition(deferStatement);
+ ReadToken("defer");
+ deferStatement->statement = ParseStatement();
+ return deferStatement;
+}
+
ExpressionStmt* Parser::ParseExpressionStatement()
{
ExpressionStmt* statement = astBuilder->create<ExpressionStmt>();