Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. //===-- CodeInjector.h ------------------------------------------*- 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. /// \file
  10. /// Defines the clang::CodeInjector interface which is responsible for
  11. /// injecting AST of function definitions that may not be available in the
  12. /// original source.
  13. ///
  14. //===----------------------------------------------------------------------===//
  15.  
  16. #ifndef LLVM_CLANG_ANALYSIS_CODEINJECTOR_H
  17. #define LLVM_CLANG_ANALYSIS_CODEINJECTOR_H
  18.  
  19. namespace clang {
  20.  
  21. class Stmt;
  22. class FunctionDecl;
  23. class ObjCMethodDecl;
  24.  
  25. /// CodeInjector is an interface which is responsible for injecting AST
  26. /// of function definitions that may not be available in the original source.
  27. ///
  28. /// The getBody function will be called each time the static analyzer examines a
  29. /// function call that has no definition available in the current translation
  30. /// unit. If the returned statement is not a null pointer, it is assumed to be
  31. /// the body of a function which will be used for the analysis. The source of
  32. /// the body can be arbitrary, but it is advised to use memoization to avoid
  33. /// unnecessary reparsing of the external source that provides the body of the
  34. /// functions.
  35. class CodeInjector {
  36. public:
  37.   CodeInjector();
  38.   virtual ~CodeInjector();
  39.  
  40.   virtual Stmt *getBody(const FunctionDecl *D) = 0;
  41.   virtual Stmt *getBody(const ObjCMethodDecl *D) = 0;
  42. };
  43. }
  44.  
  45. #endif
  46.