summaryrefslogtreecommitdiff
path: root/giscanner/scannerlexer.l
diff options
context:
space:
mode:
Diffstat (limited to 'giscanner/scannerlexer.l')
-rw-r--r--giscanner/scannerlexer.l36
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)