summaryrefslogtreecommitdiff
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.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>();