Commit Graph

98 Commits

Author SHA1 Message Date
Erik Verbruggen
e72be772c5 C++: added some notes regarding QTCREATORBUG-7968
Change-Id: Ia7a0e4b416ba6ef768d76595d8576262a828ae78
Reviewed-by: David Schulz <david.schulz@digia.com>
2012-10-11 08:53:51 +02:00
Christian Kamm
30c59e27ad C++11: Fix parsing of ambiguous declarators.
Task-number: QTCREATORBUG-7921

Change-Id: Ia94c30886321e09028547a47f83d2a0c57f3980f
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-28 16:13:45 +02:00
Christian Kamm
47d2558f6f C++11: Fix bug with parsing ctor initializers.
Task-number: QTCREATORBUG-7919

Change-Id: I12307c3fb6c20424c8b5aaf564a031924c755d25
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-25 11:03:18 +02:00
Christian Kamm
a81389356e C++11: Fix and add test for simple decltype uses.
Change-Id: I7f843fa96e33671ecb135b9db6f68d9f2cbf2fac
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-24 12:08:25 +02:00
Christian Kamm
5f6f880a32 Fix bug with expression list parsing.
Empty lists would have a single null entry, instead of being null
entirely.

Change-Id: I5114cf1e0ecdbcde5631511ad03a8d559668ea80
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-20 09:36:02 +02:00
Christian Kamm
aa645254a2 C++11: More (expression-list) or brace-init-list.
This time in the 'new' expression. Changed it to make
new C(1, abc...) and new C{1, abc}
work.

Change-Id: I7232798fd083b653ee04ef9ede386d6536133e16
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-19 12:23:18 +02:00
Christian Kamm
83da5f68be C++11: Allow for typename Foo<T>{}, Foo{} and int{}.
As a postfix expression.

Change-Id: I65cae0571080a9fb699af61c661328ef06f97890
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-19 12:21:31 +02:00
Christian Kamm
2aa27e6d22 C++11: Make expression-list expand to initializer-list.
This will fix a couple more places where brace-init-lists and
pack expansions are allowed but are not currently accepted by
the parser. For example:

foo(abc...);

now parses correctly.

Change-Id: I93710cef35154fea8437329f3174e4a2d56637b8
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-19 12:20:58 +02:00
Christian Kamm
0c3acb80c8 C++11: Allow brace-init-list in default argument declaration.
Change-Id: Iab707d855f98982697365f9a4cd7832877e64d17
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-19 12:20:15 +02:00
Christian Kamm
392c80c6e4 C++11: Fix use of >> in template arguments.
Change-Id: Ic99ca897e7a3b9c82cf8c5093a90bf9c88dbb0ed
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-19 11:58:34 +02:00
Christian Kamm
44c9cef30a C++11: Make 'enum struct', enum-base and opaque enum decls work.
For declarations like:
enum struct Foo : long int;

Change-Id: Id813efdbc31c8d70a4b40bb0101dc33a8dd2556a
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-19 11:57:23 +02:00
Christian Kamm
8711121197 C++11: Parse alias declarations.
The parser no longer fails declarations like:
using Foo = std::vector<int>::iterator;

Change-Id: Ib3a552ebbe0147fa138db6448a52cdba8f9b9207
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-19 11:56:33 +02:00
Christian Kamm
9bd86e7d68 C++11: Allow brace-init-list in range-for statement.
Also drop the unused 'initializer' member from
RangeBasedForStatementAST.

Change-Id: I078ebbc85cafa643af4bfe62d698bf7de71360e4
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-19 11:54:50 +02:00
Christian Kamm
ecd54059d3 C++11: Add alignof() expression.
Change-Id: Id3fb30b9a16ea724bab0d5b05e8cbddb0064e6eb
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-19 11:53:46 +02:00
Christian Kamm
8c1a45565c C++11: Accept ref-qualifiers in function declarators.
Means
void foo() const &; void bar() &&;
and the corresponding pointer-to-member declarators
now parse.

Change-Id: Idbf295bd4f51cd5d9e38efcac1940b8cc2e32fce
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-19 11:51:48 +02:00
Christian Kamm
6a6083cbf2 C++11: Fix parsing of noexcept(constant-expression).
Change-Id: I745ce4a4810a995d80ea0da12ec993d84637223f
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-19 11:48:09 +02:00
Christian Kamm
b9f6f1bcf7 C++11: Allow uniform initialization in ctor init lists.
So
class C { C() : _x{12}, _y({12}) {} };
now parses correctly.

