Broke DSLVar into separate subclasses
Previously, DSLVar represented local, global, and parameter variables.
This splits it into three separate subclasses.
In addition to just being a cleaner API in general, this also addresses
an issue we ran into with the upcoming DSLParser: previously, a global
DSLVar's storage was not set correctly until DeclareGlobal was called,
so an AddToSymbolTable call prior to DeclareGlobal would create the
SkSL variable with the wrong storage, causing spurious errors on
global-only modifiers. But holding off on the AddToSymbolTable tends to
break constructs like "int x = 0, y = x", so improving the API seemed
like the best way to address it.
Now that we have greater type safety around variables, we can
potentially avoid having to call AddToSymbolTable for DSLVar and
DSLGlobalVar altogether, since we know they are both supposed to end up
in the symbol table, but that isn't something I want to change in this
CL.
Change-Id: I5f390a7384ce0af6a2131d84f97fc5e5b318063f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/428576
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/src/sksl/dsl/priv/DSLWriter.h b/src/sksl/dsl/priv/DSLWriter.h
index 75b9581..faf3194 100644
--- a/src/sksl/dsl/priv/DSLWriter.h
+++ b/src/sksl/dsl/priv/DSLWriter.h
@@ -37,6 +37,9 @@
namespace dsl {
+class DSLGlobalVar;
+class DSLParameter;
+class DSLVar;
class ErrorHandler;
/**
@@ -109,25 +112,26 @@
static const SkSL::Modifiers* Modifiers(const SkSL::Modifiers& modifiers);
/**
- * Returns the SkSL variable corresponding to a (non-parameter) DSLVar.
+ * Returns the SkSL variable corresponding to a DSL var.
*/
- static const SkSL::Variable* Var(DSLVar& var);
+ static const SkSL::Variable* Var(DSLVarBase& var);
/**
- * Creates an SkSL variable corresponding to a parameter DSLVar.
+ * Creates an SkSL variable corresponding to a DSLParameter.
*/
- static std::unique_ptr<SkSL::Variable> ParameterVar(DSLVar& var);
+ static std::unique_ptr<SkSL::Variable> CreateParameterVar(DSLParameter& var);
+
/**
* Returns the SkSL declaration corresponding to a DSLVar.
*/
- static std::unique_ptr<SkSL::Statement> Declaration(DSLVar& var);
+ static std::unique_ptr<SkSL::Statement> Declaration(DSLVarBase& var);
/**
* For use in testing only: marks the variable as having been declared, so that it can be
* destroyed without generating errors.
*/
- static void MarkDeclared(DSLVar& var);
+ static void MarkDeclared(DSLVarBase& var);
/**
* Returns the (possibly mangled) final name that should be used for an entity with the given
@@ -168,7 +172,7 @@
*/
static void EndFragmentProcessor();
- static GrGLSLUniformHandler::UniformHandle VarUniformHandle(const DSLVar& var);
+ static GrGLSLUniformHandler::UniformHandle VarUniformHandle(const DSLGlobalVar& var);
#else
static bool InFragmentProcessor() {
return false;