Hex parsing done
This commit is contained in:
parent
253a85005c
commit
17e8ebe789
@ -963,7 +963,9 @@ impl Parser {
|
|||||||
Ok(Expression(IntLiteral(n), None))
|
Ok(Expression(IntLiteral(n), None))
|
||||||
},
|
},
|
||||||
HexLiteral(text) => {
|
HexLiteral(text) => {
|
||||||
ParseError::new("Not implemented")
|
let digits: String = text.chars().filter(|c| c.is_digit(16)).collect();
|
||||||
|
let n = parse_hex(digits)?;
|
||||||
|
Ok(Expression(IntLiteral(n), None))
|
||||||
},
|
},
|
||||||
_ => return ParseError::new("Expected '0x' or '0b'"),
|
_ => return ParseError::new("Expected '0x' or '0b'"),
|
||||||
}
|
}
|
||||||
@ -1090,7 +1092,15 @@ mod parse_tests {
|
|||||||
fn parsing_number_literals_and_binexps() {
|
fn parsing_number_literals_and_binexps() {
|
||||||
parse_test!(".2", AST(vec![exprstatement!(FloatLiteral(0.2))]));
|
parse_test!(".2", AST(vec![exprstatement!(FloatLiteral(0.2))]));
|
||||||
parse_test!("8.1", AST(vec![exprstatement!(FloatLiteral(8.1))]));
|
parse_test!("8.1", AST(vec![exprstatement!(FloatLiteral(8.1))]));
|
||||||
|
|
||||||
parse_test!("0b010", AST(vec![exprstatement!(IntLiteral(2))]));
|
parse_test!("0b010", AST(vec![exprstatement!(IntLiteral(2))]));
|
||||||
|
parse_test!("0b0_1_0_", AST(vec![exprstatement!(IntLiteral(2))]));
|
||||||
|
|
||||||
|
parse_test!("0xff", AST(vec![exprstatement!(IntLiteral(255))]));
|
||||||
|
parse_test!("0xf_f_", AST(vec![exprstatement!(IntLiteral(255))]));
|
||||||
|
|
||||||
|
parse_test!("0xf_f_+1", AST(vec![exprstatement!(binexp!("+", IntLiteral(255), IntLiteral(1)))]));
|
||||||
|
|
||||||
parse_test!("3; 4; 4.3", AST(
|
parse_test!("3; 4; 4.3", AST(
|
||||||
vec![exprstatement!(IntLiteral(3)), exprstatement!(IntLiteral(4)),
|
vec![exprstatement!(IntLiteral(3)), exprstatement!(IntLiteral(4)),
|
||||||
exprstatement!(FloatLiteral(4.3))]));
|
exprstatement!(FloatLiteral(4.3))]));
|
||||||
|
Loading…
Reference in New Issue
Block a user