text: //
  // Copyright (c) 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_
  