<b>File Headers</b>
-<p>Every source file should have a header on it that
-describes the basic purpose of the file. If a file does not have a header, it
-should not be checked into CVS. Most source trees will probably have a standard
+<p>Every source file should have a header on it that describes the basic
+purpose of the file. If a file does not have a header, it should not be
+checked into Subversion. Most source trees will probably have a standard
file header format. The standard format for the LLVM source tree looks like
this:</p>
//
// The LLVM Compiler Infrastructure
//
-// This file was developed by the LLVM research group and is distributed under
+// This file was developed by <whoever started the file> and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
</pre>
</div>
-<p>A few things to note about this particular format: The "<tt>-*- C++
+<p>A few things to note about this particular format: The 'developed by' line
+should be the name of the person or organization who initially contributed the
+file. The "<tt>-*- C++
-*-</tt>" string on the first line is there to tell Emacs that the source file
is a C++ file, not a C file (Emacs assumes .h files are C files by default).
Note that this tag is not necessary in .cpp files. The name of the file is also
<tt>#include</tt>'ing speeds up compilation.</p>
<p>It is easy to try to go too overboard on this recommendation, however. You
-<b>must</b> include all of the header files that you are using, either directly
+<b>must</b> include all of the header files that you are using -- you can
+include them either directly
or indirectly (through another header file). To make sure that you don't
accidently forget to include a header file in your module header, make sure to
include your module header <b>first</b> in the implementation file (as mentioned
more pressure on the VM system on low-memory machines.</li>
</ol>
+<div style="align: center">
<table>
<tbody>
<tr>
<td align="left"><pre>#include "llvm/Support/Streams.h"</pre></td>
</tr>
<tr>
- <td align="left"><pre>DEBUG(std::cerr << ...);</pre></td>
- <td align="left"><pre>DOUT << ...;</pre></td>
+ <td align="left"><pre>DEBUG(std::cerr << ...);
+DEBUG(dump(std::cerr));</pre></td>
+ <td align="left"><pre>DOUT << ...;
+dump(DOUT);</pre></td>
</tr>
<tr>
<td align="left"><pre>std::cerr << "Hello world\n";</pre></td>
<td align="left"><pre>llvm::StringStream</pre></td>
</tr>
<tr>
- <td align="left"><pre>void print(std::ostream &Out);
+ <td align="left"><pre>void print(std::ostream &Out);
// ...
print(std::cerr);</pre></td>
- <td align="left"><pre>void print(std::ostream &Out);
+ <td align="left"><pre>void print(std::ostream &Out);
+void print(std::ostream *Out) { if (Out) print(*Out) }
// ...
-print(*llvm::cerr.stream());</pre></td>
- </tbody>
+print(llvm::cerr);</pre>
+
+<div class="doc_text">
+<i>N.B.</i> The second <tt>print</tt> method is called by the <tt>print</tt>
+expression. It prevents the execution of the first <tt>print</tt> method if the
+stream is <tt>cnull</tt>.</div></td>
+ </tbody>
</table>
+</div>
</div>