Skip to content

Commit d86e814

Browse files
committed
Add support for binary literals in arithmetic expressions
1 parent 468bf37 commit d86e814

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

parser/arithm.c

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,23 @@ static size_t peek_hex_literal(struct mrsh_parser *parser) {
7474
return i;
7575
}
7676

77+
static size_t peek_binary_literal(struct mrsh_parser *parser) {
78+
size_t i = 2; // We already know '0b' prefix is there
79+
80+
while (true) {
81+
parser_peek(parser, NULL, i + 1);
82+
83+
char c = parser->buf.data[i];
84+
if (c != '0' && c != '1') {
85+
break;
86+
}
87+
88+
++i;
89+
}
90+
91+
return i;
92+
}
93+
7794
static size_t peek_literal(struct mrsh_parser *parser) {
7895
size_t i = 0;
7996

@@ -85,9 +102,10 @@ static size_t peek_literal(struct mrsh_parser *parser) {
85102
parser_peek(parser, NULL, 2);
86103

87104
c = parser->buf.data[1];
88-
// TODO: 0b prefix
89105
if (c == 'x' || c == 'X') {
90106
return peek_hex_literal(parser);
107+
} else if (c == 'b' || c == 'B') {
108+
return peek_binary_literal(parser);
91109
}
92110
}
93111

test/arithm.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ echo "1 =" $((1))
44
echo "0x0 = " $((0x0))
55
echo "0x100 = " $((0x100))
66
echo "0xabcd = " $((0xabcd))
7+
echo "0b0 = " $((0b0))
8+
echo "0b1010 = " $((0b1010))
9+
echo "0B1111 = " $((0B1111))
710
echo "2*5 =" $((2*5))
811
echo "2/5 =" $((2/5))
912
echo "2%5 =" $((2%5))

0 commit comments

Comments
 (0)