summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing-Wei Lan <lantw@src.gnome.org>2016-04-24 16:51:00 +0800
committerTing-Wei Lan <lantw@src.gnome.org>2018-01-09 12:24:15 +0800
commitab71b25969404f615f44b509f4272ca83349590b (patch)
tree9dedf5521d77d588c88c3fab4f265d3c699c4fa9
parent3ad8fb8170d8a30b1afada8db7993ced1828b6f5 (diff)
downloadgobject-introspection-ab71b25969404f615f44b509f4272ca83349590b.tar.gz
giscanner: Recognize _Thread_local as a storage class specifier
_Thread_local is a C11 keyword, and thread_local is a macro to make it more confortable to read. As this keyword can only be used in variable declarations, not in function return values or parameters, it cannot be included in bindable APIs and we can safely ignore it. https://bugzilla.gnome.org/show_bug.cgi?id=756921
-rw-r--r--giscanner/scannerlexer.l2
-rw-r--r--giscanner/scannerparser.y8
-rw-r--r--giscanner/sourcescanner.h3
-rw-r--r--giscanner/sourcescanner.py1
4 files changed, 11 insertions, 3 deletions
diff --git a/giscanner/scannerlexer.l b/giscanner/scannerlexer.l
index 218024e9..7ffaad7f 100644
--- a/giscanner/scannerlexer.l
+++ b/giscanner/scannerlexer.l
@@ -181,6 +181,8 @@ stringtext ([^\\\"])|(\\.)
"__signed__" { return SIGNED; }
"__restrict" { return RESTRICT; }
"__restrict__" { return RESTRICT; }
+"thread_local" { return THREAD_LOCAL; }
+"_Thread_local" { return THREAD_LOCAL; }
"__typeof" { if (!parse_ignored_macro()) REJECT; }
"__volatile" { return VOLATILE; }
"__volatile__" { return VOLATILE; }
diff --git a/giscanner/scannerparser.y b/giscanner/scannerparser.y
index 4a40d6a4..d9490b00 100644
--- a/giscanner/scannerparser.y
+++ b/giscanner/scannerparser.y
@@ -234,8 +234,8 @@ toggle_conditional (GISourceScanner *scanner)
%token AUTO BOOL BREAK CASE CHAR CONST CONTINUE DEFAULT DO DOUBLE ELSE ENUM
%token EXTENSION EXTERN FLOAT FOR GOTO IF INLINE INT LONG REGISTER RESTRICT
-%token RETURN SHORT SIGNED SIZEOF STATIC STRUCT SWITCH TYPEDEF UNION UNSIGNED
-%token VOID VOLATILE WHILE
+%token RETURN SHORT SIGNED SIZEOF STATIC STRUCT SWITCH THREAD_LOCAL TYPEDEF
+%token UNION UNSIGNED VOID VOLATILE WHILE
%token FUNCTION_MACRO OBJECT_MACRO
%token IFDEF_GI_SCANNER IFNDEF_GI_SCANNER
@@ -849,6 +849,10 @@ storage_class_specifier
{
$$ = STORAGE_CLASS_REGISTER;
}
+ | THREAD_LOCAL
+ {
+ $$ = STORAGE_CLASS_THREAD_LOCAL;
+ }
;
type_specifier
diff --git a/giscanner/sourcescanner.h b/giscanner/sourcescanner.h
index 9e371312..2167df70 100644
--- a/giscanner/sourcescanner.h
+++ b/giscanner/sourcescanner.h
@@ -69,7 +69,8 @@ typedef enum
STORAGE_CLASS_EXTERN = 1 << 2,
STORAGE_CLASS_STATIC = 1 << 3,
STORAGE_CLASS_AUTO = 1 << 4,
- STORAGE_CLASS_REGISTER = 1 << 5
+ STORAGE_CLASS_REGISTER = 1 << 5,
+ STORAGE_CLASS_THREAD_LOCAL = 1 << 6
} StorageClassSpecifier;
typedef enum
diff --git a/giscanner/sourcescanner.py b/giscanner/sourcescanner.py
index 30fa75f0..0577ced8 100644
--- a/giscanner/sourcescanner.py
+++ b/giscanner/sourcescanner.py
@@ -70,6 +70,7 @@ STORAGE_CLASS_EXTERN = 1 << 2
STORAGE_CLASS_STATIC = 1 << 3
STORAGE_CLASS_AUTO = 1 << 4
STORAGE_CLASS_REGISTER = 1 << 5
+STORAGE_CLASS_THREAD_LOCAL = 1 << 6
TYPE_QUALIFIER_NONE = 0
TYPE_QUALIFIER_CONST = 1 << 1