/* * Copyright 2016 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SKSL_FIELD #define SKSL_FIELD #include "SkSLModifiers.h" #include "SkSLPosition.h" #include "SkSLSymbol.h" #include "SkSLType.h" #include "SkSLVariable.h" namespace SkSL { /** * A symbol which should be interpreted as a field access. Fields are added to the symboltable * whenever a bare reference to an identifier should refer to a struct field; in GLSL, this is the * result of declaring anonymous interface blocks. */ struct Field : public Symbol { Field(int offset, const Variable& owner, int fieldIndex) : INHERITED(offset, kField_Kind, owner.fType.fields()[fieldIndex].fName) , fOwner(owner) , fFieldIndex(fieldIndex) {} virtual String description() const override { return fOwner.description() + "." + fOwner.fType.fields()[fFieldIndex].fName; } const Variable& fOwner; const int fFieldIndex; typedef Symbol INHERITED; }; } // namespace SkSL #endif