// // Copyright 2017 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. // // Declarator.h: // Declarator type for parsing structure field declarators. #ifndef COMPILER_TRANSLATOR_DECLARATOR_H_ #define COMPILER_TRANSLATOR_DECLARATOR_H_ #include "compiler/translator/Common.h" #include "compiler/translator/ImmutableString.h" namespace sh { // Declarator like "a[2][4]". Only used for parsing structure field declarators. class TDeclarator : angle::NonCopyable { public: POOL_ALLOCATOR_NEW_DELETE TDeclarator(const ImmutableString &name, const TSourceLoc &line); TDeclarator(const ImmutableString &name, const TVector *arraySizes, const TSourceLoc &line); const ImmutableString &name() const { return mName; } bool isArray() const; const TVector *arraySizes() const { return mArraySizes; } const TSourceLoc &line() const { return mLine; } private: const ImmutableString mName; // Outermost array size is stored at the end of the vector. const TVector *const mArraySizes; const TSourceLoc mLine; }; using TDeclaratorList = TVector; } // namespace sh #endif // COMPILER_TRANSLATOR_DECLARATOR_H_