summaryrefslogtreecommitdiffstats
path: root/docs/InternalsManual.rst
diff options
context:
space:
mode:
authorNico Weber <nicolasweber@gmx.de>2014-12-28 02:07:26 +0000
committerNico Weber <nicolasweber@gmx.de>2014-12-28 02:07:26 +0000
commit59745e0f880af0e27e0b8e4444b817b39141311d (patch)
treeec7543bdaa031ae19e9d1c34e117dbe22fad33a9 /docs/InternalsManual.rst
parentfc0695463f61033053a34d36050c6ba7b49bce74 (diff)
Add stub sections about Parse, Sema, CodeGen to the internals manual.
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
Diffstat (limited to 'docs/InternalsManual.rst')
-rw-r--r--docs/InternalsManual.rst32
1 files changed, 32 insertions, 0 deletions
diff --git a/docs/InternalsManual.rst b/docs/InternalsManual.rst
index 50a1943ee2..511e2c61e9 100644
--- a/docs/InternalsManual.rst
+++ b/docs/InternalsManual.rst
@@ -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
===================