From 75a901bc50f9337ca6d68c05dee804dbddca1b5a Mon Sep 17 00:00:00 2001 From: Stephan Unverwerth Date: Wed, 27 Sep 2017 23:05:16 +0200 Subject: [PATCH] Fix breakout level literal parsing --- src/DiagnosticsProvider.php | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/DiagnosticsProvider.php b/src/DiagnosticsProvider.php index 735c1812..6574de59 100644 --- a/src/DiagnosticsProvider.php +++ b/src/DiagnosticsProvider.php @@ -94,23 +94,19 @@ public static function checkDiagnostics($node) { $breakoutLevel = $breakoutLevel->expression; } - if ($breakoutLevel instanceof Node\Expression\NumericLiteral) { + if ( + $breakoutLevel instanceof Node\NumericLiteral + && $breakoutLevel->children->kind === TokenKind::IntegerLiteralToken + ) { $literalString = $breakoutLevel->getText(); - if ( - $breakoutLevel->children->kind === TokenKind::BinaryLiteralToken - && \bindec(\substr($literalString, 2)) > 0 - ) { - return null; + $firstTwoChars = \substr($literalString, 0, 2); + + if ($firstTwoChars === '0b' || $firstTwoChars === '0B') { + if (\bindec(\substr($literalString, 2)) > 0) { + return null; + } } - else if ( - \in_array($breakoutLevel->children->kind, [ - TokenKind::DecimalLiteralToken, - TokenKind::HexadecimalLiteralToken, - TokenKind::OctalLiteralToken, - TokenKind::IntegerLiteralToken - ]) - && \intval($literalString, 0) > 0 - ) { + else if (\intval($literalString, 0) > 0) { return null; } } @@ -125,7 +121,7 @@ public static function checkDiagnostics($node) { return new Diagnostic( DiagnosticKind::Error, - "Expected positive integer literal.", + "Positive integer literal expected.", $start, $end - $start );