summaryrefslogtreecommitdiff
path: root/vala/valageniescanner.vala
diff options
context:
space:
mode:
authorJamie McCracken <jamiemcc gnome org>2009-09-27 11:42:47 -0400
committerJamie McCracken <jamiemcc gnome org>2009-09-27 11:44:24 -0400
commite53b00f5a50f6b287e8be2e4dbf8a7b997a43ab0 (patch)
tree2edc6ae85dbbf999ee2ab720f38eb995bf445473 /vala/valageniescanner.vala
parent8b226b16d9f472d9ad93cbb6f292be2dbe477fd9 (diff)
downloadvala-e53b00f5a50f6b287e8be2e4dbf8a7b997a43ab0.tar.gz
Genie: Briought Genie up to date with Vala
Added Async support Added bug fixes Added improved warnings Added improved array handling code Added support for constants in interfaces
Diffstat (limited to 'vala/valageniescanner.vala')
-rw-r--r--vala/valageniescanner.vala43
1 files changed, 33 insertions, 10 deletions
diff --git a/vala/valageniescanner.vala b/vala/valageniescanner.vala
index e39191c48..718a70b96 100644
--- a/vala/valageniescanner.vala
+++ b/vala/valageniescanner.vala
@@ -226,7 +226,14 @@ public class Vala.Genie.Scanner {
case 5:
switch (begin[0]) {
case 'a':
- if (matches (begin, "array")) return TokenType.ARRAY;
+ switch (begin[1]) {
+ case 'r':
+ if (matches (begin, "array")) return TokenType.ARRAY;
+ break;
+ case 's':
+ if (matches (begin, "async")) return TokenType.ASYNC;
+ break;
+ }
break;
case 'b':
if (matches (begin, "break")) return TokenType.BREAK;
@@ -346,9 +353,6 @@ public class Vala.Genie.Scanner {
case 't':
if (matches (begin, "typeof")) return TokenType.TYPEOF;
break;
- case 'y':
- if (matches (begin, "yields")) return TokenType.YIELDS;
- break;
}
break;
case 7:
@@ -884,7 +888,24 @@ public class Vala.Genie.Scanner {
if (current[0] == '\\') {
current++;
token_length_in_chars++;
- if (current < end && current[0] == 'x') {
+ if (current >= end) {
+ break;
+ }
+
+ switch (current[0]) {
+ case '\'':
+ case '"':
+ case '\\':
+ case '0':
+ case 'b':
+ case 'f':
+ case 'n':
+ case 'r':
+ case 't':
+ current++;
+ token_length_in_chars++;
+ break;
+ case 'x':
// hexadecimal escape character
current++;
token_length_in_chars++;
@@ -892,9 +913,10 @@ public class Vala.Genie.Scanner {
current++;
token_length_in_chars++;
}
- } else {
- current++;
- token_length_in_chars++;
+ break;
+ default:
+ Report.error (new SourceReference (source_file, line, column + token_length_in_chars, line, column + token_length_in_chars), "invalid escape sequence");
+ break;
}
} else if (current[0] == '\n') {
break;
@@ -904,6 +926,7 @@ public class Vala.Genie.Scanner {
current += u.to_utf8 (null);
token_length_in_chars++;
} else {
+ current++;
Report.error (new SourceReference (source_file, line, column + token_length_in_chars, line, column + token_length_in_chars), "invalid UTF-8 character");
}
}
@@ -978,7 +1001,7 @@ public class Vala.Genie.Scanner {
}
bool matches (char* begin, string keyword) {
- char* keyword_array = keyword;
+ char* keyword_array = (char *) keyword;
long len = keyword.len ();
for (int i = 0; i < len; i++) {
if (begin[i] != keyword_array[i]) {
@@ -997,7 +1020,7 @@ public class Vala.Genie.Scanner {
column++;
}
- if ((column == 1) && (current[0] == '#')) {
+ if ((column == 1) && (current < end) && (current[0] == '#')) {
pp_directive ();
return true;
}