Fix BUILD.gn based builds
Change-Id: Iec5c7ee8d6f614f7a7301c023703650d4c4068d3 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/23061 Reviewed-by: dan sinclair <dsinclair@google.com>
This commit is contained in:
parent
39e83353f0
commit
3f3483be14
1
BUILD.gn
1
BUILD.gn
|
@ -819,7 +819,6 @@ source_set("tint_unittests_wgsl_writer_src") {
|
||||||
"src/writer/wgsl/generator_impl_switch_test.cc",
|
"src/writer/wgsl/generator_impl_switch_test.cc",
|
||||||
"src/writer/wgsl/generator_impl_test.cc",
|
"src/writer/wgsl/generator_impl_test.cc",
|
||||||
"src/writer/wgsl/generator_impl_type_test.cc",
|
"src/writer/wgsl/generator_impl_type_test.cc",
|
||||||
"src/writer/wgsl/generator_impl_unary_method_test.cc",
|
|
||||||
"src/writer/wgsl/generator_impl_unary_op_test.cc",
|
"src/writer/wgsl/generator_impl_unary_op_test.cc",
|
||||||
"src/writer/wgsl/generator_impl_variable_decl_statement_test.cc",
|
"src/writer/wgsl/generator_impl_variable_decl_statement_test.cc",
|
||||||
"src/writer/wgsl/generator_impl_variable_test.cc",
|
"src/writer/wgsl/generator_impl_variable_test.cc",
|
||||||
|
|
|
@ -41,7 +41,7 @@ TEST_F(CaseStatementTest, Creation_i32) {
|
||||||
auto* kill_ptr = stmts[0].get();
|
auto* kill_ptr = stmts[0].get();
|
||||||
|
|
||||||
CaseStatement c(std::move(b), std::move(stmts));
|
CaseStatement c(std::move(b), std::move(stmts));
|
||||||
ASSERT_EQ(c.selectors().size(), 1);
|
ASSERT_EQ(c.selectors().size(), 1u);
|
||||||
EXPECT_EQ(c.selectors()[0].get(), int_ptr);
|
EXPECT_EQ(c.selectors()[0].get(), int_ptr);
|
||||||
ASSERT_EQ(c.body().size(), 1u);
|
ASSERT_EQ(c.body().size(), 1u);
|
||||||
EXPECT_EQ(c.body()[0].get(), kill_ptr);
|
EXPECT_EQ(c.body()[0].get(), kill_ptr);
|
||||||
|
@ -60,7 +60,7 @@ TEST_F(CaseStatementTest, Creation_u32) {
|
||||||
auto* kill_ptr = stmts[0].get();
|
auto* kill_ptr = stmts[0].get();
|
||||||
|
|
||||||
CaseStatement c(std::move(b), std::move(stmts));
|
CaseStatement c(std::move(b), std::move(stmts));
|
||||||
ASSERT_EQ(c.selectors().size(), 1);
|
ASSERT_EQ(c.selectors().size(), 1u);
|
||||||
EXPECT_EQ(c.selectors()[0].get(), int_ptr);
|
EXPECT_EQ(c.selectors()[0].get(), int_ptr);
|
||||||
ASSERT_EQ(c.body().size(), 1u);
|
ASSERT_EQ(c.body().size(), 1u);
|
||||||
EXPECT_EQ(c.body()[0].get(), kill_ptr);
|
EXPECT_EQ(c.body()[0].get(), kill_ptr);
|
||||||
|
|
|
@ -382,17 +382,33 @@ FunctionEmitter::FunctionEmitter(ParserImpl* pi,
|
||||||
|
|
||||||
FunctionEmitter::~FunctionEmitter() = default;
|
FunctionEmitter::~FunctionEmitter() = default;
|
||||||
|
|
||||||
|
FunctionEmitter::StatementBlock::StatementBlock(
|
||||||
|
const Construct* construct,
|
||||||
|
uint32_t end_id,
|
||||||
|
CompletionAction completion_action,
|
||||||
|
ast::StatementList statements,
|
||||||
|
ast::CaseStatementList cases)
|
||||||
|
: construct_(construct),
|
||||||
|
end_id_(end_id),
|
||||||
|
completion_action_(completion_action),
|
||||||
|
statements_(std::move(statements)),
|
||||||
|
cases_(std::move(cases)) {}
|
||||||
|
|
||||||
|
FunctionEmitter::StatementBlock::StatementBlock(StatementBlock&&) = default;
|
||||||
|
|
||||||
|
FunctionEmitter::StatementBlock::~StatementBlock() = default;
|
||||||
|
|
||||||
void FunctionEmitter::PushNewStatementBlock(const Construct* construct,
|
void FunctionEmitter::PushNewStatementBlock(const Construct* construct,
|
||||||
uint32_t end_id,
|
uint32_t end_id,
|
||||||
CompletionAction action) {
|
CompletionAction action) {
|
||||||
statements_stack_.emplace_back(StatementBlock{construct, end_id, action,
|
statements_stack_.emplace_back(StatementBlock(construct, end_id, action,
|
||||||
ast::StatementList{},
|
ast::StatementList{},
|
||||||
ast::CaseStatementList{}});
|
ast::CaseStatementList{}));
|
||||||
}
|
}
|
||||||
|
|
||||||
const ast::StatementList& FunctionEmitter::ast_body() {
|
const ast::StatementList& FunctionEmitter::ast_body() {
|
||||||
assert(!statements_stack_.empty());
|
assert(!statements_stack_.empty());
|
||||||
return statements_stack_[0].statements;
|
return statements_stack_[0].statements_;
|
||||||
}
|
}
|
||||||
|
|
||||||
ast::Statement* FunctionEmitter::AddStatement(
|
ast::Statement* FunctionEmitter::AddStatement(
|
||||||
|
@ -400,14 +416,14 @@ ast::Statement* FunctionEmitter::AddStatement(
|
||||||
assert(!statements_stack_.empty());
|
assert(!statements_stack_.empty());
|
||||||
auto* result = statement.get();
|
auto* result = statement.get();
|
||||||
if (result != nullptr) {
|
if (result != nullptr) {
|
||||||
statements_stack_.back().statements.emplace_back(std::move(statement));
|
statements_stack_.back().statements_.emplace_back(std::move(statement));
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
ast::Statement* FunctionEmitter::LastStatement() {
|
ast::Statement* FunctionEmitter::LastStatement() {
|
||||||
assert(!statements_stack_.empty());
|
assert(!statements_stack_.empty());
|
||||||
const auto& statement_list = statements_stack_.back().statements;
|
const auto& statement_list = statements_stack_.back().statements_;
|
||||||
assert(!statement_list.empty());
|
assert(!statement_list.empty());
|
||||||
return statement_list.back().get();
|
return statement_list.back().get();
|
||||||
}
|
}
|
||||||
|
@ -435,7 +451,7 @@ bool FunctionEmitter::Emit() {
|
||||||
"element but has "
|
"element but has "
|
||||||
<< statements_stack_.size();
|
<< statements_stack_.size();
|
||||||
}
|
}
|
||||||
ast::StatementList body(std::move(statements_stack_[0].statements));
|
ast::StatementList body(std::move(statements_stack_[0].statements_));
|
||||||
parser_impl_.get_module().functions().back()->set_body(std::move(body));
|
parser_impl_.get_module().functions().back()->set_body(std::move(body));
|
||||||
// Maintain the invariant by repopulating the one and only element.
|
// Maintain the invariant by repopulating the one and only element.
|
||||||
statements_stack_.clear();
|
statements_stack_.clear();
|
||||||
|
@ -1553,7 +1569,7 @@ bool FunctionEmitter::EmitFunctionBodyStatements() {
|
||||||
// TODO(dneto): refactor how the first construct is created vs.
|
// TODO(dneto): refactor how the first construct is created vs.
|
||||||
// this statements stack entry is populated.
|
// this statements stack entry is populated.
|
||||||
assert(statements_stack_.size() == 1);
|
assert(statements_stack_.size() == 1);
|
||||||
statements_stack_[0].construct = function_construct;
|
statements_stack_[0].construct_ = function_construct;
|
||||||
|
|
||||||
for (auto block_id : block_order()) {
|
for (auto block_id : block_order()) {
|
||||||
if (!EmitBasicBlock(*GetBlockInfo(block_id))) {
|
if (!EmitBasicBlock(*GetBlockInfo(block_id))) {
|
||||||
|
@ -1566,9 +1582,9 @@ bool FunctionEmitter::EmitFunctionBodyStatements() {
|
||||||
bool FunctionEmitter::EmitBasicBlock(const BlockInfo& block_info) {
|
bool FunctionEmitter::EmitBasicBlock(const BlockInfo& block_info) {
|
||||||
// Close off previous constructs.
|
// Close off previous constructs.
|
||||||
while (!statements_stack_.empty() &&
|
while (!statements_stack_.empty() &&
|
||||||
(statements_stack_.back().end_id == block_info.id)) {
|
(statements_stack_.back().end_id_ == block_info.id)) {
|
||||||
StatementBlock& sb = statements_stack_.back();
|
StatementBlock& sb = statements_stack_.back();
|
||||||
sb.completion_action(&sb);
|
sb.completion_action_(&sb);
|
||||||
statements_stack_.pop_back();
|
statements_stack_.pop_back();
|
||||||
}
|
}
|
||||||
if (statements_stack_.empty()) {
|
if (statements_stack_.empty()) {
|
||||||
|
@ -1581,7 +1597,7 @@ bool FunctionEmitter::EmitBasicBlock(const BlockInfo& block_info) {
|
||||||
std::vector<const Construct*> entering_constructs; // inner most comes first
|
std::vector<const Construct*> entering_constructs; // inner most comes first
|
||||||
{
|
{
|
||||||
auto* here = block_info.construct;
|
auto* here = block_info.construct;
|
||||||
auto* const top_construct = statements_stack_.back().construct;
|
auto* const top_construct = statements_stack_.back().construct_;
|
||||||
while (here != top_construct) {
|
while (here != top_construct) {
|
||||||
// Only enter a construct at its header block.
|
// Only enter a construct at its header block.
|
||||||
if (here->begin_id == block_info.id) {
|
if (here->begin_id == block_info.id) {
|
||||||
|
@ -1783,7 +1799,7 @@ bool FunctionEmitter::EmitIfStart(const BlockInfo& block_info) {
|
||||||
// The "then" consists of the statement list
|
// The "then" consists of the statement list
|
||||||
// from the top of statments stack, without an
|
// from the top of statments stack, without an
|
||||||
// elseif condition.
|
// elseif condition.
|
||||||
if_stmt->set_body(std::move(s->statements));
|
if_stmt->set_body(std::move(s->statements_));
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1791,12 +1807,12 @@ bool FunctionEmitter::EmitIfStart(const BlockInfo& block_info) {
|
||||||
// Push the else clause onto the stack first.
|
// Push the else clause onto the stack first.
|
||||||
PushNewStatementBlock(construct, else_end, [if_stmt](StatementBlock* s) {
|
PushNewStatementBlock(construct, else_end, [if_stmt](StatementBlock* s) {
|
||||||
// Only set the else-clause if there are statements to fill it.
|
// Only set the else-clause if there are statements to fill it.
|
||||||
if (!s->statements.empty()) {
|
if (!s->statements_.empty()) {
|
||||||
// The "else" consists of the statement list from the top of statments
|
// The "else" consists of the statement list from the top of statments
|
||||||
// stack, without an elseif condition.
|
// stack, without an elseif condition.
|
||||||
ast::ElseStatementList else_stmts;
|
ast::ElseStatementList else_stmts;
|
||||||
else_stmts.emplace_back(std::make_unique<ast::ElseStatement>(
|
else_stmts.emplace_back(std::make_unique<ast::ElseStatement>(
|
||||||
nullptr, std::move(s->statements)));
|
nullptr, std::move(s->statements_)));
|
||||||
if_stmt->set_else_statements(std::move(else_stmts));
|
if_stmt->set_else_statements(std::move(else_stmts));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1821,7 +1837,7 @@ bool FunctionEmitter::EmitLoopStart(const Construct* construct) {
|
||||||
auto* loop = AddStatement(std::make_unique<ast::LoopStatement>())->AsLoop();
|
auto* loop = AddStatement(std::make_unique<ast::LoopStatement>())->AsLoop();
|
||||||
PushNewStatementBlock(
|
PushNewStatementBlock(
|
||||||
construct, construct->end_id,
|
construct, construct->end_id,
|
||||||
[loop](StatementBlock* s) { loop->set_body(std::move(s->statements)); });
|
[loop](StatementBlock* s) { loop->set_body(std::move(s->statements_)); });
|
||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1836,7 +1852,7 @@ bool FunctionEmitter::EmitContinuingStart(const Construct* construct) {
|
||||||
auto* loop = loop_candidate->AsLoop();
|
auto* loop = loop_candidate->AsLoop();
|
||||||
PushNewStatementBlock(construct, construct->end_id,
|
PushNewStatementBlock(construct, construct->end_id,
|
||||||
[loop](StatementBlock* s) {
|
[loop](StatementBlock* s) {
|
||||||
loop->set_continuing(std::move(s->statements));
|
loop->set_continuing(std::move(s->statements_));
|
||||||
});
|
});
|
||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
|
|
|
@ -448,21 +448,29 @@ class FunctionEmitter {
|
||||||
// A StatementBlock represents a braced-list of statements while it is being
|
// A StatementBlock represents a braced-list of statements while it is being
|
||||||
// constructed.
|
// constructed.
|
||||||
struct StatementBlock {
|
struct StatementBlock {
|
||||||
|
StatementBlock(const Construct* construct,
|
||||||
|
uint32_t end_id,
|
||||||
|
CompletionAction completion_action,
|
||||||
|
ast::StatementList statements,
|
||||||
|
ast::CaseStatementList cases);
|
||||||
|
StatementBlock(StatementBlock&&);
|
||||||
|
~StatementBlock();
|
||||||
|
|
||||||
// The construct to which this construct constributes.
|
// The construct to which this construct constributes.
|
||||||
const Construct* construct;
|
const Construct* construct_;
|
||||||
// The ID of the block at which the completion action should be triggerd
|
// The ID of the block at which the completion action should be triggerd
|
||||||
// and this statement block discarded. This is often the |end_id| of
|
// and this statement block discarded. This is often the |end_id| of
|
||||||
// |construct| itself.
|
// |construct| itself.
|
||||||
uint32_t end_id;
|
uint32_t end_id_;
|
||||||
// The completion action finishes processing this statement block.
|
// The completion action finishes processing this statement block.
|
||||||
CompletionAction completion_action;
|
CompletionAction completion_action_;
|
||||||
|
|
||||||
// Only one of |statements| or |cases| is active.
|
// Only one of |statements| or |cases| is active.
|
||||||
|
|
||||||
// The list of statements being built.
|
// The list of statements being built.
|
||||||
ast::StatementList statements;
|
ast::StatementList statements_;
|
||||||
// The list of cases being built, for a switch.
|
// The list of cases being built, for a switch.
|
||||||
ast::CaseStatementList cases;
|
ast::CaseStatementList cases_;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Pushes an empty statement block onto the statements stack.
|
/// Pushes an empty statement block onto the statements stack.
|
||||||
|
|
Loading…
Reference in New Issue