24c1772ea4
It turned out that everywhere we were using or testing DSL code either directly or indirectly imported big chunks of the SkSL library. These imports turned out to be necessary; code written using just DSL.h would fail with various template instantiation errors. Change-Id: Iae72d15b0d6ef14614ac1a4ff08c36bc1876cd4d Reviewed-on: https://skia-review.googlesource.com/c/skia/+/381638 Commit-Queue: Ethan Nicholas <ethannicholas@google.com> Reviewed-by: John Stiles <johnstiles@google.com>
98 lines
2.1 KiB
C++
98 lines
2.1 KiB
C++
/*
|
|
* 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/DSLErrorHandling.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());
|
|
|
|
DSLStatement(DSLPossibleStatement stmt, PositionInfo pos = PositionInfo());
|
|
|
|
DSLStatement(DSLBlock block);
|
|
|
|
DSLStatement(DSLStatement&&) = default;
|
|
|
|
~DSLStatement();
|
|
|
|
std::unique_ptr<SkSL::Statement> release() {
|
|
return std::move(fStatement);
|
|
}
|
|
|
|
private:
|
|
DSLStatement(std::unique_ptr<SkSL::Statement> stmt);
|
|
|
|
DSLStatement(std::unique_ptr<SkSL::Expression> expr);
|
|
|
|
std::unique_ptr<SkSL::Statement> fStatement;
|
|
|
|
friend class DSLBlock;
|
|
friend class DSLCore;
|
|
friend class DSLExpression;
|
|
friend class DSLPossibleStatement;
|
|
friend class DSLWriter;
|
|
};
|
|
|
|
/**
|
|
* 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();
|
|
|
|
std::unique_ptr<SkSL::Statement> release() {
|
|
return std::move(fStatement);
|
|
}
|
|
|
|
private:
|
|
std::unique_ptr<SkSL::Statement> fStatement;
|
|
|
|
friend class DSLStatement;
|
|
};
|
|
|
|
} // namespace dsl
|
|
|
|
} // namespace SkSL
|
|
|
|
#endif
|