/* * 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_TYPEREFERENCE #define SKSL_TYPEREFERENCE #include "SkSLContext.h" #include "SkSLExpression.h" namespace SkSL { /** * Represents an identifier referring to a type. This is an intermediate value: TypeReferences are * always eventually replaced by Constructors in valid programs. */ struct TypeReference : public Expression { TypeReference(const Context& context, int offset, const Type& value) : INHERITED(offset, kTypeReference_Kind, *context.fInvalid_Type) , fValue(value) {} bool hasSideEffects() const override { return false; } String description() const override { return String(fValue.fName); } std::unique_ptr clone() const override { return std::unique_ptr(new TypeReference(fOffset, fValue, &fType)); } const Type& fValue; typedef Expression INHERITED; private: TypeReference(int offset, const Type& value, const Type* type) : INHERITED(offset, kTypeReference_Kind, *type) , fValue(value) {} }; } // namespace #endif