chromium/third_party/angle/src/compiler/translator/QualifierTypes.h

//
// Copyright 2002 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//

#ifndef COMPILER_TRANSLATOR_QUALIFIER_TYPES_H_
#define COMPILER_TRANSLATOR_QUALIFIER_TYPES_H_

#include "common/angleutils.h"
#include "compiler/translator/BaseTypes.h"
#include "compiler/translator/ImmutableString.h"
#include "compiler/translator/Types.h"

namespace sh
{
class TDiagnostics;

TLayoutQualifier JoinLayoutQualifiers(TLayoutQualifier leftQualifier,
                                      TLayoutQualifier rightQualifier,
                                      const TSourceLoc &rightQualifierLocation,
                                      TDiagnostics *diagnostics);

enum TQualifierType
{};

class TQualifierWrapperBase : angle::NonCopyable
{};

class TInvariantQualifierWrapper final : public TQualifierWrapperBase
{};

class TPreciseQualifierWrapper final : public TQualifierWrapperBase
{};

class TInterpolationQualifierWrapper final : public TQualifierWrapperBase
{};

class TLayoutQualifierWrapper final : public TQualifierWrapperBase
{};

class TStorageQualifierWrapper final : public TQualifierWrapperBase
{};

class TPrecisionQualifierWrapper final : public TQualifierWrapperBase
{};

class TMemoryQualifierWrapper final : public TQualifierWrapperBase
{};

// TTypeQualifier tightly covers type_qualifier from the grammar
struct TTypeQualifier
{};

// TTypeQualifierBuilder contains all of the qualifiers when type_qualifier gets parsed.
// It is to be used to validate the qualifier sequence and build a TTypeQualifier from it.
class TTypeQualifierBuilder : angle::NonCopyable
{};

}  // namespace sh

#endif  // COMPILER_TRANSLATOR_QUALIFIER_TYPES_H_