Change VariableReference::fVariable to a pointer

We will soon be re-targeting variable references, and this is going to
be much easier (and cheaper) than replacing the entire VariableReference
itself.

Change-Id: I8febc44a1c06e99251153f038a4f5f693cd30231
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/319344
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/sksl/SkSLMetalCodeGenerator.cpp b/src/sksl/SkSLMetalCodeGenerator.cpp
index 1ee05a4..07ca379 100644
--- a/src/sksl/SkSLMetalCodeGenerator.cpp
+++ b/src/sksl/SkSLMetalCodeGenerator.cpp
@@ -676,7 +676,7 @@
 }
 
 void MetalCodeGenerator::writeVariableReference(const VariableReference& ref) {
-    switch (ref.fVariable.fModifiers.fLayout.fBuiltin) {
+    switch (ref.fVariable->fModifiers.fLayout.fBuiltin) {
         case SK_FRAGCOLOR_BUILTIN:
             this->write("_out->sk_FragColor");
             break;
@@ -695,19 +695,19 @@
             this->write(fProgram.fSettings.fFlipY ? "_frontFacing" : "(!_frontFacing)");
             break;
         default:
-            if (Variable::kGlobal_Storage == ref.fVariable.fStorage) {
-                if (ref.fVariable.fModifiers.fFlags & Modifiers::kIn_Flag) {
+            if (Variable::kGlobal_Storage == ref.fVariable->fStorage) {
+                if (ref.fVariable->fModifiers.fFlags & Modifiers::kIn_Flag) {
                     this->write("_in.");
-                } else if (ref.fVariable.fModifiers.fFlags & Modifiers::kOut_Flag) {
+                } else if (ref.fVariable->fModifiers.fFlags & Modifiers::kOut_Flag) {
                     this->write("_out->");
-                } else if (ref.fVariable.fModifiers.fFlags & Modifiers::kUniform_Flag &&
-                           ref.fVariable.type().typeKind() != Type::TypeKind::kSampler) {
+                } else if (ref.fVariable->fModifiers.fFlags & Modifiers::kUniform_Flag &&
+                           ref.fVariable->type().typeKind() != Type::TypeKind::kSampler) {
                     this->write("_uniforms.");
                 } else {
                     this->write("_globals->");
                 }
             }
-            this->writeName(ref.fVariable.fName);
+            this->writeName(ref.fVariable->fName);
     }
 }
 
@@ -834,10 +834,9 @@
     if (needParens) {
         this->write("(");
     }
-    if (Compiler::IsAssignment(op) &&
-        Expression::Kind::kVariableReference == left.kind() &&
-        Variable::kParameter_Storage == left.as<VariableReference>().fVariable.fStorage &&
-        left.as<VariableReference>().fVariable.fModifiers.fFlags & Modifiers::kOut_Flag) {
+    if (Compiler::IsAssignment(op) && left.is<VariableReference>() &&
+        left.as<VariableReference>().fVariable->fStorage == Variable::kParameter_Storage &&
+        left.as<VariableReference>().fVariable->fModifiers.fFlags & Modifiers::kOut_Flag) {
         // writing to an out parameter. Since we have to turn those into pointers, we have to
         // dereference it here.
         this->write("*");
@@ -1751,15 +1750,15 @@
         case Expression::Kind::kVariableReference: {
             const VariableReference& v = e->as<VariableReference>();
             Requirements result = kNo_Requirements;
-            if (v.fVariable.fModifiers.fLayout.fBuiltin == SK_FRAGCOORD_BUILTIN) {
+            if (v.fVariable->fModifiers.fLayout.fBuiltin == SK_FRAGCOORD_BUILTIN) {
                 result = kGlobals_Requirement | kFragCoord_Requirement;
-            } else if (Variable::kGlobal_Storage == v.fVariable.fStorage) {
-                if (v.fVariable.fModifiers.fFlags & Modifiers::kIn_Flag) {
+            } else if (Variable::kGlobal_Storage == v.fVariable->fStorage) {
+                if (v.fVariable->fModifiers.fFlags & Modifiers::kIn_Flag) {
                     result = kInputs_Requirement;
-                } else if (v.fVariable.fModifiers.fFlags & Modifiers::kOut_Flag) {
+                } else if (v.fVariable->fModifiers.fFlags & Modifiers::kOut_Flag) {
                     result = kOutputs_Requirement;
-                } else if (v.fVariable.fModifiers.fFlags & Modifiers::kUniform_Flag &&
-                           v.fVariable.type().typeKind() != Type::TypeKind::kSampler) {
+                } else if (v.fVariable->fModifiers.fFlags & Modifiers::kUniform_Flag &&
+                           v.fVariable->type().typeKind() != Type::TypeKind::kSampler) {
                     result = kUniforms_Requirement;
                 } else {
                     result = kGlobals_Requirement;