// File: /workspace/github_c_makefile_star2_O0/mahrr[P]raven/src/lexer.c
// Function: number
static Token number(Lexer *lexer) {
    if (lexer->current[-1] == '0') {
        switch (peek(lexer)) {
        case 'x':
        case 'X':
            advance(lexer); // consume 'x'
            while (isxdigit(peek(lexer))) {
                advance(lexer);
            }
            return new_token(lexer, TOKEN_NUMBER);

        case 'o':
        case 'O':
            advance(lexer); // consume 'b'
            while (isdigit(peek(lexer)) && peek(lexer) < '8') {
                advance(lexer);
            }
            return new_token(lexer, TOKEN_NUMBER);

        case 'b':
        case 'B':
            advance(lexer); // consume 'b'
            while (peek(lexer) == '0' || peek(lexer) == '1') {
                advance(lexer);
            }
            return new_token(lexer, TOKEN_NUMBER);
        }
    }

    while (isdigit(peek(lexer))) advance(lexer);

    if (peek(lexer) == '.' && isdigit(peek_next(lexer))) {
        advance(lexer); // consume dot
        while (isdigit(peek(lexer))) advance(lexer);
    }

    return new_token(lexer, TOKEN_NUMBER);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x18(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movsbl -0x1(%rax), %eax
cmpl $0x30, %eax
jne 0xc3fa
movq -0x8(%rbp), %rdi
callq 0xc560
movsbl %al, %eax
movl %eax, -0x1c(%rbp)
subl $0x42, %eax
je 0xc399
jmp 0xc283
movl -0x1c(%rbp), %eax
subl $0x4f, %eax
je 0xc31b
jmp 0xc291
movl -0x1c(%rbp), %eax
subl $0x58, %eax
je 0xc2c1
jmp 0xc29b
movl -0x1c(%rbp), %eax
subl $0x62, %eax
je 0xc399
jmp 0xc2a9
movl -0x1c(%rbp), %eax
subl $0x6f, %eax
je 0xc31b
jmp 0xc2b3
movl -0x1c(%rbp), %eax
subl $0x78, %eax
jne 0xc3f8
jmp 0xc2c1
movq -0x8(%rbp), %rdi
callq 0xbf30
callq 0x2210
movq (%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rdi
callq 0xc560
movb %al, %cl
movq -0x28(%rbp), %rax
movsbl %cl, %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x1000, %eax           # imm = 0x1000
cmpl $0x0, %eax
je 0xc304
movq -0x8(%rbp), %rdi
callq 0xbf30
jmp 0xc2ca
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x30, %edx
callq 0xbee0
jmp 0xc4cd
movq -0x8(%rbp), %rdi
callq 0xbf30
callq 0x2210
movq (%rax), %rax
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rdi
callq 0xc560
movb %al, %cl
movq -0x38(%rbp), %rax
movsbl %cl, %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %ecx
andl $0x800, %ecx            # imm = 0x800
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x29(%rbp)
je 0xc36e
movq -0x8(%rbp), %rdi
callq 0xc560
movsbl %al, %eax
cmpl $0x38, %eax
setl %al
movb %al, -0x29(%rbp)
movb -0x29(%rbp), %al
testb $0x1, %al
jne 0xc377
jmp 0xc382
movq -0x8(%rbp), %rdi
callq 0xbf30
jmp 0xc324
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x30, %edx
callq 0xbee0
jmp 0xc4cd
movq -0x8(%rbp), %rdi
callq 0xbf30
movq -0x8(%rbp), %rdi
callq 0xc560
movsbl %al, %ecx
movb $0x1, %al
cmpl $0x30, %ecx
movb %al, -0x39(%rbp)
je 0xc3cd
movq -0x8(%rbp), %rdi
callq 0xc560
movsbl %al, %eax
cmpl $0x31, %eax
sete %al
movb %al, -0x39(%rbp)
movb -0x39(%rbp), %al
testb $0x1, %al
jne 0xc3d6
jmp 0xc3e1
movq -0x8(%rbp), %rdi
callq 0xbf30
jmp 0xc3a2
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x30, %edx
callq 0xbee0
jmp 0xc4cd
jmp 0xc3fa
jmp 0xc3fc
callq 0x2210
movq (%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x8(%rbp), %rdi
callq 0xc560
movb %al, %cl
movq -0x48(%rbp), %rax
movsbl %cl, %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x800, %eax            # imm = 0x800
cmpl $0x0, %eax
je 0xc436
movq -0x8(%rbp), %rdi
callq 0xbf30
jmp 0xc3fc
movq -0x8(%rbp), %rdi
callq 0xc560
movsbl %al, %eax
cmpl $0x2e, %eax
jne 0xc4bb
callq 0x2210
movq (%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x8(%rbp), %rdi
callq 0xc580
movb %al, %cl
movq -0x50(%rbp), %rax
movsbl %cl, %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x800, %eax            # imm = 0x800
cmpl $0x0, %eax
je 0xc4bb
movq -0x8(%rbp), %rdi
callq 0xbf30
callq 0x2210
movq (%rax), %rax
movq %rax, -0x58(%rbp)
movq -0x8(%rbp), %rdi
callq 0xc560
movb %al, %cl
movq -0x58(%rbp), %rax
movsbl %cl, %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x800, %eax            # imm = 0x800
cmpl $0x0, %eax
je 0xc4b9
movq -0x8(%rbp), %rdi
callq 0xbf30
jmp 0xc47f
jmp 0xc4bb
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x30, %edx
callq 0xbee0
movq -0x10(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
nopw (%rax,%rax)