// File: /workspace/github_c_makefile_star2_O3/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
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
movq 0x10(%rsi), %r12
movb (%r12), %bpl
cmpb $0x30, -0x1(%r12)
jne 0x9cd8
movzbl %bpl, %eax
addl $-0x42, %eax
cmpl $0x36, %eax
ja 0x9cd8
movabsq $0x100000001, %rcx      # imm = 0x100000001
btq %rax, %rcx
jb 0x9dc5
movabsq $0x200000002000, %rcx   # imm = 0x200000002000
btq %rax, %rcx
jb 0x9d73
movabsq $0x40000000400000, %rcx # imm = 0x40000000400000
btq %rax, %rcx
jae 0x9cd8
leaq 0x1(%r12), %r15
movq %r15, 0x10(%r14)
callq 0x2220
movq (%rax), %rcx
movsbq 0x1(%r12), %rdx
testb $0x10, 0x1(%rcx,%rdx,2)
je 0x9ddf
testb %dl, %dl
je 0x9cc6
leaq 0x1(%r15), %rsi
movq %rsi, 0x10(%r14)
movq (%rax), %rcx
movb 0x1(%r15), %dl
movq %rsi, %r15
jmp 0x9cc8
xorl %edx, %edx
movsbq %dl, %rsi
testb $0x10, 0x1(%rcx,%rsi,2)
jne 0x9cae
jmp 0x9ddf
movsbq %bpl, %r15
callq 0x2220
movq (%rax), %rcx
testb $0x8, 0x1(%rcx,%r15,2)
je 0x9d14
testb %bpl, %bpl
je 0x9d07
leaq 0x1(%r12), %rdx
movq %rdx, 0x10(%r14)
movq (%rax), %rcx
movb 0x1(%r12), %bpl
movq %rdx, %r12
jmp 0x9d09
xorl %ebp, %ebp
movsbq %bpl, %rdx
testb $0x8, 0x1(%rcx,%rdx,2)
jne 0x9cec
cmpb $0x2e, %bpl
jne 0x9ddc
movsbq 0x1(%r12), %rdx
testb $0x8, 0x1(%rcx,%rdx,2)
je 0x9ddc
incq %r12
movq %r12, 0x10(%r14)
movq (%rax), %rcx
movsbq (%r12), %rdx
testb $0x8, 0x1(%rcx,%rdx,2)
je 0x9ddc
movq %r12, %r15
testb %dl, %dl
je 0x9d64
leaq 0x1(%r15), %rsi
movq %rsi, 0x10(%r14)
movq (%rax), %rcx
movb 0x1(%r15), %dl
movq %rsi, %r15
jmp 0x9d66
xorl %edx, %edx
movsbq %dl, %rsi
testb $0x8, 0x1(%rcx,%rsi,2)
jne 0x9d4c
jmp 0x9ddf
leaq 0x1(%r12), %r15
movq %r15, 0x10(%r14)
callq 0x2220
movsbq 0x1(%r12), %rcx
cmpq $0x37, %rcx
jg 0x9ddf
movq (%rax), %rdx
movzwl (%rdx,%rcx,2), %esi
andl $0x800, %esi            # imm = 0x800
je 0x9ddf
testb %cl, %cl
je 0x9db4
leaq 0x1(%r15), %rsi
movq %rsi, 0x10(%r14)
movq (%rax), %rdx
movb 0x1(%r15), %cl
movq %rsi, %r15
jmp 0x9db6
xorl %ecx, %ecx
cmpb $0x37, %cl
jg 0x9ddf
movsbq %cl, %rsi
movzwl (%rdx,%rsi,2), %esi
jmp 0x9d94
incq %r12
movq %r12, 0x10(%r14)
movb (%r12), %al
andb $-0x2, %al
incq %r12
cmpb $0x30, %al
je 0x9dc8
decq %r12
movq %r12, %r15
movl $0x30, (%rbx)
movl 0x18(%r14), %eax
movl %eax, 0x14(%rbx)
movq 0x8(%r14), %rax
movq %rax, 0x8(%rbx)
subl %eax, %r15d
movl %r15d, 0x10(%rbx)
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq