]> granicus.if.org Git - clang/commitdiff
Add stub sections about Parse, Sema, CodeGen to the internals manual.
authorNico Weber <nicolasweber@gmx.de>
Sun, 28 Dec 2014 02:07:26 +0000 (02:07 +0000)
committerNico Weber <nicolasweber@gmx.de>
Sun, 28 Dec 2014 02:07:26 +0000 (02:07 +0000)
I'd be interested if the paragraph on Parse not knowing much about AST is
something folks agree with.  I think this used to be true after rjmccall removed
the Action interface in r112244 and I believe it's still true, but I'm not sure.
(For example, ParseOpenMP.cpp does include AST/StmtOpenMP.h.  Other than that,
Parse not using AST nodes much seems to be still true, though.)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224894 91177308-0d34-0410-b5e6-96231b3b80d8

docs/InternalsManual.rst

index 50a1943ee28b91777c5e1ec72ad2a515ba3bdd9c..511e2c61e973cb2fd7e6fa045669f24d0833069a 100644 (file)
@@ -784,9 +784,24 @@ buffer uses this idiom and is subsequently ``#include``'d, the preprocessor can
 simply check to see whether the guarding condition is defined or not.  If so,
 the preprocessor can completely ignore the include of the header.
 
+.. _Parser:
+
 The Parser Library
 ==================
 
+This library contains a recursive-descent parser that polls tokens from the
+preprocessor and notifies a client of the parsing progress.
+
+Historically, the parser used to talk to an abstract ``Action`` interface that
+had virtual methods for parse events, for example ``ActOnBinOp()``.  When Clang
+grew C++ support, the parser stopped supporting general ``Action`` clients --
+it now always talks to the :ref:`Sema` library.  However, the Parser still
+accesses AST objects only through opaque types like ``ExprResult`` and
+``StmtResult``.  Only ::ref::`Sema` looks at the AST node contents of these
+wrappers.
+
+.. _AST:
+
 The AST Library
 ===============
 
@@ -1582,6 +1597,23 @@ interacts with constant evaluation:
 * ``__builtin_strlen`` and ``strlen``: These are constant folded as integer
   constant expressions if the argument is a string literal.
 
+.. _Sema:
+
+The Sema Library
+================
+
+This library is called by the :ref:`Parser` library during parsing to do
+semantic analysis of the input.  For valid programs, Sema builds an AST for
+parsed constructs.
+
+.. _CodeGen:
+
+The CodeGen Library
+===================
+
+CodeGen takes an :ref:`AST` as input and produces `LLVM IR code
+<//llvm.org/docs/LangRef.html>`_ from it.
+
 How to change Clang
 ===================