1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2021 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SkSLProgramWriter_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SkSLProgramWriter_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/analysis/SkSLProgramVisitor.h" 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker namespace SkSL { 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker struct ProgramWriterTypes { 16*c8dee2aaSAndroid Build Coastguard Worker using Program = SkSL::Program; 17*c8dee2aaSAndroid Build Coastguard Worker using Expression = SkSL::Expression; 18*c8dee2aaSAndroid Build Coastguard Worker using Statement = SkSL::Statement; 19*c8dee2aaSAndroid Build Coastguard Worker using ProgramElement = SkSL::ProgramElement; 20*c8dee2aaSAndroid Build Coastguard Worker using UniquePtrExpression = std::unique_ptr<SkSL::Expression>; 21*c8dee2aaSAndroid Build Coastguard Worker using UniquePtrStatement = std::unique_ptr<SkSL::Statement>; 22*c8dee2aaSAndroid Build Coastguard Worker }; 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker extern template class TProgramVisitor<ProgramWriterTypes>; 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard Worker class ProgramWriter : public TProgramVisitor<ProgramWriterTypes> { 27*c8dee2aaSAndroid Build Coastguard Worker public: 28*c8dee2aaSAndroid Build Coastguard Worker // Subclass these methods if you want access to the unique_ptrs of IRNodes in a program. 29*c8dee2aaSAndroid Build Coastguard Worker // This will allow statements or expressions to be replaced during a visit. visitExpressionPtr(std::unique_ptr<Expression> & e)30*c8dee2aaSAndroid Build Coastguard Worker bool visitExpressionPtr(std::unique_ptr<Expression>& e) override { 31*c8dee2aaSAndroid Build Coastguard Worker return this->visitExpression(*e); 32*c8dee2aaSAndroid Build Coastguard Worker } visitStatementPtr(std::unique_ptr<Statement> & s)33*c8dee2aaSAndroid Build Coastguard Worker bool visitStatementPtr(std::unique_ptr<Statement>& s) override { 34*c8dee2aaSAndroid Build Coastguard Worker return this->visitStatement(*s); 35*c8dee2aaSAndroid Build Coastguard Worker } 36*c8dee2aaSAndroid Build Coastguard Worker }; 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker } // namespace SkSL 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker #endif 41