Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===--- HLSLExternalSemaSource.h - HLSL Sema Source ------------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. //  This file defines the HLSLExternalSemaSource interface.
  10. //
  11. //===----------------------------------------------------------------------===//
  12. #ifndef CLANG_SEMA_HLSLEXTERNALSEMASOURCE_H
  13. #define CLANG_SEMA_HLSLEXTERNALSEMASOURCE_H
  14.  
  15. #include "llvm/ADT/DenseMap.h"
  16.  
  17. #include "clang/Sema/ExternalSemaSource.h"
  18.  
  19. namespace clang {
  20. class NamespaceDecl;
  21. class Sema;
  22.  
  23. class HLSLExternalSemaSource : public ExternalSemaSource {
  24.   Sema *SemaPtr = nullptr;
  25.   NamespaceDecl *HLSLNamespace = nullptr;
  26.   CXXRecordDecl *ResourceDecl;
  27.  
  28.   using CompletionFunction = std::function<void(CXXRecordDecl *)>;
  29.   llvm::DenseMap<CXXRecordDecl *, CompletionFunction> Completions;
  30.  
  31.   void defineHLSLVectorAlias();
  32.   void defineTrivialHLSLTypes();
  33.   void forwardDeclareHLSLTypes();
  34.  
  35.   void completeBufferType(CXXRecordDecl *Record);
  36.  
  37. public:
  38.   ~HLSLExternalSemaSource() override;
  39.  
  40.   /// Initialize the semantic source with the Sema instance
  41.   /// being used to perform semantic analysis on the abstract syntax
  42.   /// tree.
  43.   void InitializeSema(Sema &S) override;
  44.  
  45.   /// Inform the semantic consumer that Sema is no longer available.
  46.   void ForgetSema() override { SemaPtr = nullptr; }
  47.  
  48.   using ExternalASTSource::CompleteType;
  49.   /// Complete an incomplete HLSL builtin type
  50.   void CompleteType(TagDecl *Tag) override;
  51. };
  52.  
  53. } // namespace clang
  54.  
  55. #endif // CLANG_SEMA_HLSLEXTERNALSEMASOURCE_H
  56.