Remove conditional break/continue.
This CL removes the conditional forms of the break and continue
statements as they are no longer in the WGSL spec.
Change-Id: I46224d6cb5ce706cfc95d35ab0a4eea46abf62a9
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/22580
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index 89edc77..eebea01 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -41,7 +41,6 @@
#include "src/ast/scalar_constructor_expression.h"
#include "src/ast/set_decoration.h"
#include "src/ast/sint_literal.h"
-#include "src/ast/statement_condition.h"
#include "src/ast/struct_member_offset_decoration.h"
#include "src/ast/switch_statement.h"
#include "src/ast/type/alias_type.h"
@@ -1943,73 +1942,25 @@
}
// break_stmt
-// : BREAK ({IF | UNLESS} paren_rhs_stmt)?
+// : BREAK
std::unique_ptr<ast::BreakStatement> ParserImpl::break_stmt() {
auto t = peek();
if (!t.IsBreak())
return nullptr;
- auto source = t.source();
next(); // Consume the peek
-
- ast::StatementCondition condition = ast::StatementCondition::kNone;
- std::unique_ptr<ast::Expression> conditional = nullptr;
-
- t = peek();
- if (t.IsIf() || t.IsUnless()) {
- next(); // Consume the peek
-
- if (t.IsIf())
- condition = ast::StatementCondition::kIf;
- else
- condition = ast::StatementCondition::kUnless;
-
- conditional = paren_rhs_stmt();
- if (has_error())
- return nullptr;
- if (conditional == nullptr) {
- set_error(peek(), "unable to parse conditional statement");
- return nullptr;
- }
- }
-
- return std::make_unique<ast::BreakStatement>(source, condition,
- std::move(conditional));
+ return std::make_unique<ast::BreakStatement>(t.source());
}
// continue_stmt
-// : CONTINUE ({IF | UNLESS} paren_rhs_stmt)?
+// : CONTINUE
std::unique_ptr<ast::ContinueStatement> ParserImpl::continue_stmt() {
auto t = peek();
if (!t.IsContinue())
return nullptr;
- auto source = t.source();
next(); // Consume the peek
-
- ast::StatementCondition condition = ast::StatementCondition::kNone;
- std::unique_ptr<ast::Expression> conditional = nullptr;
-
- t = peek();
- if (t.IsIf() || t.IsUnless()) {
- next(); // Consume the peek
-
- if (t.IsIf())
- condition = ast::StatementCondition::kIf;
- else
- condition = ast::StatementCondition::kUnless;
-
- conditional = paren_rhs_stmt();
- if (has_error())
- return nullptr;
- if (conditional == nullptr) {
- set_error(peek(), "unable to parse conditional statement");
- return nullptr;
- }
- }
-
- return std::make_unique<ast::ContinueStatement>(source, condition,
- std::move(conditional));
+ return std::make_unique<ast::ContinueStatement>(t.source());
}
// continuing_stmt
diff --git a/src/reader/wgsl/parser_impl_break_stmt_test.cc b/src/reader/wgsl/parser_impl_break_stmt_test.cc
index 45ff183..4eba159 100644
--- a/src/reader/wgsl/parser_impl_break_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_break_stmt_test.cc
@@ -14,8 +14,6 @@
#include "gtest/gtest.h"
#include "src/ast/break_statement.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/statement.h"
#include "src/reader/wgsl/parser_impl.h"
#include "src/reader/wgsl/parser_impl_test_helper.h"
@@ -30,46 +28,6 @@
ASSERT_FALSE(p->has_error()) << p->error();
ASSERT_NE(e, nullptr);
ASSERT_TRUE(e->IsBreak());
- EXPECT_EQ(e->condition(), ast::StatementCondition::kNone);
- EXPECT_EQ(e->conditional(), nullptr);
-}
-
-TEST_F(ParserImplTest, BreakStmt_WithIf) {
- auto* p = parser("break if (a == b)");
- auto e = p->break_stmt();
- ASSERT_FALSE(p->has_error()) << p->error();
- ASSERT_NE(e, nullptr);
- ASSERT_TRUE(e->IsBreak());
- EXPECT_EQ(e->condition(), ast::StatementCondition::kIf);
- ASSERT_NE(e->conditional(), nullptr);
- EXPECT_TRUE(e->conditional()->IsBinary());
-}
-
-TEST_F(ParserImplTest, BreakStmt_WithUnless) {
- auto* p = parser("break unless (a == b)");
- auto e = p->break_stmt();
- ASSERT_FALSE(p->has_error()) << p->error();
- ASSERT_NE(e, nullptr);
- ASSERT_TRUE(e->IsBreak());
- EXPECT_EQ(e->condition(), ast::StatementCondition::kUnless);
- ASSERT_NE(e->conditional(), nullptr);
- EXPECT_TRUE(e->conditional()->IsBinary());
-}
-
-TEST_F(ParserImplTest, BreakStmt_InvalidRHS) {
- auto* p = parser("break if (a = b)");
- auto e = p->break_stmt();
- ASSERT_TRUE(p->has_error());
- ASSERT_EQ(e, nullptr);
- EXPECT_EQ(p->error(), "1:13: expected )");
-}
-
-TEST_F(ParserImplTest, BreakStmt_MissingRHS) {
- auto* p = parser("break if");
- auto e = p->break_stmt();
- ASSERT_TRUE(p->has_error());
- ASSERT_EQ(e, nullptr);
- EXPECT_EQ(p->error(), "1:9: expected (");
}
} // namespace
diff --git a/src/reader/wgsl/parser_impl_continue_stmt_test.cc b/src/reader/wgsl/parser_impl_continue_stmt_test.cc
index 9a7b6fa..8207e57 100644
--- a/src/reader/wgsl/parser_impl_continue_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_continue_stmt_test.cc
@@ -14,8 +14,6 @@
#include "gtest/gtest.h"
#include "src/ast/continue_statement.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/statement.h"
#include "src/reader/wgsl/parser_impl.h"
#include "src/reader/wgsl/parser_impl_test_helper.h"
@@ -30,46 +28,6 @@
ASSERT_FALSE(p->has_error()) << p->error();
ASSERT_NE(e, nullptr);
ASSERT_TRUE(e->IsContinue());
- EXPECT_EQ(e->condition(), ast::StatementCondition::kNone);
- EXPECT_EQ(e->conditional(), nullptr);
-}
-
-TEST_F(ParserImplTest, ContinueStmt_WithIf) {
- auto* p = parser("continue if (a == b)");
- auto e = p->continue_stmt();
- ASSERT_FALSE(p->has_error()) << p->error();
- ASSERT_NE(e, nullptr);
- ASSERT_TRUE(e->IsContinue());
- EXPECT_EQ(e->condition(), ast::StatementCondition::kIf);
- ASSERT_NE(e->conditional(), nullptr);
- EXPECT_TRUE(e->conditional()->IsBinary());
-}
-
-TEST_F(ParserImplTest, ContinueStmt_WithUnless) {
- auto* p = parser("continue unless (a == b)");
- auto e = p->continue_stmt();
- ASSERT_FALSE(p->has_error()) << p->error();
- ASSERT_NE(e, nullptr);
- ASSERT_TRUE(e->IsContinue());
- EXPECT_EQ(e->condition(), ast::StatementCondition::kUnless);
- ASSERT_NE(e->conditional(), nullptr);
- EXPECT_TRUE(e->conditional()->IsBinary());
-}
-
-TEST_F(ParserImplTest, ContinueStmt_InvalidRHS) {
- auto* p = parser("continue if (a = b)");
- auto e = p->continue_stmt();
- ASSERT_TRUE(p->has_error());
- ASSERT_EQ(e, nullptr);
- EXPECT_EQ(p->error(), "1:16: expected )");
-}
-
-TEST_F(ParserImplTest, ContinueStmt_MissingRHS) {
- auto* p = parser("continue if");
- auto e = p->continue_stmt();
- ASSERT_TRUE(p->has_error());
- ASSERT_EQ(e, nullptr);
- EXPECT_EQ(p->error(), "1:12: expected (");
}
} // namespace
diff --git a/src/reader/wgsl/parser_impl_statement_test.cc b/src/reader/wgsl/parser_impl_statement_test.cc
index 1deaa12..5fc9339 100644
--- a/src/reader/wgsl/parser_impl_statement_test.cc
+++ b/src/reader/wgsl/parser_impl_statement_test.cc
@@ -197,20 +197,12 @@
EXPECT_TRUE(e->IsBreak());
}
-TEST_F(ParserImplTest, Statement_Break_Invalid) {
- auto* p = parser("break if (a = b);");
- auto e = p->statement();
- ASSERT_TRUE(p->has_error());
- ASSERT_EQ(e, nullptr);
- EXPECT_EQ(p->error(), "1:13: expected )");
-}
-
TEST_F(ParserImplTest, Statement_Break_MissingSemicolon) {
- auto* p = parser("break if (a == b)");
+ auto* p = parser("break");
auto e = p->statement();
ASSERT_TRUE(p->has_error());
ASSERT_EQ(e, nullptr);
- EXPECT_EQ(p->error(), "1:18: missing ;");
+ EXPECT_EQ(p->error(), "1:6: missing ;");
}
TEST_F(ParserImplTest, Statement_Continue) {
@@ -221,20 +213,12 @@
EXPECT_TRUE(e->IsContinue());
}
-TEST_F(ParserImplTest, Statement_Continue_Invalid) {
- auto* p = parser("continue if (a = b);");
- auto e = p->statement();
- ASSERT_TRUE(p->has_error());
- ASSERT_EQ(e, nullptr);
- EXPECT_EQ(p->error(), "1:16: expected )");
-}
-
TEST_F(ParserImplTest, Statement_Continue_MissingSemicolon) {
- auto* p = parser("continue if (a == b)");
+ auto* p = parser("continue");
auto e = p->statement();
ASSERT_TRUE(p->has_error());
ASSERT_EQ(e, nullptr);
- EXPECT_EQ(p->error(), "1:21: missing ;");
+ EXPECT_EQ(p->error(), "1:9: missing ;");
}
TEST_F(ParserImplTest, Statement_Kill) {