DSLWriter now cleans up the changes it makes to IRGenerator
Change-Id: I83380bde91146b0b28365b76359cecea0d99da1c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/371196
Auto-Submit: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/src/sksl/dsl/priv/DSLWriter.cpp b/src/sksl/dsl/priv/DSLWriter.cpp
index 490ff6a..ba0fb71 100644
--- a/src/sksl/dsl/priv/DSLWriter.cpp
+++ b/src/sksl/dsl/priv/DSLWriter.cpp
@@ -27,11 +27,19 @@
: fCompiler(compiler) {
SkSL::ParsedModule module = fCompiler->moduleForProgramKind(SkSL::ProgramKind::kFragment);
SkSL::IRGenerator& ir = *fCompiler->fIRGenerator;
+ fOldSymbolTable = ir.fSymbolTable;
+ fOldSettings = ir.fSettings;
ir.fSymbolTable = module.fSymbols;
ir.fSettings = &fSettings;
ir.pushSymbolTable();
}
+DSLWriter::~DSLWriter() {
+ SkSL::IRGenerator& ir = *fCompiler->fIRGenerator;
+ ir.fSymbolTable = fOldSymbolTable;
+ ir.fSettings = fOldSettings;
+}
+
SkSL::IRGenerator& DSLWriter::IRGenerator() {
return *Compiler().fIRGenerator;
}
diff --git a/src/sksl/dsl/priv/DSLWriter.h b/src/sksl/dsl/priv/DSLWriter.h
index 769350b..0e1f739 100644
--- a/src/sksl/dsl/priv/DSLWriter.h
+++ b/src/sksl/dsl/priv/DSLWriter.h
@@ -43,6 +43,8 @@
public:
DSLWriter(SkSL::Compiler* compiler);
+ ~DSLWriter();
+
/**
* Returns the Compiler used by DSL operations in the current thread.
*/
@@ -181,6 +183,8 @@
private:
SkSL::Program::Settings fSettings;
SkSL::Compiler* fCompiler;
+ std::shared_ptr<SkSL::SymbolTable> fOldSymbolTable;
+ const SkSL::Program::Settings* fOldSettings;
std::vector<std::unique_ptr<SkSL::ProgramElement>> fProgramElements;
ErrorHandler* fErrorHandler = nullptr;
bool fMangle = true;