forked from qt-creator/qt-creator
C++: Support __thread and thread_local
Task-number: QTCREATORBUG-7679 Change-Id: I794f52b2bcfb6c78ceef86ec53b6ed32b3d53d9f Reviewed-by: Orgad Shaneh <orgads@gmail.com> Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
committed by
Orgad Shaneh
parent
06612ece77
commit
eac518aee6
36
src/libs/3rdparty/cplusplus/Keywords.cpp
vendored
36
src/libs/3rdparty/cplusplus/Keywords.cpp
vendored
@@ -803,6 +803,17 @@ static inline int classify8(const char *s, LanguageFeatures features)
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (s[3] == 'h') {
|
||||
if (s[4] == 'r') {
|
||||
if (s[5] == 'e') {
|
||||
if (s[6] == 'a') {
|
||||
if (s[7] == 'd') {
|
||||
return T___THREAD;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1443,6 +1454,31 @@ static inline int classify12(const char *s, LanguageFeatures features)
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (features.cxx11Enabled && s[0] == 't') {
|
||||
if (s[1] == 'h') {
|
||||
if (s[2] == 'r') {
|
||||
if (s[3] == 'e') {
|
||||
if (s[4] == 'a') {
|
||||
if (s[5] == 'd') {
|
||||
if (s[6] == '_') {
|
||||
if (s[7] == 'l') {
|
||||
if (s[8] == 'o') {
|
||||
if (s[9] == 'c') {
|
||||
if (s[10] == 'a') {
|
||||
if (s[11] == 'l') {
|
||||
return T_THREAD_LOCAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return T_IDENTIFIER;
|
||||
}
|
||||
|
||||
|
||||
3
src/libs/3rdparty/cplusplus/Parser.cpp
vendored
3
src/libs/3rdparty/cplusplus/Parser.cpp
vendored
@@ -3725,7 +3725,10 @@ bool Parser::lookAtStorageClassSpecifier() const
|
||||
case T_EXTERN:
|
||||
case T_MUTABLE:
|
||||
case T_TYPEDEF:
|
||||
case T___THREAD:
|
||||
return true;
|
||||
case T_THREAD_LOCAL:
|
||||
return _languageFeatures.cxx11Enabled;
|
||||
case T_CONSTEXPR:
|
||||
if (_languageFeatures.cxx11Enabled)
|
||||
return true;
|
||||
|
||||
4
src/libs/3rdparty/cplusplus/Token.cpp
vendored
4
src/libs/3rdparty/cplusplus/Token.cpp
vendored
@@ -57,13 +57,13 @@ const char *token_names[] = {
|
||||
("nullptr"), ("operator"), ("private"),
|
||||
("protected"), ("public"), ("register"), ("reinterpret_cast"),
|
||||
("return"), ("short"), ("signed"), ("sizeof"), ("static"),("static_assert"),
|
||||
("static_cast"), ("struct"), ("switch"), ("template"), ("this"),
|
||||
("static_cast"), ("struct"), ("switch"), ("template"), ("this"), ("thread_local"),
|
||||
("throw"), ("true"), ("try"), ("typedef"), ("typeid"), ("typename"),
|
||||
("union"), ("unsigned"), ("using"), ("virtual"), ("void"),
|
||||
("volatile"), ("wchar_t"), ("while"),
|
||||
|
||||
// gnu
|
||||
("__attribute__"), ("__typeof__"),
|
||||
("__attribute__"), ("__thread"), ("__typeof__"),
|
||||
|
||||
// objc @keywords
|
||||
("@catch"), ("@class"), ("@compatibility_alias"), ("@defs"), ("@dynamic"),
|
||||
|
||||
2
src/libs/3rdparty/cplusplus/Token.h
vendored
2
src/libs/3rdparty/cplusplus/Token.h
vendored
@@ -173,6 +173,7 @@ enum Kind {
|
||||
T_SWITCH,
|
||||
T_TEMPLATE,
|
||||
T_THIS,
|
||||
T_THREAD_LOCAL,
|
||||
T_THROW,
|
||||
T_TRUE,
|
||||
T_TRY,
|
||||
@@ -189,6 +190,7 @@ enum Kind {
|
||||
T_WHILE,
|
||||
|
||||
T___ATTRIBUTE__,
|
||||
T___THREAD,
|
||||
T___TYPEOF__,
|
||||
|
||||
// obj c++ @ keywords
|
||||
|
||||
Reference in New Issue
Block a user