custom integer with falliblity
This commit is contained in:
parent
882f30371e
commit
5aba59b291
|
|
@ -389,7 +389,7 @@ fn new_token_input<'a>(input: &'a str) -> TokenInput<'a> {
|
|||
|
||||
fn type_parser<'a, E>() -> impl Parser<'a, TokenInput<'a>, Type, E>
|
||||
where
|
||||
E: chumsky::extra::ParserExtra<'a, TokenInput<'a>> + 'a,
|
||||
E: chumsky::extra::ParserExtra<'a, TokenInput<'a>, Error = EmptyErr> + 'a,
|
||||
{
|
||||
let primitives = select! {
|
||||
Token::Void => InnerType::Unit,
|
||||
|
|
@ -408,16 +408,24 @@ where
|
|||
Token::I64 => InnerType::Int { signed: true, size: IntSize::Bits(64) },
|
||||
Token::ISize => InnerType::Int { signed: true, size: IntSize::Pointer },
|
||||
};
|
||||
let u16 = text::int(10)
|
||||
.to_slice()
|
||||
.from_str::<u16>()
|
||||
.try_map(|u, _span| u.map_err(|_| EmptyErr::default()));
|
||||
|
||||
let custom_int_inner = choice((just::<_, _, extra::Default>('u'), just('i')))
|
||||
.then(text::int(10).to_slice().from_str::<u16>().unwrapped())
|
||||
let integral_type = choice((just::<_, _, extra::Default>('u'), just('i')))
|
||||
.then(u16)
|
||||
.map(|(sign, size)| InnerType::Int {
|
||||
signed: sign == 'i',
|
||||
size: IntSize::Bits(size),
|
||||
});
|
||||
|
||||
let custom_int =
|
||||
select! {Token::Ident(ident) => ident}.map(move |s| custom_int_inner.parse(s).unwrap());
|
||||
let custom_int = select! {Token::Ident(ident) => ident}.try_map(move |s, _span| {
|
||||
integral_type
|
||||
.parse(s)
|
||||
.into_result()
|
||||
.map_err(|_| EmptyErr::default())
|
||||
});
|
||||
|
||||
recursive(|ty| {
|
||||
let pointer = just(Token::Star)
|
||||
|
|
|
|||
Loading…
Reference in a new issue