Fixed a couple of spots where sksl didn't have proper array support.
vec2 x[3] worked, but vec2[3] x didn't. Interface blocks also did
not work with array sizes.
BUG=skia:
Change-Id: I45b424891db46804f1e3c1f4793470b7b501a6de
Reviewed-on: https://skia-review.googlesource.com/8523
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ben Wagner <benjaminwagner@google.com>
diff --git a/src/sksl/ast/SkSLASTInterfaceBlock.h b/src/sksl/ast/SkSLASTInterfaceBlock.h
index 9cd99d5..7647fb5 100644
--- a/src/sksl/ast/SkSLASTInterfaceBlock.h
+++ b/src/sksl/ast/SkSLASTInterfaceBlock.h
@@ -25,31 +25,41 @@
// valueName is empty when it was not present in the source
ASTInterfaceBlock(Position position,
Modifiers modifiers,
- SkString interfaceName,
- SkString valueName,
- std::vector<std::unique_ptr<ASTVarDeclarations>> declarations)
+ SkString typeName,
+ std::vector<std::unique_ptr<ASTVarDeclarations>> declarations,
+ SkString instanceName,
+ std::vector<std::unique_ptr<ASTExpression>> sizes)
: INHERITED(position, kInterfaceBlock_Kind)
, fModifiers(modifiers)
- , fInterfaceName(std::move(interfaceName))
- , fValueName(std::move(valueName))
- , fDeclarations(std::move(declarations)) {}
+ , fTypeName(std::move(typeName))
+ , fDeclarations(std::move(declarations))
+ , fInstanceName(std::move(instanceName))
+ , fSizes(std::move(sizes)) {}
SkString description() const override {
- SkString result = fModifiers.description() + fInterfaceName + " {\n";
+ SkString result = fModifiers.description() + fTypeName + " {\n";
for (size_t i = 0; i < fDeclarations.size(); i++) {
result += fDeclarations[i]->description() + "\n";
}
result += "}";
- if (fValueName.size()) {
- result += " " + fValueName;
+ if (fInstanceName.size()) {
+ result += " " + fInstanceName;
+ for (const auto& size : fSizes) {
+ result += "[";
+ if (size) {
+ result += size->description();
+ }
+ result += "]";
+ }
}
return result + ";";
}
const Modifiers fModifiers;
- const SkString fInterfaceName;
- const SkString fValueName;
+ const SkString fTypeName;
const std::vector<std::unique_ptr<ASTVarDeclarations>> fDeclarations;
+ const SkString fInstanceName;
+ const std::vector<std::unique_ptr<ASTExpression>> fSizes;
typedef ASTDeclaration INHERITED;
};