diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CPartitionerTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CPartitionerTest.java index 46e09d497be..e6dc29157fb 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CPartitionerTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CPartitionerTest.java @@ -1195,9 +1195,10 @@ public class CPartitionerTest extends TestCase { public void testNumberSeparators() { try { - fDocument.replace(0, fDocument.getLength(), "1'123'456\n0x1000'1000\n0111'1000\n0xAABB'CCDD"); + fDocument.replace(0, fDocument.getLength(), + "0b1'100'100'100\n1'123'456\n0x1000'1000\n0111'1000\n0xAABB'CCDD"); ITypedRegion[] result = fDocument.computePartitioning(0, fDocument.getLength()); - TypedRegion[] expectation = { new TypedRegion(0, 43, IDocument.DEFAULT_CONTENT_TYPE) }; + TypedRegion[] expectation = { new TypedRegion(0, fDocument.getLength(), IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/NumberRuleTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/NumberRuleTest.java index 536626b2578..a99c5b4d8a6 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/NumberRuleTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/NumberRuleTest.java @@ -68,6 +68,15 @@ public class NumberRuleTest extends TestCase { assertNumber("-123456789"); assertNumber("+123456789"); + // binary numbers (C++14) + assertNumber("0b0"); + assertNumber("-0b0"); + assertNumber("+0b1"); + assertNumber("-0B0"); + assertNumber("+0B1"); + assertNumber("+0b01010101"); + assertNumber("+0b10101010"); + // hex numbers assertNumber("0xaffe"); assertNumber("-0xaffe"); @@ -104,6 +113,9 @@ public class NumberRuleTest extends TestCase { assertNoNumber("."); assertNoNumber("-."); assertNoNumber("+."); + assertNoNumber("b"); + assertNoNumber(".b"); + assertNoNumber("-b"); assertNoNumber("x"); assertNoNumber(".x"); assertNoNumber("-x"); @@ -126,6 +138,7 @@ public class NumberRuleTest extends TestCase { } public void testSeparators() { + assertNumber("0b1'100'100'100"); assertNumber("1'123'456"); assertNumber("0x1000'1000"); assertNumber("0111'1000"); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/NumberRule.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/NumberRule.java index 2cb82d0b281..0799674b4f0 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/NumberRule.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/NumberRule.java @@ -61,6 +61,13 @@ public class NumberRule implements IRule { } while (isHexDigitOrSeparator(ch)); scanner.unread(); return token; + } else if (xCh == 'b' || xCh == 'B') { + // binary number starting with [+-]?0[bB] + do { + ch = scanner.read(); + } while (isBinDigitOrSeparator(ch)); + scanner.unread(); + return token; } scanner.unread(); // assert ch == '0'; @@ -107,6 +114,15 @@ public class NumberRule implements IRule { return ch == '-' || ch == '+' || ch == '.' || Character.isDigit((char) ch); } + /** + * Checks if part of binary number; + * @param ch Char to check. + * @return true + */ + private boolean isBinDigitOrSeparator(int ch) { + return ch == '0' || ch == '1' || ch == '\''; + } + /** * Checks if part of decimal number; * @param ch Char to check.