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;