diff options
Diffstat (limited to 'giscanner/scannerlexer.l')
-rw-r--r-- | giscanner/scannerlexer.l | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/giscanner/scannerlexer.l b/giscanner/scannerlexer.l index a783ec06..554e2da7 100644 --- a/giscanner/scannerlexer.l +++ b/giscanner/scannerlexer.l @@ -46,6 +46,7 @@ char linebuf[2000]; extern int yylex (GISourceScanner *scanner); #define YY_DECL int yylex (GISourceScanner *scanner) static int yywrap (void); +static void parse_gtk_doc_comment (GISourceScanner *scanner); static void parse_comment (GISourceScanner *scanner); static void parse_trigraph (GISourceScanner *scanner); static void process_linemarks (GISourceScanner *scanner); @@ -71,8 +72,10 @@ stringtext ([^\\\"])|(\\.) ++lineno; } "\\\n" { ++lineno; } + [\t\f\v\r ]+ { /* Ignore whitespace. */ } +"/**" { parse_gtk_doc_comment(scanner); } "/*" { parse_comment(scanner); } "/*"[\t ]?<[\t ,=A-Za-z0-9_]+>[\t ]?"*/" { parse_trigraph(scanner); } "//".* { /* Ignore C++ style comments. */ } @@ -134,6 +137,8 @@ stringtext ([^\\\"])|(\\.) "," { return ','; } "->" { return ARROW; } +"__asm"[\t\f\v\r ]+"volatile" { if (!parse_ignored_macro()) REJECT; } +"__asm__"[\t\f\v\r ]+"volatile" { if (!parse_ignored_macro()) REJECT; } "__asm" { if (!parse_ignored_macro()) REJECT; } "__asm__" { if (!parse_ignored_macro()) REJECT; } "__attribute__" { if (!parse_ignored_macro()) REJECT; } @@ -145,6 +150,8 @@ stringtext ([^\\\"])|(\\.) "__signed__" { return SIGNED; } "__restrict" { return RESTRICT; } "__typeof" { if (!parse_ignored_macro()) REJECT; } +"__volatile" { if (!parse_ignored_macro()) REJECT; } +"__volatile__" { if (!parse_ignored_macro()) REJECT; } "_Bool" { return BOOL; } "G_GINT64_CONSTANT" { return INTL_CONST; } @@ -170,6 +177,10 @@ stringtext ([^\\\"])|(\\.) "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; } "register" { return REGISTER; } "restrict" { return RESTRICT; } @@ -212,9 +223,8 @@ yywrap (void) return 1; } - static void -parse_comment (GISourceScanner *scanner) +parse_gtk_doc_comment (GISourceScanner *scanner) { GString *string = NULL; int c1, c2; @@ -227,7 +237,7 @@ parse_comment (GISourceScanner *scanner) (GCompareFunc)g_strcmp0)) { skip = TRUE; } else { - string = g_string_new ("/*"); + string = g_string_new (yytext); } c1 = input(); @@ -262,6 +272,26 @@ parse_comment (GISourceScanner *scanner) comment); } +static void +parse_comment (GISourceScanner *scanner) +{ + int c1, c2; + + c1 = input(); + c2 = input(); + + while (c2 != EOF && !(c1 == '*' && c2 == '/')) + { + if (c1 == '\n') + lineno++; + + c1 = c2; + c2 = input(); + } + + return; +} + static int check_identifier (GISourceScanner *scanner, const char *s) |