diff options
author | 2022-04-03 16:34:10 -0700 | |
---|---|---|
committer | 2022-04-03 16:34:10 -0700 | |
commit | a87508008dfa1604baf2d4e39bf44704c00f261c (patch) | |
tree | 0be2ade96772037a02803b30e157c367d931e3d9 /src/deps/skia/include/sksl/DSLStatement.h | |
parent | 4a19a3f07f1887903e5638a3be167f0c7b377ba3 (diff) | |
download | bun-jarred/canvas.tar.gz bun-jarred/canvas.tar.zst bun-jarred/canvas.zip |
skia WIPjarred/canvas
Diffstat (limited to 'src/deps/skia/include/sksl/DSLStatement.h')
-rw-r--r-- | src/deps/skia/include/sksl/DSLStatement.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/src/deps/skia/include/sksl/DSLStatement.h b/src/deps/skia/include/sksl/DSLStatement.h new file mode 100644 index 000000000..976198ca1 --- /dev/null +++ b/src/deps/skia/include/sksl/DSLStatement.h @@ -0,0 +1,111 @@ +/* + * Copyright 2021 Google LLC. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SKSL_DSL_STATEMENT +#define SKSL_DSL_STATEMENT + +#include "include/core/SkString.h" +#include "include/core/SkTypes.h" +#include "include/private/SkSLStatement.h" +#include "include/sksl/SkSLErrorReporter.h" + +#include <memory> + +class GrGLSLShaderBuilder; + +namespace SkSL { + +class Expression; +class Statement; + +namespace dsl { + +class DSLBlock; +class DSLExpression; +class DSLPossibleExpression; +class DSLPossibleStatement; +class DSLVar; + +class DSLStatement { +public: + DSLStatement(); + + DSLStatement(DSLExpression expr); + + DSLStatement(DSLPossibleExpression expr, PositionInfo pos = PositionInfo::Capture()); + + DSLStatement(DSLPossibleStatement stmt, PositionInfo pos = PositionInfo::Capture()); + + DSLStatement(DSLBlock block); + + DSLStatement(DSLStatement&&) = default; + + DSLStatement(std::unique_ptr<SkSL::Statement> stmt); + + DSLStatement(std::unique_ptr<SkSL::Expression> expr); + + ~DSLStatement(); + + DSLStatement& operator=(DSLStatement&& other) = default; + + bool hasValue() { return fStatement != nullptr; } + + std::unique_ptr<SkSL::Statement> release() { + SkASSERT(this->hasValue()); + return std::move(fStatement); + } + +private: + std::unique_ptr<SkSL::Statement> releaseIfPossible() { + return std::move(fStatement); + } + + std::unique_ptr<SkSL::Statement> fStatement; + + friend class DSLBlock; + friend class DSLCore; + friend class DSLExpression; + friend class DSLPossibleStatement; + friend class DSLWriter; + friend DSLStatement operator,(DSLStatement left, DSLStatement right); +}; + +/** + * Represents a Statement which may have failed and/or have pending errors to report. Converting a + * PossibleStatement into a Statement requires PositionInfo so that any pending errors can be + * reported at the correct position. + * + * PossibleStatement is used instead of Statement in situations where it is not possible to capture + * the PositionInfo at the time of Statement construction. + */ +class DSLPossibleStatement { +public: + DSLPossibleStatement(std::unique_ptr<SkSL::Statement> stmt); + + DSLPossibleStatement(DSLPossibleStatement&& other) = default; + + ~DSLPossibleStatement(); + + bool hasValue() { return fStatement != nullptr; } + + std::unique_ptr<SkSL::Statement> release() { + return DSLStatement(std::move(*this)).release(); + } + +private: + std::unique_ptr<SkSL::Statement> fStatement; + + friend class DSLStatement; +}; + +DSLStatement operator,(DSLStatement left, DSLStatement right); + +} // namespace dsl + +} // namespace SkSL + +#endif |