• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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