Migrate additional casts to as<T>.
These changes shook out a few const-correctness issues and make me
wonder about constness within the symbol table. Please check the
review notes!
Change-Id: Ic204a7b639caab08b9de92fe8d1d029b0ffb6582
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/312082
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
diff --git a/src/sksl/SkSLByteCodeGenerator.cpp b/src/sksl/SkSLByteCodeGenerator.cpp
index 86c874e..ad3293b 100644
--- a/src/sksl/SkSLByteCodeGenerator.cpp
+++ b/src/sksl/SkSLByteCodeGenerator.cpp
@@ -211,7 +211,7 @@
// Otherwise, return -1.
static int expression_as_builtin(const Expression& e) {
if (e.fKind == Expression::kVariableReference_Kind) {
- const Variable& var(((VariableReference&)e).fVariable);
+ const Variable& var(e.as<VariableReference>().fVariable);
if (var.fStorage == Variable::kGlobal_Storage) {
return var.fModifiers.fLayout.fBuiltin;
}
@@ -450,9 +450,9 @@
int offset = 0;
for (const auto& e : fProgram) {
if (e.fKind == ProgramElement::kVar_Kind) {
- VarDeclarations& decl = (VarDeclarations&) e;
+ const VarDeclarations& decl = e.as<VarDeclarations>();
for (const auto& v : decl.fVars) {
- const Variable* declVar = ((VarDeclaration&) *v).fVar;
+ const Variable* declVar = v->as<VarDeclaration>().fVar;
if (declVar->fType != *fContext.fFragmentProcessor_Type) {
continue;
}
@@ -480,9 +480,9 @@
bool isUniform = is_uniform(var);
for (const auto& e : fProgram) {
if (e.fKind == ProgramElement::kVar_Kind) {
- VarDeclarations& decl = (VarDeclarations&) e;
+ const VarDeclarations& decl = e.as<VarDeclarations>();
for (const auto& v : decl.fVars) {
- const Variable* declVar = ((VarDeclaration&) *v).fVar;
+ const Variable* declVar = v->as<VarDeclaration>().fVar;
if (declVar->fModifiers.fLayout.fBuiltin >= 0 || is_in(*declVar)) {
continue;
}
@@ -509,7 +509,7 @@
ByteCodeGenerator::Location ByteCodeGenerator::getLocation(const Expression& expr) {
switch (expr.fKind) {
case Expression::kFieldAccess_Kind: {
- const FieldAccess& f = (const FieldAccess&)expr;
+ const FieldAccess& f = expr.as<FieldAccess>();
Location baseLoc = this->getLocation(*f.fBase);
int offset = 0;
for (int i = 0; i < f.fFieldIndex; ++i) {
@@ -527,7 +527,7 @@
}
}
case Expression::kIndex_Kind: {
- const IndexExpression& i = (const IndexExpression&)expr;
+ const IndexExpression& i = expr.as<IndexExpression>();
int stride = SlotCount(i.fType);
int length = i.fBase->fType.columns();
SkASSERT(length <= 255);
@@ -583,7 +583,7 @@
return baseLoc.makeOnStack();
}
case Expression::kSwizzle_Kind: {
- const Swizzle& s = (const Swizzle&)expr;
+ const Swizzle& s = expr.as<Swizzle>();
SkASSERT(swizzle_is_simple(s));
Location baseLoc = this->getLocation(*s.fBase);
int offset = s.fComponents[0];
@@ -599,7 +599,7 @@
}
}
case Expression::kVariableReference_Kind: {
- const Variable& var = ((const VariableReference&)expr).fVariable;
+ const Variable& var = expr.as<VariableReference>().fVariable;
return this->getLocation(var);
}
default:
@@ -1741,7 +1741,7 @@
void ByteCodeGenerator::writeVarDeclarations(const VarDeclarations& v) {
for (const auto& declStatement : v.fVars) {
- const VarDeclaration& decl = (VarDeclaration&) *declStatement;
+ const VarDeclaration& decl = declStatement->as<VarDeclaration>();
// we need to grab the location even if we don't use it, to ensure it has been allocated
Location location = this->getLocation(*decl.fVar);
if (decl.fValue) {