[gobject-introspection] giscanner: Recognize _Thread_local as a storage class specifier



commit ab71b25969404f615f44b509f4272ca83349590b
Author: Ting-Wei Lan <lantw src gnome org>
Date:   Sun Apr 24 16:51:00 2016 +0800

    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

 giscanner/scannerlexer.l   |    2 ++
 giscanner/scannerparser.y  |    8 ++++++--
 giscanner/sourcescanner.h  |    3 ++-
 giscanner/sourcescanner.py |    1 +
 4 files changed, 11 insertions(+), 3 deletions(-)
---
diff --git a/giscanner/scannerlexer.l b/giscanner/scannerlexer.l
index 218024e..7ffaad7 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 4a40d6a..d9490b0 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 9e37131..2167df7 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 30fa75f..0577ced 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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]