Перейти к файлу
Douglas Gregor 6aa14d8327 Implement parsing for message sends in Objective-C++. Message sends in
Objective-C++ have a more complex grammar than in Objective-C
(surprise!), because

  (1) The receiver of an instance message can be a qualified name such
  as ::I or identity<I>::type.
  (2) Expressions in C++ can start with a type.

The receiver grammar isn't actually ambiguous; it just takes a bit of
work to parse past the type before deciding whether we have a type or
expression. We do this in two places within the grammar: once for
message sends and once when we're determining whether a []'d clause in
an initializer list is a message send or a C99 designated initializer.

This implementation of Objective-C++ message sends contains one known
extension beyond GCC's implementation, which is to permit a
typename-specifier as the receiver type for a class message, e.g.,

  [typename compute_receiver_type<T>::type method];

Note that the same effect can be achieved in GCC by way of a typedef,
e.g.,

  typedef typename computed_receiver_type<T>::type Computed;
  [Computed method];

so this is merely a convenience.

Note also that message sends still cannot involve dependent types or
values.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102031 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-21 22:36:40 +00:00
INPUTS Add an input file that includes all standard C++ headers 2009-09-29 03:26:11 +00:00
bindings/python Rename the new Iterator objects and raise an assertion instead of returning invalid objects when the key is out of range. 2010-03-06 15:38:03 +00:00
clang.xcodeproj Rename CGVtable files to CGVTables. 2010-04-08 16:30:25 +00:00
docs Introduce a limit on the depth of the template instantiation backtrace 2010-04-20 07:18:24 +00:00
examples Tip of the day: save before commit. 2010-04-20 11:55:38 +00:00
include Implement parsing for message sends in Objective-C++. Message sends in 2010-04-21 22:36:40 +00:00
lib Implement parsing for message sends in Objective-C++. Message sends in 2010-04-21 22:36:40 +00:00
test Implement parsing for message sends in Objective-C++. Message sends in 2010-04-21 22:36:40 +00:00
tools CXXNamedCastExpr is actually an abstract expression. 2010-04-21 06:32:25 +00:00
utils Wrap 'data' key in quotes. 2010-04-17 00:37:35 +00:00
www Remove the blanket statement about Clang not supporting access control. It does now 2010-04-12 16:01:38 +00:00
CMakeLists.txt Prevent accidental in-source builds with CMake, and detect when there are 2010-04-17 20:12:02 +00:00
INSTALL.txt Add minimal INSTALL.txt 2009-09-13 02:21:31 +00:00
LICENSE.TXT 2010 is here. 2010-01-09 18:40:42 +00:00
Makefile Fix 80 col violation 2010-03-18 13:56:20 +00:00
ModuleInfo.txt Move the ModuleInfo.txt file. 2007-07-11 17:03:27 +00:00
NOTES.txt Remove clang-cc tool, it has joined in unholy union with clang. 2009-12-12 00:56:47 +00:00
README.txt rewrite readme. 2009-09-13 17:23:57 +00:00
TODO.txt switch -Werror/-Wfatal-errors error conditions to use diagnostics instead 2009-12-23 18:53:37 +00:00
VER Bump clang minor version (1.5). 2010-03-18 04:39:55 +00:00

README.txt

//===----------------------------------------------------------------------===//
// C Language Family Front-end
//===----------------------------------------------------------------------===//

Welcome to Clang.  This is a compiler front-end for the C family of languages
(C, C++, Objective-C, and Objective-C++) which is built as part of the LLVM
compiler intrastructure project.

Unlike many other compiler frontends, Clang is useful for a number of things
beyond just compiling code: we intend for Clang to be host to a number of
different source level tools.  One example of this is the Clang Static Analyzer.

If you're interested in more (including how to build Clang) it is best to read
the relevant web sites.  Here are some pointers:

Information on Clang:              http://clang.llvm.org/
Building and using Clang:          http://clang.llvm.org/get_started.html
Clang Static Analyzer:             http://clang-analyzer.llvm.org/
Information on the LLVM project:   http://llvm.org/

If you have questions or comments about Clang, a great place to discuss them is
on the Clang development mailing list:
  http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev

If you find a bug in Clang, please file it in the LLVM bug tracker:
  http://llvm.org/bugs/