/Users/buildslave/jenkins/sharedspace/clang-stage2-coverage-R@2/llvm/include/llvm/Support/ToolOutputFile.h
Line | Count | Source |
1 | | //===- ToolOutputFile.h - Output files for compiler-like tools -----------===// |
2 | | // |
3 | | // The LLVM Compiler Infrastructure |
4 | | // |
5 | | // This file is distributed under the University of Illinois Open Source |
6 | | // License. See LICENSE.TXT for details. |
7 | | // |
8 | | //===----------------------------------------------------------------------===// |
9 | | // |
10 | | // This file defines the ToolOutputFile class. |
11 | | // |
12 | | //===----------------------------------------------------------------------===// |
13 | | |
14 | | #ifndef LLVM_SUPPORT_TOOLOUTPUTFILE_H |
15 | | #define LLVM_SUPPORT_TOOLOUTPUTFILE_H |
16 | | |
17 | | #include "llvm/Support/raw_ostream.h" |
18 | | |
19 | | namespace llvm { |
20 | | |
21 | | /// This class contains a raw_fd_ostream and adds a few extra features commonly |
22 | | /// needed for compiler-like tool output files: |
23 | | /// - The file is automatically deleted if the process is killed. |
24 | | /// - The file is automatically deleted when the ToolOutputFile |
25 | | /// object is destroyed unless the client calls keep(). |
26 | | class ToolOutputFile { |
27 | | /// This class is declared before the raw_fd_ostream so that it is constructed |
28 | | /// before the raw_fd_ostream is constructed and destructed after the |
29 | | /// raw_fd_ostream is destructed. It installs cleanups in its constructor and |
30 | | /// uninstalls them in its destructor. |
31 | | class CleanupInstaller { |
32 | | /// The name of the file. |
33 | | std::string Filename; |
34 | | public: |
35 | | /// The flag which indicates whether we should not delete the file. |
36 | | bool Keep; |
37 | | |
38 | | explicit CleanupInstaller(StringRef ilename); |
39 | | ~CleanupInstaller(); |
40 | | } Installer; |
41 | | |
42 | | /// The contained stream. This is intentionally declared after Installer. |
43 | | raw_fd_ostream OS; |
44 | | |
45 | | public: |
46 | | /// This constructor's arguments are passed to to raw_fd_ostream's |
47 | | /// constructor. |
48 | | ToolOutputFile(StringRef Filename, std::error_code &EC, |
49 | | sys::fs::OpenFlags Flags); |
50 | | |
51 | | ToolOutputFile(StringRef Filename, int FD); |
52 | | |
53 | | /// Return the contained raw_fd_ostream. |
54 | 39.5k | raw_fd_ostream &os() { return OS; } |
55 | | |
56 | | /// Indicate that the tool's job wrt this output file has been successful and |
57 | | /// the file should not be deleted. |
58 | 30.2k | void keep() { Installer.Keep = true; } |
59 | | }; |
60 | | |
61 | | } // end llvm namespace |
62 | | |
63 | | #endif |