Change-Id: I4281dcb0541a86b550e74630cad6ae0a59fef1b4
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-19 11:47:49 +02:00
Christian Kamm
903ba378c2 C++11: Don't fail on = default and = delete initializers.
These are converted to IdExpr(SimpleName(token)) initializers.

Change-Id: I1e85c4b261ca028dc75ffe6c00e1090630c2957c
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-19 11:46:51 +02:00
Christian Kamm
0bdf1dc406 C++11: Allow brace initializers in return statements.
Like return {1, 2};

Change-Id: I7442da1866b0106bc075783653c95c16ebedb51a
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-19 11:46:09 +02:00
Christian Kamm
9b7d1901ba C++11: Allow brace initializers in assignment expressions.
Like:
var += {1, 2};
in a function context.

Change-Id: I3936c97c4fcb6b3dcac2979e0508d422d47fddfc
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-17 15:31:40 +02:00
Christian Kamm
342709a9cc C++11: Allow brace initializer lists in more places.
This allows them to be used in declarator initializers that expect
an expression list in parentheses. Like

T v({1, 2}, 3, 4);

Change-Id: I62e1ffd355ca88f7acbb8708c9b40c8310489ca3
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-17 15:16:56 +02:00
Christian Kamm
23a11e2ddb C++: Rename NewPlacementAST to ExpressionListParenAST.
It'll be reused as the initializer expression for declarators
that are followed by "( expression-list )".

Change-Id: I6c76a76641941874ef1ed21daa7b6e057c6d170f
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-17 14:53:20 +02:00
Christian Kamm
813846232b C++11: Allow for brace initializers like T v{1, 2}.
And add a basic test.

Change-Id: I3b8b87d51a9da154758d17380bba5922795f675c
Reviewed-by: hjk <qthjk@ovi.com>
2012-09-17 14:47:14 +02:00
Eike Ziller
bc67246432 Merge remote-tracking branch 'origin/2.6' 2012-08-23 15:52:15 +02:00
Leandro Melo
e148d030f5 C++: Introduce C++11 raw string literals
Although they are now supported by the lexer
and parser, it is worth to remind that we still
need to address an issue concerning the highlight
of multiline literals (which with the advent of
the new raw strings will become more common).

Task-number: QTCREATORBUG-6722
Change-Id: I137337a9ac0152a1f8b9faded0b960c6fe3dd38a
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
2012-08-23 14:35:02 +02:00
Tobias Hunger
8da8d21c18 Remove some unused member variables
Change-Id: I4b1bcfe8da32bd48c601d1efdb7c3aac1d39cbce
Reviewed-by: Leandro Melo <leandro.melo@nokia.com>
2012-08-22 16:18:54 +02:00
Sergey Shambir
95c5ab2746 Added support for override/final and enum classes
Change-Id: I6dfe9dd606781046ff5a1ed61315741d2f332cb8
Reviewed-by: Christian Kamm <christian.d.kamm@nokia.com>
2012-07-30 09:42:30 +02:00
Leandro Melo
621e5c3dbe C++: Parse emit/Q_EMIT properly
The parser now understands emit/Q_EMIT as an expression statement.

Also, the recent fixes in the preprocessor introduced a side-effect
in the hanlding of code such as: emit signal(); Member signal started
being treated as a local use (parsed as a declaration) and possibily
being highlighted as unused variable.

Previously that worked by accident since there was an inconsistency
in the preprocessor on which only object-like macros were being
expanded even when the "no expand" flag was set. Then, the code
mentioned above was being parsed as an expression, what kind of worked.

Change-Id: I47a68ed4c1c1702872620b8ed7c7264fb0997034
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
2012-06-28 11:49:50 +02:00
Leandro Melo
23c637c4f6 C++: Introduce unicode char/strings support
Those are the types char16_t and char32_t along with the new
char/string literals u'', U'', u"", u8"", and U"".

This is particularly important for the use of QStringLiteral
since in some platforms it relies on expansion such as above.

Note: The string literals quickfixes still need some tunning.

Task-number: QTCREATORBUG-7449
Change-Id: Iebcfea15677dc8e0ebb6143def89a5477e1be7d4
Reviewed-by: hjk <qthjk@ovi.com>
2012-06-06 14:55:07 +02:00
Leandro Melo
809a4ed91a C++: Also parse static_assert as top-level declaration
Add some checks for C++11 flag as well.

Change-Id: Ic5ee81d72bc88a22e71b324ef01014791b833604
Reviewed-by: hjk <qthjk@ovi.com>
2012-06-05 15:03:01 +02:00
Erik Verbruggen
275e207d26 Fix invalid decltype error recovery which resulted in crashes.
Task-number: QTCREATORBUG-7174

