diff options
Diffstat (limited to 'src/sksl/SkSLCompiler.cpp')
-rw-r--r-- | src/sksl/SkSLCompiler.cpp | 40 |
1 files changed, 15 insertions, 25 deletions
diff --git a/src/sksl/SkSLCompiler.cpp b/src/sksl/SkSLCompiler.cpp index f63ef977be..dd20b5c257 100644 --- a/src/sksl/SkSLCompiler.cpp +++ b/src/sksl/SkSLCompiler.cpp @@ -262,12 +262,10 @@ void Compiler::addDefinitions(const BasicBlock::Node& node, } case BasicBlock::Node::kStatement_Kind: { const Statement* stmt = (Statement*) node.statement()->get(); - if (stmt->fKind == Statement::kVarDeclarations_Kind) { - VarDeclarationsStatement* vd = (VarDeclarationsStatement*) stmt; - for (const auto& decl : vd->fDeclaration->fVars) { - if (decl->fValue) { - (*definitions)[decl->fVar] = &decl->fValue; - } + if (stmt->fKind == Statement::kVarDeclaration_Kind) { + VarDeclaration& vd = (VarDeclaration&) *stmt; + if (vd.fValue) { + (*definitions)[vd.fVar] = &vd.fValue; } } break; @@ -324,7 +322,7 @@ static DefinitionMap compute_start_state(const CFG& cfg) { if (s->fKind == Statement::kVarDeclarations_Kind) { const VarDeclarationsStatement* vd = (const VarDeclarationsStatement*) s; for (const auto& decl : vd->fDeclaration->fVars) { - result[decl->fVar] = nullptr; + result[((VarDeclaration&) *decl).fVar] = nullptr; } } } @@ -846,27 +844,19 @@ void Compiler::simplifyStatement(DefinitionMap& definitions, bool* outNeedsRescan) { Statement* stmt = (*iter)->statement()->get(); switch (stmt->fKind) { - case Statement::kVarDeclarations_Kind: { - VarDeclarations& vd = *((VarDeclarationsStatement&) *stmt).fDeclaration; - for (auto varIter = vd.fVars.begin(); varIter != vd.fVars.end(); ) { - const auto& varDecl = **varIter; - if (varDecl.fVar->dead() && - (!varDecl.fValue || - !varDecl.fValue->hasSideEffects())) { - if (varDecl.fValue) { - ASSERT((*iter)->statement()->get() == stmt); - if (!b.tryRemoveExpressionBefore(iter, varDecl.fValue.get())) { - *outNeedsRescan = true; - } + case Statement::kVarDeclaration_Kind: { + const auto& varDecl = (VarDeclaration&) *stmt; + if (varDecl.fVar->dead() && + (!varDecl.fValue || + !varDecl.fValue->hasSideEffects())) { + if (varDecl.fValue) { + ASSERT((*iter)->statement()->get() == stmt); + if (!b.tryRemoveExpressionBefore(iter, varDecl.fValue.get())) { + *outNeedsRescan = true; } - varIter = vd.fVars.erase(varIter); - *outUpdated = true; - } else { - ++varIter; } - } - if (vd.fVars.size() == 0) { (*iter)->setStatement(std::unique_ptr<Statement>(new Nop())); + *outUpdated = true; } break; } |