| // | |
| // 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<unsigned int> *arraySizes, | |
| const TSourceLoc &line); | |
| const ImmutableString &name() const { return mName; } | |
| bool isArray() const; | |
| const TVector<unsigned int> *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<unsigned int> *const mArraySizes; | |
| const TSourceLoc mLine; | |
| }; | |
| using TDeclaratorList = TVector<TDeclarator *>; | |
| } // namespace sh | |
| #endif // COMPILER_TRANSLATOR_DECLARATOR_H_ |