diff options
Diffstat (limited to 'vala/valascanner.vala')
-rw-r--r-- | vala/valascanner.vala | 24 |
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': |