X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FCodingStandards.html;h=a99e46e5b5801c5dc8acfb113542533125e26cd5;hb=befc9c16fae1719cafe9f54ab2b67219db44dc11;hp=8f210aa529599cbafab63e2fe9a5c4ad08498994;hpb=10e7c421573a8d14a509b172f9e79905dbc54f99;p=oota-llvm.git diff --git a/docs/CodingStandards.html b/docs/CodingStandards.html index 8f210aa5295..a99e46e5b58 100644 --- a/docs/CodingStandards.html +++ b/docs/CodingStandards.html @@ -122,9 +122,9 @@ documentation is very useful:

File Headers -

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 +

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:

@@ -134,8 +134,8 @@ this:

// // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // @@ -154,9 +154,9 @@ on the first line, along with a very short description of the purpose of the file. This is important when printing out code and flipping though lots of pages.

-

The next section in the file is a concise note that defines the license that -the file is released under. This makes it perfectly clear what terms the source -code can be distributed under.

+

The next section in the file is a concise note that defines the license +that the file is released under. This makes it perfectly clear what terms the +source code can be distributed under and should not be modified in any way.

The main body of the description does not have to be very long in most cases. Here it's only two lines. If an algorithm is being implemented or something @@ -456,7 +456,8 @@ most cases, you simply don't need the definition of a class... and not #include'ing speeds up compilation.

It is easy to try to go too overboard on this recommendation, however. You -must include all of the header files that you are using, either directly +must 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 first in the implementation file (as mentioned @@ -502,14 +503,15 @@ library. There are two problems with this:

  1. The time to run the static c'tors impacts startup time of - applications—a critical time for gui apps.
  2. + applications—a critical time for GUI apps.
  3. The static c'tors cause the app to pull many extra pages of memory off the - disk: both the code for the static c'tors in each .o file and the small - amount of data that gets touched. In addition, touched/dirty pages put - more pressure on the VM system on low-memory machines.
  4. + disk: both the code for the static c'tors in each .o file and the + small amount of data that gets touched. In addition, touched/dirty pages + put more pressure on the VM system on low-memory machines.
- +
+
@@ -523,7 +525,7 @@ library. There are two problems with this:

+DEBUG(dump(DOUT)); @@ -550,19 +552,21 @@ dump(DOUT); - - - -
Old Way
DEBUG(std::cerr << ...);
 DEBUG(dump(std::cerr));
DOUT << ...;
-dump(DOUT);
std::cerr << "Hello world\n";
llvm::StringStream
void print(std::ostream &Out);
+      
void print(std::ostream &Out);
 // ...
 print(std::cerr);
void print(std::ostream &Out);
-void print(std::ostream *Out) { if (Out) print(*Out) }
+      
void print(llvm::OStream Out);1
 // ...
 print(llvm::cerr);
-
    N.B. The second print method is called by the print -expression. It prevents the execution of the first print method if the -stream is cnull.
+ + + +
+

1llvm::OStream is a light-weight class so it should never +be passed by reference. This is important because in some configurations, +DOUT is an rvalue.

+
@@ -619,6 +623,29 @@ assert(isa<PHINode>(Succ->front()) && "Only works on PHId BBs!"

You get the idea...

+

Please be aware when adding assert statements that not all compilers are aware of +the semantics of the assert. In some places, asserts are used to indicate a piece of +code that should not be reached. These are typically of the form:

+ +
+
+assert(0 && "Some helpful error message");
+
+
+ +

When used in a function that returns a value, they should be followed with a return +statement and a comment indicating that this line is never reached. This will prevent +a compiler which is unable to deduce that the assert statement never returns from +generating a warning.

+ +
+
+assert(0 && "Some helpful error message");
+// Not reached
+return 0;
+
+
+ @@ -731,15 +758,12 @@ sources. Two particularly important books for our work are:

    -
  1. Effective -C++ by Scott Meyers. There is an online version of the book (only some -chapters though) available as well. Also +
  2. Effective +C++ by Scott Meyers. Also interesting and useful are "More Effective C++" and "Effective STL" by the same author.
  3. -
  4. Large-Scale C++ -Software Design by John Lakos
  5. +
  6. Large-Scale C++ Software Design by John Lakos