Index: runtime/vm/scanner.cc |
diff --git a/runtime/vm/scanner.cc b/runtime/vm/scanner.cc |
index f7ae4ac59525fca9ca450cce9d6fa356af548dbb..b88770842084d71c2a3f0d0a33784e4f55a66e45 100644 |
--- a/runtime/vm/scanner.cc |
+++ b/runtime/vm/scanner.cc |
@@ -344,9 +344,10 @@ void Scanner::ScanIdentChars(bool allow_dollar) { |
} |
-// Parse integer or double number literal of format: |
-// NUMBER = INTEGER | DOUBLE |
+// Parse integer, rational, or double number literal of format: |
+// NUMBER = INTEGER | RATIONAL | DOUBLE |
// INTEGER = D+ | (("0x" | "0X") H+) |
+// RATIONAL = ((D+ ["." D*]) | ("." D+)) ("r" | "R") |
// DOUBLE = ((D+ ["." D*]) | ("." D+)) [ EXPONENT ] |
// EXPONENT = ("e" | "E") ["+" | "-"] D+ |
void Scanner::ScanNumber(bool dec_point_seen) { |
@@ -388,6 +389,8 @@ void Scanner::ScanNumber(bool dec_point_seen) { |
while (IsDecimalDigit(c0_)) { |
ReadChar(); |
} |
+ } else if ((c0_ == 'r') || (c0_ == 'R')) { |
+ Recognize(Token::kRATIONAL); |
} |
} |
if (current_token_.kind != Token::kILLEGAL) { |