fn integer_literal(
        &self,
        radix: u32,
        mut remaining: RemainingIter!(),
    ) -> Result<(Token, usize), Syntax> {
        let len = 2 + self
            .take_while(&mut remaining, |_| (), |n| n.is_digit(radix))
            .1;

        let integer = i64::from_str_radix(&self.grab_from_index(len)[2..], radix).map_err(|_| {
            Syntax::error(
                "Integer literal too large to fit in a signed 64-bit integer",
                // hate the + 2 hack
                // + 2 chars to take the `0?` into account
                &Span::new(&self.source, self.index, len),
            )
        });

        Ok((Token::Lit(Lit::Integer(integer?)), len))
    }
Must start with two-byte prefix `0?`, where `?`
indicates radix.
passerine/src/compiler/lex.rs