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:
Orgad Shaneh
2013-11-24 18:25:32 +02:00
committed by Orgad Shaneh
parent 06612ece77
commit eac518aee6
7 changed files with 56 additions and 2 deletions

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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"),

View File

@@ -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