xref: /aosp_15_r20/external/skia/src/sksl/transform/SkSLProgramWriter.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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 #ifndef SkSLProgramWriter_DEFINED
9 #define SkSLProgramWriter_DEFINED
10 
11 #include "src/sksl/analysis/SkSLProgramVisitor.h"
12 
13 namespace SkSL {
14 
15 struct ProgramWriterTypes {
16     using Program = SkSL::Program;
17     using Expression = SkSL::Expression;
18     using Statement = SkSL::Statement;
19     using ProgramElement = SkSL::ProgramElement;
20     using UniquePtrExpression = std::unique_ptr<SkSL::Expression>;
21     using UniquePtrStatement = std::unique_ptr<SkSL::Statement>;
22 };
23 
24 extern template class TProgramVisitor<ProgramWriterTypes>;
25 
26 class ProgramWriter : public TProgramVisitor<ProgramWriterTypes> {
27 public:
28     // Subclass these methods if you want access to the unique_ptrs of IRNodes in a program.
29     // This will allow statements or expressions to be replaced during a visit.
visitExpressionPtr(std::unique_ptr<Expression> & e)30     bool visitExpressionPtr(std::unique_ptr<Expression>& e) override {
31         return this->visitExpression(*e);
32     }
visitStatementPtr(std::unique_ptr<Statement> & s)33     bool visitStatementPtr(std::unique_ptr<Statement>& s) override {
34         return this->visitStatement(*s);
35     }
36 };
37 
38 } // namespace SkSL
39 
40 #endif
41