• 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/DSLStatement.h"
9 
10 #include "include/private/SkSLDefines.h"
11 #include "include/sksl/DSLBlock.h"
12 #include "include/sksl/DSLExpression.h"
13 #include "include/sksl/SkSLPosition.h"
14 #include "src/sksl/SkSLThreadContext.h"
15 #include "src/sksl/ir/SkSLBlock.h"
16 #include "src/sksl/ir/SkSLExpression.h"
17 #include "src/sksl/ir/SkSLExpressionStatement.h"
18 #include "src/sksl/ir/SkSLNop.h"
19 
20 namespace SkSL {
21 
22 namespace dsl {
23 
DSLStatement()24 DSLStatement::DSLStatement() {}
25 
DSLStatement(DSLBlock block)26 DSLStatement::DSLStatement(DSLBlock block)
27     : fStatement(block.release()) {}
28 
DSLStatement(DSLExpression expr)29 DSLStatement::DSLStatement(DSLExpression expr) {
30     std::unique_ptr<SkSL::Expression> skslExpr = expr.release();
31     if (skslExpr) {
32         fStatement = SkSL::ExpressionStatement::Convert(ThreadContext::Context(),
33                                                         std::move(skslExpr));
34     }
35 }
36 
DSLStatement(std::unique_ptr<SkSL::Expression> expr)37 DSLStatement::DSLStatement(std::unique_ptr<SkSL::Expression> expr)
38     : fStatement(SkSL::ExpressionStatement::Convert(ThreadContext::Context(), std::move(expr))) {
39     SkASSERT(this->hasValue());
40 }
41 
DSLStatement(std::unique_ptr<SkSL::Statement> stmt)42 DSLStatement::DSLStatement(std::unique_ptr<SkSL::Statement> stmt)
43     : fStatement(std::move(stmt)) {
44     SkASSERT(this->hasValue());
45 }
46 
DSLStatement(std::unique_ptr<SkSL::Statement> stmt,Position pos)47 DSLStatement::DSLStatement(std::unique_ptr<SkSL::Statement> stmt, Position pos)
48         : fStatement(stmt ? std::move(stmt) : SkSL::Nop::Make()) {
49     if (pos.valid() && !fStatement->fPosition.valid()) {
50         fStatement->fPosition = pos;
51     }
52 }
53 
~DSLStatement()54 DSLStatement::~DSLStatement() {}
55 
operator ,(DSLStatement left,DSLStatement right)56 DSLStatement operator,(DSLStatement left, DSLStatement right) {
57     Position pos = left.fStatement->fPosition;
58     StatementArray stmts;
59     stmts.reserve_back(2);
60     stmts.push_back(left.release());
61     stmts.push_back(right.release());
62     return DSLStatement(SkSL::Block::Make(pos, std::move(stmts), Block::Kind::kCompoundStatement));
63 }
64 
65 } // namespace dsl
66 
67 } // namespace SkSL
68