1 /*
2 * Copyright 2021 Google LLC.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #include "include/sksl/DSLBlock.h"
9
10 #include "include/sksl/DSLStatement.h"
11 #include "include/sksl/SkSLPosition.h"
12 #include "src/sksl/ir/SkSLBlock.h"
13
14 #include <utility>
15
16 namespace SkSL {
17
18 namespace dsl {
19
DSLBlock(SkSL::StatementArray statements,std::shared_ptr<SymbolTable> symbols,Position pos)20 DSLBlock::DSLBlock(SkSL::StatementArray statements,
21 std::shared_ptr<SymbolTable> symbols,
22 Position pos)
23 : fStatements(std::move(statements))
24 , fSymbols(std::move(symbols))
25 , fPosition(pos) {}
26
DSLBlock(SkTArray<DSLStatement> statements,std::shared_ptr<SymbolTable> symbols,Position pos)27 DSLBlock::DSLBlock(SkTArray<DSLStatement> statements,
28 std::shared_ptr<SymbolTable> symbols,
29 Position pos)
30 : fSymbols(std::move(symbols))
31 , fPosition(pos) {
32 fStatements.reserve_back(statements.size());
33 for (DSLStatement& s : statements) {
34 fStatements.push_back(s.release());
35 }
36 }
37
release()38 std::unique_ptr<SkSL::Block> DSLBlock::release() {
39 return std::make_unique<SkSL::Block>(fPosition, std::move(fStatements),
40 Block::Kind::kBracedScope, std::move(fSymbols));
41 }
42
append(DSLStatement stmt)43 void DSLBlock::append(DSLStatement stmt) {
44 fStatements.push_back(stmt.release());
45 }
46
47 } // namespace dsl
48
49 } // namespace SkSL
50