Remove custom iterators from SkSL::Program
Instead, just expose the vector directly (as elements()).
Change-Id: I9f6a3ae38cd8e6f1b0a1087a42d61452fe883924
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/324130
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/sksl/SkSLMetalCodeGenerator.cpp b/src/sksl/SkSLMetalCodeGenerator.cpp
index 63dc6c7..b4ae66c 100644
--- a/src/sksl/SkSLMetalCodeGenerator.cpp
+++ b/src/sksl/SkSLMetalCodeGenerator.cpp
@@ -953,9 +953,9 @@
this->write(", constant Uniforms& _uniforms [[buffer(" +
to_string(fUniformBuffer) + ")]]");
}
- for (const auto& e : fProgram) {
- if (e.is<GlobalVarDeclaration>()) {
- const GlobalVarDeclaration& decls = e.as<GlobalVarDeclaration>();
+ for (const auto& e : fProgram.elements()) {
+ if (e->is<GlobalVarDeclaration>()) {
+ const GlobalVarDeclaration& decls = e->as<GlobalVarDeclaration>();
const VarDeclaration& var = *decls.fDecl;
if (var.fVar->type().typeKind() == Type::TypeKind::kSampler) {
if (var.fVar->modifiers().fLayout.fBinding < 0) {
@@ -980,8 +980,8 @@
this->write(to_string(var.fVar->modifiers().fLayout.fBinding));
this->write(")]]");
}
- } else if (e.kind() == ProgramElement::Kind::kInterfaceBlock) {
- InterfaceBlock& intf = (InterfaceBlock&) e;
+ } else if (e->is<InterfaceBlock>()) {
+ const InterfaceBlock& intf = e->as<InterfaceBlock>();
if ("sk_PerVertex" == intf.fTypeName) {
continue;
}
@@ -1392,9 +1392,9 @@
}
void MetalCodeGenerator::writeUniformStruct() {
- for (const auto& e : fProgram) {
- if (e.is<GlobalVarDeclaration>()) {
- const GlobalVarDeclaration& decls = e.as<GlobalVarDeclaration>();
+ for (const auto& e : fProgram.elements()) {
+ if (e->is<GlobalVarDeclaration>()) {
+ const GlobalVarDeclaration& decls = e->as<GlobalVarDeclaration>();
const Variable& var = *decls.fDecl->fVar;
if (var.modifiers().fFlags & Modifiers::kUniform_Flag &&
var.type().typeKind() != Type::TypeKind::kSampler) {
@@ -1425,9 +1425,9 @@
void MetalCodeGenerator::writeInputStruct() {
this->write("struct Inputs {\n");
- for (const auto& e : fProgram) {
- if (e.is<GlobalVarDeclaration>()) {
- const GlobalVarDeclaration& decls = e.as<GlobalVarDeclaration>();
+ for (const auto& e : fProgram.elements()) {
+ if (e->is<GlobalVarDeclaration>()) {
+ const GlobalVarDeclaration& decls = e->as<GlobalVarDeclaration>();
const Variable& var = *decls.fDecl->fVar;
if (var.modifiers().fFlags & Modifiers::kIn_Flag &&
-1 == var.modifiers().fLayout.fBuiltin) {
@@ -1458,9 +1458,9 @@
} else if (fProgram.fKind == Program::kFragment_Kind) {
this->write(" float4 sk_FragColor [[color(0)]];\n");
}
- for (const auto& e : fProgram) {
- if (e.is<GlobalVarDeclaration>()) {
- const GlobalVarDeclaration& decls = e.as<GlobalVarDeclaration>();
+ for (const auto& e : fProgram.elements()) {
+ if (e->is<GlobalVarDeclaration>()) {
+ const GlobalVarDeclaration& decls = e->as<GlobalVarDeclaration>();
const Variable& var = *decls.fDecl->fVar;
if (var.modifiers().fFlags & Modifiers::kOut_Flag &&
-1 == var.modifiers().fLayout.fBuiltin) {
@@ -1492,9 +1492,9 @@
void MetalCodeGenerator::writeInterfaceBlocks() {
bool wroteInterfaceBlock = false;
- for (const auto& e : fProgram) {
- if (e.kind() == ProgramElement::Kind::kInterfaceBlock) {
- this->writeInterfaceBlock(e.as<InterfaceBlock>());
+ for (const auto& e : fProgram.elements()) {
+ if (e->is<InterfaceBlock>()) {
+ this->writeInterfaceBlock(e->as<InterfaceBlock>());
wroteInterfaceBlock = true;
}
}
@@ -1510,11 +1510,11 @@
for (const auto& [interfaceType, interfaceName] : fInterfaceBlockNameMap) {
visitor->VisitInterfaceBlock(*interfaceType, interfaceName);
}
- for (const ProgramElement& element : fProgram) {
- if (!element.is<GlobalVarDeclaration>()) {
+ for (const auto& element : fProgram.elements()) {
+ if (!element->is<GlobalVarDeclaration>()) {
continue;
}
- const GlobalVarDeclaration& decls = element.as<GlobalVarDeclaration>();
+ const GlobalVarDeclaration& decls = element->as<GlobalVarDeclaration>();
const VarDeclaration& decl = *decls.fDecl;
const Variable& var = *decl.fVar;
if ((!var.modifiers().fFlags && -1 == var.modifiers().fLayout.fBuiltin) ||
@@ -1809,9 +1809,9 @@
auto found = fRequirements.find(&f);
if (found == fRequirements.end()) {
fRequirements[&f] = kNo_Requirements;
- for (const auto& e : fProgram) {
- if (e.kind() == ProgramElement::Kind::kFunction) {
- const FunctionDefinition& def = e.as<FunctionDefinition>();
+ for (const auto& e : fProgram.elements()) {
+ if (e->is<FunctionDefinition>()) {
+ const FunctionDefinition& def = e->as<FunctionDefinition>();
if (&def.fDeclaration == &f) {
Requirements reqs = this->requirements(def.fBody.get());
fRequirements[&f] = reqs;
@@ -1835,8 +1835,8 @@
this->writeGlobalStruct();
StringStream body;
fOut = &body;
- for (const auto& e : fProgram) {
- this->writeProgramElement(e);
+ for (const auto& e : fProgram.elements()) {
+ this->writeProgramElement(*e);
}
fOut = rawOut;