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:
parent
4ec47dbc35
commit
69a1589726
3 changed files with 32 additions and 2 deletions
|
@ -1195,9 +1195,10 @@ public class CPartitionerTest extends TestCase {
|
||||||
|
|
||||||
public void testNumberSeparators() {
|
public void testNumberSeparators() {
|
||||||
try {
|
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());
|
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);
|
checkPartitioning(expectation, result);
|
||||||
} catch (BadLocationException x) {
|
} catch (BadLocationException x) {
|
||||||
assertTrue(false);
|
assertTrue(false);
|
||||||
|
|
|
@ -68,6 +68,15 @@ public class NumberRuleTest extends TestCase {
|
||||||
assertNumber("-123456789");
|
assertNumber("-123456789");
|
||||||
assertNumber("+123456789");
|
assertNumber("+123456789");
|
||||||
|
|
||||||
|
// binary numbers (C++14)
|
||||||
|
assertNumber("0b0");
|
||||||
|
assertNumber("-0b0");
|
||||||
|
assertNumber("+0b1");
|
||||||
|
assertNumber("-0B0");
|
||||||
|
assertNumber("+0B1");
|
||||||
|
assertNumber("+0b01010101");
|
||||||
|
assertNumber("+0b10101010");
|
||||||
|
|
||||||
// hex numbers
|
// hex numbers
|
||||||
assertNumber("0xaffe");
|
assertNumber("0xaffe");
|
||||||
assertNumber("-0xaffe");
|
assertNumber("-0xaffe");
|
||||||
|
@ -104,6 +113,9 @@ public class NumberRuleTest extends TestCase {
|
||||||
assertNoNumber(".");
|
assertNoNumber(".");
|
||||||
assertNoNumber("-.");
|
assertNoNumber("-.");
|
||||||
assertNoNumber("+.");
|
assertNoNumber("+.");
|
||||||
|
assertNoNumber("b");
|
||||||
|
assertNoNumber(".b");
|
||||||
|
assertNoNumber("-b");
|
||||||
assertNoNumber("x");
|
assertNoNumber("x");
|
||||||
assertNoNumber(".x");
|
assertNoNumber(".x");
|
||||||
assertNoNumber("-x");
|
assertNoNumber("-x");
|
||||||
|
@ -126,6 +138,7 @@ public class NumberRuleTest extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSeparators() {
|
public void testSeparators() {
|
||||||
|
assertNumber("0b1'100'100'100");
|
||||||
assertNumber("1'123'456");
|
assertNumber("1'123'456");
|
||||||
assertNumber("0x1000'1000");
|
assertNumber("0x1000'1000");
|
||||||
assertNumber("0111'1000");
|
assertNumber("0111'1000");
|
||||||
|
|
|
@ -61,6 +61,13 @@ public class NumberRule implements IRule {
|
||||||
} while (isHexDigitOrSeparator(ch));
|
} while (isHexDigitOrSeparator(ch));
|
||||||
scanner.unread();
|
scanner.unread();
|
||||||
return token;
|
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();
|
scanner.unread();
|
||||||
// assert ch == '0';
|
// assert ch == '0';
|
||||||
|
@ -107,6 +114,15 @@ public class NumberRule implements IRule {
|
||||||
return ch == '-' || ch == '+' || ch == '.' || Character.isDigit((char) ch);
|
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;
|
* Checks if part of decimal number;
|
||||||
* @param ch Char to check.
|
* @param ch Char to check.
|
||||||
|
|
Loading…
Add table
Reference in a new issue