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.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp
index d606698a1..dcf835234 100644
--- a/source/slang/slang-parser.cpp
+++ b/source/slang/slang-parser.cpp
@@ -184,7 +184,7 @@ namespace Slang
void parseSourceFile(ModuleDecl* program);
Decl* ParseStruct();
ClassDecl* ParseClass();
- Stmt* ParseStatement();
+ Stmt* ParseStatement(Stmt* parentStmt = nullptr);
Stmt* parseBlockStatement();
Stmt* parseLabelStatement();
DeclStmt* parseVarDeclrStatement(Modifiers modifiers);
@@ -4438,7 +4438,7 @@ namespace Slang
}
}
- Stmt* Parser::ParseStatement()
+ Stmt* Parser::ParseStatement(Stmt* parentStmt)
{
auto modifiers = ParseModifiers(this);
@@ -4575,6 +4575,13 @@ namespace Slang
}
else if (LookAheadToken(TokenType::Semicolon))
{
+ if (as<IfStmt>(parentStmt))
+ {
+ // An empty statement after an `if` is probably a mistake,
+ // so we will diagnose it as such.
+ //
+ sink->diagnose(tokenReader.peekLoc(), Diagnostics::unintendedEmptyStatement);
+ }
statement = astBuilder->create<EmptyStmt>();
FillPosition(statement);
ReadToken(TokenType::Semicolon);
@@ -4690,11 +4697,11 @@ namespace Slang
ReadToken(TokenType::LParent);
ifStatement->predicate = ParseExpression();
ReadToken(TokenType::RParent);
- ifStatement->positiveStatement = ParseStatement();
+ ifStatement->positiveStatement = ParseStatement(ifStatement);
if (LookAheadToken("else"))
{
ReadToken("else");
- ifStatement->negativeStatement = ParseStatement();
+ ifStatement->negativeStatement = ParseStatement(ifStatement);
}
return ifStatement;
}