1//
2// Copyright (c) 2017 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6// Declarator.h:
7// Declarator type for parsing structure field declarators.
8
9#ifndef COMPILER_TRANSLATOR_DECLARATOR_H_
10#define COMPILER_TRANSLATOR_DECLARATOR_H_
11
12#include "compiler/translator/Common.h"
13#include "compiler/translator/ImmutableString.h"
14
15namespace sh
16{
17
18// Declarator like "a[2][4]". Only used for parsing structure field declarators.
19class TDeclarator : angle::NonCopyable
20{
21 public:
22 POOL_ALLOCATOR_NEW_DELETE
23 TDeclarator(const ImmutableString &name, const TSourceLoc &line);
24
25 TDeclarator(const ImmutableString &name,
26 const TVector<unsigned int> *arraySizes,
27 const TSourceLoc &line);
28
29 const ImmutableString &name() const { return mName; }
30
31 bool isArray() const;
32 const TVector<unsigned int> *arraySizes() const { return mArraySizes; }
33
34 const TSourceLoc &line() const { return mLine; }
35
36 private:
37 const ImmutableString mName;
38
39 // Outermost array size is stored at the end of the vector.
40 const TVector<unsigned int> *const mArraySizes;
41
42 const TSourceLoc mLine;
43};
44
45using TDeclaratorList = TVector<TDeclarator *>;
46
47} // namespace sh
48
49#endif // COMPILER_TRANSLATOR_DECLARATOR_H_
50