diff options
Diffstat (limited to 'gfx/skia/skia/src/sksl/ir/SkSLField.h')
-rw-r--r-- | gfx/skia/skia/src/sksl/ir/SkSLField.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/gfx/skia/skia/src/sksl/ir/SkSLField.h b/gfx/skia/skia/src/sksl/ir/SkSLField.h new file mode 100644 index 0000000000..a7fa6575cf --- /dev/null +++ b/gfx/skia/skia/src/sksl/ir/SkSLField.h @@ -0,0 +1,56 @@ +/* + * 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 "include/private/SkSLModifiers.h" +#include "include/private/SkSLSymbol.h" +#include "src/sksl/ir/SkSLType.h" +#include "src/sksl/ir/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. + */ +class Field final : public Symbol { +public: + inline static constexpr Kind kIRNodeKind = Kind::kField; + + Field(Position pos, const Variable* owner, int fieldIndex) + : INHERITED(pos, kIRNodeKind, owner->type().fields()[fieldIndex].fName, + owner->type().fields()[fieldIndex].fType) + , fOwner(owner) + , fFieldIndex(fieldIndex) {} + + int fieldIndex() const { + return fFieldIndex; + } + + const Variable& owner() const { + return *fOwner; + } + + std::string description() const override { + return this->owner().name().empty() + ? std::string(this->name()) + : (this->owner().description() + "." + std::string(this->name())); + } + +private: + const Variable* fOwner; + int fFieldIndex; + + using INHERITED = Symbol; +}; + +} // namespace SkSL + +#endif |