/*
 * 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 "src/sksl/SkSLPosition.h"
#include "src/sksl/ir/SkSLModifiers.h"
#include "src/sksl/ir/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.
 */
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
