summaryrefslogtreecommitdiff
path: root/vala/valascanner.vala
diff options
context:
space:
mode:
Diffstat (limited to 'vala/valascanner.vala')
-rw-r--r--vala/valascanner.vala24
1 files changed, 23 insertions, 1 deletions
diff --git a/vala/valascanner.vala b/vala/valascanner.vala
index f6f4cd7bf..a198ed72a 100644
--- a/vala/valascanner.vala
+++ b/vala/valascanner.vala
@@ -611,11 +611,33 @@ public class Vala.Scanner {
switch (current[1]) {
case 'x':
case 'X':
- // hexadecimal integer literal
+ // hexadecimal literal
current += 2;
while (current < end && current[0].isxdigit ()) {
current++;
}
+ // fractional part
+ // hexadecimal fractional part
+ if (current < end - 1 && current[0] == '.' && current[1].isxdigit ()) {
+ type = TokenType.REAL_LITERAL;
+ current++;
+ while (current < end && current[0].isxdigit ()) {
+ current++;
+ }
+ }
+ // hexadecimal exponent part
+ if (current < end && current[0].tolower () == 'p') {
+ type = TokenType.REAL_LITERAL;
+ current++;
+ if (current < end && (current[0] == '+' || current[0] == '-')) {
+ current++;
+ }
+ while (current < end && current[0].isdigit ()) {
+ current++;
+ }
+ } else if (type == TokenType.REAL_LITERAL) {
+ Report.error (get_source_reference (1), "hexadecimal floating constants require an exponent");
+ }
break;
case 'b':
case 'B':