#include "include/core/SkSpan.h"
#include "include/core/SkTypes.h"
#include "include/private/base/SkDebug.h"
#include "src/base/SkEnumBitMask.h"
#include "src/core/SkTHash.h"
#include "src/sksl/SkSLAnalysis.h"
#include "src/sksl/SkSLModule.h"
#include "src/sksl/analysis/SkSLProgramUsage.h"
#include "src/sksl/analysis/SkSLProgramVisitor.h"
#include "src/sksl/ir/SkSLExpression.h"
#include "src/sksl/ir/SkSLFunctionCall.h"
#include "src/sksl/ir/SkSLFunctionDeclaration.h"
#include "src/sksl/ir/SkSLFunctionDefinition.h"
#include "src/sksl/ir/SkSLInterfaceBlock.h"
#include "src/sksl/ir/SkSLModifierFlags.h"
#include "src/sksl/ir/SkSLProgramElement.h"
#include "src/sksl/ir/SkSLStatement.h"
#include "src/sksl/ir/SkSLStructDefinition.h"
#include "src/sksl/ir/SkSLSymbol.h"
#include "src/sksl/ir/SkSLType.h"
#include "src/sksl/ir/SkSLVarDeclarations.h"
#include "src/sksl/ir/SkSLVariable.h"
#include "src/sksl/ir/SkSLVariableReference.h"
#include <cstring>
#include <memory>
#include <string_view>
#include <vector>
namespace SkSL {
struct Program;
namespace {
class ProgramUsageVisitor : public ProgramVisitor { … };
}
std::unique_ptr<ProgramUsage> Analysis::GetUsage(const Program& program) { … }
std::unique_ptr<ProgramUsage> Analysis::GetUsage(const Module& module) { … }
ProgramUsage::VariableCounts ProgramUsage::get(const Variable& v) const { … }
bool ProgramUsage::isDead(const Variable& v) const { … }
int ProgramUsage::get(const FunctionDeclaration& f) const { … }
void ProgramUsage::add(const Expression* expr) { … }
void ProgramUsage::add(const Statement* stmt) { … }
void ProgramUsage::add(const ProgramElement& element) { … }
void ProgramUsage::remove(const Expression* expr) { … }
void ProgramUsage::remove(const Statement* stmt) { … }
void ProgramUsage::remove(const ProgramElement& element) { … }
static bool contains_matching_data(const ProgramUsage& a, const ProgramUsage& b) { … }
bool ProgramUsage::operator==(const ProgramUsage& that) const { … }
}