summaryrefslogtreecommitdiff
path: root/giscanner/scannerlexer.l
diff options
context:
space:
mode:
authorTomasz Miąsko <tomasz.miasko@gmail.com>2018-04-02 00:00:00 +0000
committerChristoph Reiter <reiter.christoph@gmail.com>2018-06-23 11:20:13 +0200
commitda426f7672b9c88658685aaf5cef948e02eb8c01 (patch)
tree8ebe55c7bc67859ece5316b399409d2f33ed9c42 /giscanner/scannerlexer.l
parent864c9a0aac9c8d588f393f2f0fa9d438bd8baa10 (diff)
downloadgobject-introspection-da426f7672b9c88658685aaf5cef948e02eb8c01.tar.gz
Recognize additional basic types from ISO/IEC TS 18661-3:2015.
Recognize additional floating point types from ISO/IEC TS 18661-3:2015, that are already in use by glibc. This continues work from commit 8cf3e8e5cf6d0d49db359f50c6eb0bc9ca22fbef and fixes issue #201. * _Float16 * _Float32 * _Float64 * _Float128 * _Float32x * _Float64x * _Float128x Use a single BASIC_TYPE token for basic types, while using its string representation as a type name. This also fixes incorrect type used previously for __uint128_t, __int128_t, __uint128, __int128, and _Float128 (they have been mapped to int and float respectively). Also avoid mapping bool and _Bool to gboolean as those are distinct types and generally ABI incompatible. Fixes issue #202. After this changes, when _Bool, _Float* or _int128 types are used as a part of public API, g-ir-scanner will produce warning about unresolved type. This is appropriate given that they are currently inexpressible in GIRepository format.
Diffstat (limited to 'giscanner/scannerlexer.l')
-rw-r--r--giscanner/scannerlexer.l37
1 files changed, 21 insertions, 16 deletions
diff --git a/giscanner/scannerlexer.l b/giscanner/scannerlexer.l
index 7ffaad7f..08d72894 100644
--- a/giscanner/scannerlexer.l
+++ b/giscanner/scannerlexer.l
@@ -177,8 +177,6 @@ stringtext ([^\\\"])|(\\.)
"_Nullable" { /* Ignore */ }
"_Null_unspecified" { /* Ignore */ }
"_Noreturn" { /* Ignore */ }
-"__signed" { return SIGNED; }
-"__signed__" { return SIGNED; }
"__restrict" { return RESTRICT; }
"__restrict__" { return RESTRICT; }
"thread_local" { return THREAD_LOCAL; }
@@ -186,15 +184,13 @@ stringtext ([^\\\"])|(\\.)
"__typeof" { if (!parse_ignored_macro()) REJECT; }
"__volatile" { return VOLATILE; }
"__volatile__" { return VOLATILE; }
-"_Bool" { return BOOL; }
+"_Bool" { return BASIC_TYPE; }
"typedef char __static_assert_t".*"\n" { ++lineno; /* Ignore */ }
"__cdecl" { /* Ignore */ }
"__declspec(deprecated(".*"))" { /* Ignore */ }
"__declspec"[\t ]*"("[a-z\t ]+")" { /* Ignore */ }
"__stdcall" { /* ignore */ }
"__w64" { /* ignore */ }
-"__int64" { return INT; }
-"_Float128" { return FLOAT; }
"G_GINT64_CONSTANT" { return INTL_CONST; }
"G_GUINT64_CONSTANT" { return INTUL_CONST; }
@@ -208,34 +204,43 @@ stringtext ([^\\\"])|(\\.)
"asm" { if (!parse_ignored_macro()) REJECT; }
"auto" { return AUTO; }
-"bool" { return BOOL; }
"break" { return BREAK; }
"case" { return CASE; }
-"char" { return CHAR; }
+"char" { return BASIC_TYPE; }
"const" { return CONST; }
"continue" { return CONTINUE; }
"default" { return DEFAULT; }
"do" { return DO; }
-"double" { return DOUBLE; }
+"double" { return BASIC_TYPE; }
"else" { return ELSE; }
"enum" { return ENUM; }
"extern" { return EXTERN; }
-"float" { return FLOAT; }
+"float" { return BASIC_TYPE; }
+"_Float16" { return BASIC_TYPE; }
+"_Float32" { return BASIC_TYPE; }
+"_Float64" { return BASIC_TYPE; }
+"_Float128" { return BASIC_TYPE; }
+"_Float32x" { return BASIC_TYPE; }
+"_Float64x" { return BASIC_TYPE; }
+"_Float128x" { return BASIC_TYPE; }
"for" { return FOR; }
"goto" { return GOTO; }
"if" { return IF; }
"inline" { return INLINE; }
-"int" { return INT; }
-"__uint128_t" { return INT; }
-"__int128_t" { return INT; }
-"__uint128" { return INT; }
-"__int128" { return INT; }
-"long" { return LONG; }
+"int" { return BASIC_TYPE; }
+"__int64" { return BASIC_TYPE; }
+"__uint128_t" { return BASIC_TYPE; }
+"__int128_t" { return BASIC_TYPE; }
+"__uint128" { return BASIC_TYPE; }
+"__int128" { return BASIC_TYPE; }
+"long" { return BASIC_TYPE; }
"register" { return REGISTER; }
"restrict" { return RESTRICT; }
"return" { return RETURN; }
-"short" { return SHORT; }
+"short" { return BASIC_TYPE; }
"signed" { return SIGNED; }
+"__signed" { return SIGNED; }
+"__signed__" { return SIGNED; }
"sizeof" { return SIZEOF; }
"static" { return STATIC; }
"struct" { return STRUCT; }