Change-Id: I653db71adc45586cd8518ffd96118425fd3763be
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
2012-03-28 13:41:48 +02:00
Erik Verbruggen
a621c99a0f [C++] Add error recovery for namespace declarations.
Change-Id: I884ff9901c95467524e5eba38e91f75992d30e14
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
Reviewed-by: Flex Ferrum <flexferrum@gmail.com>
2012-02-28 10:22:31 +01:00
Erik Verbruggen
3c635ef1d4 [C++] Correctly parse inline constructors for templates.
This failed for:
    template<class T> inline S<T>::S(nullptr_t):_p(0){}

Change-Id: Ibb48f403a66cb19567e65270aa166849ee81a162
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
2012-02-23 18:15:46 +01:00
Erik Verbruggen
368d5926ca C++: handle destructor names with template parameters.
Change-Id: I74b4fd5e043db935abc18345b303d294b71e8fc2
Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@nokia.com>
2012-02-23 08:39:34 +01:00
Flex Ferrum
da2aa0df72 C++: Add support for C++11 range-based 'for' loops
Change-Id: I7eef048a7952a79f031ae3d0abba68e3c5ffbfb8
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
2012-02-21 15:27:00 +01:00
Erik Verbruggen
19e15d332a C++11: Add static_assert as block declaration.
Change-Id: I35c93b7a970a7b659a4bca7b680c2db776dc07ab
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
2012-02-10 16:29:12 +01:00
Erik Verbruggen
3f5dc36a53 C++11: first set of changes for decltype.
Change-Id: I49d6ff7eb1805cd07bdfcb27bb37d4c6cadc9115
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
2012-02-10 16:29:04 +01:00
Erik Verbruggen
1d3dc30153 C++11: add support for static_assert.
Change-Id: I82d8d60acaa9265fd25e0a3734855b19bdef9c06
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
2012-02-02 13:49:22 +01:00
Erik Verbruggen
dd4299073e C++11: handle noexcept specifications.
Change-Id: I7da3affea2758b2e01124105e2521e1f2c5f6678
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
2012-02-02 12:22:20 +01:00
Erik Verbruggen
13dd213f60 C++11: handle inline namespaces.
Change-Id: Iafdcd5bc72d9724e217767ae9c216be4363cc0d3
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
2012-02-02 11:07:20 +01:00
Leandro Melo
057fad645b C++: Recognize C++11 nullptr
Change-Id: I5b7ac8f9b2137ffe9439ada4ec4aeb9cee8e249d
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
2011-11-18 13:50:19 +01:00
Leandro Melo
9f73c5848b C++: Recognize C++11 constexpr
Change-Id: Iac8ba58404284f0d90fd5a3640eb9ccd7e98058d
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
2011-11-18 12:14:10 +01:00
Christian Kamm
49fbe56def C++ parser: Don't fail on REVISION in Q_PROPERTY.
Change-Id: Ia7407969dc56308fe3eb843e97b93e65eb235186
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
2011-10-25 14:30:03 +02:00
Erik Verbruggen
29dff7221d Fixed stack-overflow when parsing insanely nested compound statements.
Thanks to Clang's parser_overflow.cpp which has >16000 nested compound
statements to check exactly the same.

Change-Id: I2b604f8ceb01115d7fe950994e0677a081e99481
Reviewed-by: Christian Kamm <christian.d.kamm@nokia.com>
2011-10-17 11:17:46 +02:00
Leandro Melo
89ac110ab0 C++: Relax parsing for templateid in some cases
The correct parsing for certain templateids would require name
lookup. In order to avoid erroneous syntax errors detection (like
the one below ) we block the notification for such cases.

bool r = a < b ? c > d : false;

Task-number: QTCREATORBUG-5122
Change-Id: I9eb9ee89cd21bec3ed924982957f50f9346f90be
Reviewed-on: http://codereview.qt.nokia.com/1704
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
2011-07-15 16:31:03 +02:00
Erik Verbruggen
b83932708c Fixed invalid parsing of boolean expression "x < y && z > this".
Task-number: QTCREATORBUG-4362
Reviewed-by: Roberto Raggi
2011-05-17 17:05:52 +02:00
Oswald Buddenhagen
b342ad8cf4 remove nokia copyrights from roberto's code
they are lying. nokia has no copyright on this code. and the double
license in a single file looks weird. that's why we moved it to
3rdparty/, so it is clear it is not nokia's.

Approved-by: legal
2011-05-16 11:05:30 +02:00
Oswald Buddenhagen
67704b8b41 move src/shared/cplusplus/ -> src/libs/3rdparty/cplusplus/
Approved-by: legal
2011-05-16 11:05:30 +02:00