From 1b82501dd0c74347cda4a2c7fe5a84fd610bb485 Mon Sep 17 00:00:00 2001 From: Julius Ikkala Date: Mon, 7 Apr 2025 06:08:29 +0300 Subject: Add defer statement (#6619) --- source/slang/slang-parser.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'source/slang/slang-parser.cpp') 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(); + FillPosition(deferStatement); + ReadToken("defer"); + deferStatement->statement = ParseStatement(); + return deferStatement; +} + ExpressionStmt* Parser::ParseExpressionStatement() { ExpressionStmt* statement = astBuilder->create(); -- cgit v1.2.3