1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-01 06:05:24 +02:00

Bug 558923: Syntax coloring for binary integer literals from C++14

Change-Id: Ib3b260b6638e689884a28037d1a814b737846867
Signed-off-by: Andrey Mozzhuhin <amozzhuhin@yandex.ru>
This commit is contained in:
Andrey Mozzhuhin 2020-01-08 16:18:27 +03:00 committed by Jonah Graham
parent 4ec47dbc35
commit 69a1589726
3 changed files with 32 additions and 2 deletions

View file

@ -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);

View file

@ -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");

View file

@ -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 <b>true</b>
*/
private boolean isBinDigitOrSeparator(int ch) {
return ch == '0' || ch == '1' || ch == '\'';
}
/**
* Checks if part of decimal number;
* @param ch Char to check.