- 27 Feb, 2015 1 commit
-
-
Francois Ferrand authored
Change-Id: Iaa0e7550abf6be77601b1852652bb3d0731d0323 Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
-
- 17 Feb, 2015 1 commit
-
-
Adam Strzelecki authored
1. Extends lexer so digit or string can be followed by underscore '_' and alphanumeric defining literal. 2. Extends parser so it accepts operator"" _abc(...) user-defined literal definition. 3. Adds Token::Flags.userDefinedLiteral bool flag field representing if token carries user-defined literal. 4. Adds C++11 auto tests case with: 12_km, 0.5_Pa, 'c'_X, "abd"_L, u"xyz"_M 5. All optional suffix scanning methods now return boolean if the suffix was found. 6. Adds C++ Lexer tests for user-defined literals with C++11 feature enabled. This change however does not make QtCreator understand user-defined literal semantics, e.g. properly resolve type when applying custom literal operator. Change-Id: I30e62f025ec9fb11c39261985ea4d772b1a80949 Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
-
- 12 Feb, 2015 2 commits
-
-
Nikolai Kosjar authored
...in order to stop memory intensive parsing for invalid code. Parsing the test data/snippet "hard" led to a memory consumption of about 5.5MB and this could easily get up to hundreds/gigabytes by adding some more "if_<bool_<true>,\n" lines. With the caching, we are at about 1.0MB, even if more lines are added. The "memory consumption" was measured with valgrind-massif. The stated numbers are the reported peaks. Task-number: QTCREATORBUG-12890 Change-Id: Ie7eb00cfc7915552d29bb27410a6b13a486f486e Reviewed-by:
Erik Verbruggen <erik.verbruggen@theqtcompany.com>
-
Nikolai Kosjar authored
This reverts the changes commit beac7b95 C++: Fix highlighting after "invalid code" commit 78ab287f C++: Stop parsing a declaration after two tries which were a work around for QTCREATORBUG-12890. A follow-up patch provides a proper fix. Task-number: QTCREATORBUG-12890 Change-Id: I2650a8e41c8ff1180cad9f069e463fc51bd2f1b1 Reviewed-by:
Erik Verbruggen <erik.verbruggen@theqtcompany.com>
-
- 19 Nov, 2014 1 commit
-
-
Nikolai Kosjar authored
For the semantic info document we do not expand function like macros and because of that certain macro invocations lead to invalid code that we need to handle, e.g.: Q_GLOBAL_STATIC(CppTools::SymbolFinder, symbolFinder) class Foo {}; This change makes parsing Foo in the semantic info document successfully again, which affects highlighting of that class. Change-Id: I389265ac64d3f0b8b8f406d38fa58d78820b14ba Reviewed-by:
Erik Verbruggen <erik.verbruggen@theqtcompany.com>
-
- 18 Nov, 2014 1 commit
-
-
Nikolai Kosjar authored
If we fail to parse a declaration, we rewind, eat the token and look for the next token that might be a good candidate for a declaration start (e.g. an identifier). This becomes cpu and memory expensive with super long and invalid expressions like typedef b::m::if_< b::m::bool_< (sizeof(fun((Dummy *) 0, (ThisT *) 0, (b::m::int_<70> *) 0)) == sizeof(defined_)) >, b::m::if_< b::m::bool_< (sizeof(fun((Dummy *) 0, (ThisT *) 0, (b::m::int_<71> *) 0)) == sizeof(defined_)) >, b::m::if_< b::m::bool_< (sizeof(fun((Dummy *) 0, (ThisT *) 0, (b::m::int_<72> *) 0)) == sizeof(defined_)) >, b::m::if_< b::m::bool_< (sizeof(fun((Dummy *) 0, (ThisT *) 0, (b::m::int_<73> *) 0)) == sizeof(defined_)) >, b::m::if_< b::m::bool_< (sizeof(fun((Dummy *) 0, (ThisT *) 0, (b::m::int_<74> *) 0)) == sizeof(defined_)) >, b::m::if_< b::m::bool_< (sizeof(fun((Dummy *) 0, (ThisT *) 0, (b::m::int_<75> *) 0)) == sizeof(defined_)) >, b::m::if_< b::m::bool_< // ...some more crazy lines like this Therefore, stop trying after two failures by looking for the next semicolon or closing curly brace. Task-number: QTCREATORBUG-12890 Change-Id: I6637daeb840dd549d669080775228fa91fc932eb Reviewed-by:
Erik Verbruggen <erik.verbruggen@theqtcompany.com>
-
- 15 Oct, 2014 1 commit
-
-
Nikolai Kosjar authored
It should be parsed as an DeclarationStatement, but instead it was parsed as an ExpressionStatement. Regression introduced with commit d3c5fff6 . C++: Fix expensive parsing of expressions The introduced ASTCache did not save the correct return value of a parse* function. Because of that, the first return in Parser::parseExpressionList returned false on the second invocation (cache hit), instead of true, which resulted in an ExpressionStatement. Task-number: QTCREATORBUG-13122 Change-Id: I8dbd8852b0909edddcd3195b484f4cea92328cc5 Reviewed-by:
Fawzi Mohamed <fawzi.mohamed@digia.com>
-
- 12 Sep, 2014 1 commit
-
-
Erik Verbruggen authored
Pointed out by the clang static analyzer. Change-Id: I2d73d4c9ef2511c5697a4e4da89b61efb1149a3f Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com>
-
- 05 Aug, 2014 1 commit
-
-
Tobias Hunger authored
Change-Id: Id4527ab5582294791b8db0c7ce9240e031a38bd7 Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com>
-
- 24 Jul, 2014 2 commits
-
-
Nikolai Kosjar authored
For expression statements like "(g(g(g(...(g(0))...))))" we reparsed quite much again and again for nothing. The high-level trace for this expression looks like this: parseCastExpression parseTypeId parseAbstractDeclarator parseAbstractCoreDeclarator parseParameterDeclarationClause (--> DEEP) ... parseUnaryExpression ... parseCorePostfixExpression parseTypeId (--> DEEP) parsePrimaryExpression (--> DEEP) Especially parseTypeId is expensive in this case and it's called two times, both from the same token (index). With this patch, we remember for certain ASTs the parse results and re-use them when needed. Change-Id: I013d1c064c655636bc94db408097863b5e183fc2 Task-number: QTCREATORBUG-12252 Reviewed-by:
Erik Verbruggen <erik.verbruggen@digia.com>
-
Nikolai Kosjar authored
Change-Id: I6bf729a999494a84eb235a891ea14bbccd44aeb8 Reviewed-by:
Erik Verbruggen <erik.verbruggen@digia.com>
-
- 22 Jul, 2014 2 commits
-
-
Erik Verbruggen authored
Change-Id: Ifa81a481bf92b5b71495a105ae292f3e9895f704 Task-number: QTCREATORBUG-9279 Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com>
-
Erik Verbruggen authored
A case or a default statement must be followed by another statement. When a such a case (or default) statement is followed immediately by another case (or default) statement, then this would create a linked list, and the parser will recurse to parse such input. In order to prevent the parser running out of stack space while recursing, parse this corner case by blocking parsing a labeled statement as the first statement after a labeled statement. The advantage is that these statements do not form a linked list, so any subsequent visitation of the AST won't run out of stack space either. Change-Id: Id2111a49509132997f5fbe4bb12c92c729ec2522 Task-number: QTCREATORBUG-12673 Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com>
-
- 04 Jul, 2014 1 commit
-
-
Nikolai Kosjar authored
Change-Id: If6e6db7c4ca011159e78a27755ff9f665b179300 Reviewed-by:
Wang Hoi <wanghoi@126.com> Reviewed-by:
Erik Verbruggen <erik.verbruggen@digia.com>
-
- 24 Jun, 2014 2 commits
-
-
Orgad Shaneh authored
Change-Id: I9bfed2023624c818c0f35f24476693cffeaf2bbc Reviewed-by:
Wang Hoi <wanghoi@126.com> Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com>
-
Nikolai Kosjar authored
The introduction of C99 designators led to parsing problems with lambdas that were passed in as a function arguments. Fixed by prefering to parse without designators first. This will be cleaner/clearer once the appropriate "LanguageFeatures" from the Project Parts will be passed in. Change-Id: Ia9cb7c4a4c9345e729cf2044e1e5411fe63e33ec Reviewed-by:
Wang Hoi <wanghoi@126.com> Reviewed-by:
Erik Verbruggen <erik.verbruggen@digia.com>
-
- 17 Jun, 2014 1 commit
-
-
Wang Hoi authored
In case: int a[6] = { [4] = 29, [2] = 15 }; struct point { int x, y; }; struct point p = { .y = 3, .x = 2 }; Grammar change when c99 language feature is enabled: old grammar: braced-init-list :: '{' initializer-list '}' new grammar: braced-init-list :: '{' designated-initializer-list '}' designated-initializer-list :: designated-initializer (',' designated-initializer )* designated-initializer :: designator* initializer-clause designator :: '.' identifier | '[' constant-expression ']' Task-number: QTCREATORBUG-1902 Change-Id: Ib99d6f553f8d0f50ba3eff86f3a2e86d73372426 Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com>
-
- 16 Jun, 2014 1 commit
-
-
Christian Kamm authored
The parser considers '{' an operator and thus thought "template-id {" couldn't possibly be valid. This patch adds '{' as an exception to the rule. Change-Id: I40730fcdc5cade48566b4c8b6fde390f455bbdba Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com>
-
- 12 Jun, 2014 1 commit
-
-
Orgad Shaneh authored
Change-Id: I409699225b5f42db7ecb6c2dc8d150c1a66ee23c Reviewed-by:
Erik Verbruggen <erik.verbruggen@digia.com>
-
- 06 Jun, 2014 1 commit
-
-
Przemyslaw Gorszkowski authored
Task-number: QTCREATORBUG-12345 Change-Id: Ib2316ebdc81393b38185b9cb659fb85b78753e7b Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com> Reviewed-by:
Eike Ziller <eike.ziller@digia.com>
-
- 04 Jun, 2014 1 commit
-
-
Christian Kamm authored
In particular "auto foo() -> typename Foo<T>::X;" didn't parse. Change-Id: I7665c9b387e222e4107f053a529d502813ebf617 Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com>
-
- 13 Mar, 2014 1 commit
-
-
Nikolai Kosjar authored
As the name function name suggests, true should be returned if the declaration should be processed. Otherwise false. Change-Id: I8d266d99c579b331fee8772bde47aa1a466dae9c Reviewed-by:
Erik Verbruggen <erik.verbruggen@digia.com>
-
- 20 Jan, 2014 2 commits
-
-
Povilas Kanapickas authored
CPlusPlus::Parser::parseAccessSpecifier() is not used anywhere throughout the QtCreator codebase. Change-Id: I062a4ae257b9c61f02bf85079feb6d48bd07c49e Reviewed-by:
Erik Verbruggen <erik.verbruggen@digia.com>
-
Povilas Kanapickas authored
This is an obvious typo considering the checks at the beginning of the function. Change-Id: I11b784153b650b02bba7bb942ca1131447a3da4a Reviewed-by:
Erik Verbruggen <erik.verbruggen@digia.com>
-
- 26 Nov, 2013 1 commit
-
-
Orgad Shaneh authored
Task-number: QTCREATORBUG-7679 Change-Id: I794f52b2bcfb6c78ceef86ec53b6ed32b3d53d9f Reviewed-by:
Orgad Shaneh <orgads@gmail.com> Reviewed-by:
Erik Verbruggen <erik.verbruggen@digia.com>
-
- 12 Nov, 2013 1 commit
-
-
Yuchen Deng authored
warning: C4005: 'va_copy' : macro redefinition Change-Id: Ib2bfd2229cb3ae00e084dd6df7a4558a5a766d55 Reviewed-by:
Orgad Shaneh <orgads@gmail.com> Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com>
-
- 15 Oct, 2013 1 commit
-
-
hjk authored
Change-Id: I4e2df6992b446adec662ab07671acd41715e41fd Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com>
-
- 09 Oct, 2013 1 commit
-
-
Nikolai Kosjar authored
MEMBER was added in Qt5. Task-number: QTCREATORBUG-10068 Change-Id: Ic6c15a0e5ee8981ab98e4c12fc1521dc281b731f Reviewed-by:
Erik Verbruggen <erik.verbruggen@digia.com>
-
- 21 Aug, 2013 1 commit
-
-
Erik Verbruggen authored
Change-Id: I366733ec821ee264f182f4d4a3cf69cdada20cfc Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com>
-
- 19 Jul, 2013 1 commit
-
-
Erik Verbruggen authored
No semantic analysis yet, but this prevents the parser from generating bogus diagnostics. Task-number: QTCREATORBUG-9309 Change-Id: I2ec575a8474cd51bfa97b17678d3da71ab8dcd7a Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com>
-
- 06 Jun, 2013 1 commit
-
-
Erik Verbruggen authored
Task-number: QTCREATORBUG-9386 Change-Id: Ia68f3866c122ca5261dd73b2c740b47fb15744fc Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com>
-
- 19 Apr, 2013 1 commit
-
-
Przemyslaw Gorszkowski authored
Fix: * highlighting * find usages * follow symbol * code completion Task-number: QTCREATORBUG-6497 Task-number: QTCREATORBUG-8963 Task-number: QTCREATORBUG-3610 Task-number: QTCREATORBUG-7579 Change-Id: I3dcaf1c515d0199c3e6bee72284fbb40064686ee Reviewed-by:
Petar Perisin <petar.perisin@gmail.com> Reviewed-by:
Orgad Shaneh <orgads@gmail.com> Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com> Reviewed-by:
Erik Verbruggen <erik.verbruggen@digia.com>
-
- 18 Apr, 2013 1 commit
-
-
hjk authored
As indicated by profiling. Change-Id: I04d741dcc6200eb351d7aec316572e0e94ef5bec Reviewed-by:
Erik Verbruggen <erik.verbruggen@digia.com>
-
- 15 Apr, 2013 2 commits
-
-
Nikolai Kosjar authored
Change-Id: Icd72f6358a5e90a292178b1d78f80d42da2ab846 Reviewed-by:
hjk <hjk121@nokiamail.com>
-
hjk authored
Change-Id: I59527ded34873286072be51c6a141dffcbf93406 Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com>
-
- 09 Apr, 2013 1 commit
-
-
Sergey Shambir authored
C++ standard defines that 'try' should be before optional ctor initializer, so wrong order changed. Added documentation to parseTryBlockStatement and new test. Task-number: QTCREATORBUG-9064 Change-Id: Id19cdc53c034cb1232ae27e0bfe36d85b7ad0452 Reviewed-by:
Erik Verbruggen <erik.verbruggen@digia.com>
-
- 16 Jan, 2013 1 commit
-
-
Fawzi Mohamed authored
Change-Id: Id69343ee12690f2393f3d4e03cf2b40ebbaa8613 Reviewed-by:
Nikolai Kosjar <nikolai.kosjar@digia.com>
-
- 08 Jan, 2013 2 commits
-
-
Francois Ferrand authored
When a constructor is defined with a single, unnamed argument of a custom type without extra type specifiers (const...), then the constructor was not identified as such. There was an heuristic in case the constructor was in the class definition, but not if the the constructor was defined later. Examples: class Arg; class Other; class Foo { Foo(Arg /*arg*/); // working Foo(const Arg /*arg*/); // working Foo(int /*arg*/); // working Foo(Other /*arg*/) {} // working }; Foo::Foo(Arg /*arg*/) {} // used not to work, fixed Foo::Foo(Arg arg){} // working Foo::Foo(const Arg /*arg*/) {} // working Foo::Foo(int arg) {} // working Change-Id: I741e4ba62672ddc99a837fdcdc27996fba5ae6c7 Reviewed-by:
hjk <qthjk@ovi.com>
-
Orgad Shaneh authored
#!/usr/bin/env ruby Dir.glob('**/*.cpp') { |file| # skip ast (excluding paste, astpath, and canv'ast'imer) next if file =~ /ast[^eip]|keywords\.|qualifiers|preprocessor|names.cpp/i s = File.read(file) next if s.include?('qlalr') orig = s.dup s.gsub!(/\n *if [^\n]*{\n[^\n]*\n\s+}(\s+else if [^\n]* {\n[^\n]*\n\s+})*(\s+else {\n[^\n]*\n\s+})?\n/m) { |m| res = $& if res =~ /^\s*(\/\/|[A-Z_]{3,})/ # C++ comment or macro (Q_UNUSED, SDEBUG), do not touch braces res else res.gsub!('} else', 'else') res.gsub!(/\n +} *\n/m, "\n") res.gsub(/ *{$/, '') end } s.gsub!(/ *$/, '') File.open(file, 'wb').write(s) if s != orig } Change-Id: I3b30ee60df0986f66c02132c65fc38a3fbb6bbdc Reviewed-by:
hjk <qthjk@ovi.com>
-
- 28 Nov, 2012 1 commit
-
-
Orgad Shaneh authored
find -name \*.cpp -o -name \*.h | \ xargs sed -Ei 's/ (for|foreach|if|switch|while)\(/ \1 (/g' Change-Id: I9efdff4bf0c8c01a52baaaeb75198483c77b0390 Reviewed-by:
hjk <qthjk@ovi.com>
-