diff options
author | Jamie McCracken <jamiemcc gnome org> | 2009-09-27 11:42:47 -0400 |
---|---|---|
committer | Jamie McCracken <jamiemcc gnome org> | 2009-09-27 11:44:24 -0400 |
commit | e53b00f5a50f6b287e8be2e4dbf8a7b997a43ab0 (patch) | |
tree | 2edc6ae85dbbf999ee2ab720f38eb995bf445473 /vala/valageniescanner.vala | |
parent | 8b226b16d9f472d9ad93cbb6f292be2dbe477fd9 (diff) | |
download | vala-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.vala | 43 |
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; } |