// File: /workspace/github_c_makefile_star2_O1/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 %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq 0x10(%rsi), %r12
cmpb $0x30, -0x1(%r12)
jne 0xa07b
movzbl (%r12), %eax
addl $-0x42, %eax
cmpl $0x36, %eax
ja 0xa07b
movabsq $0x100000001, %rcx      # imm = 0x100000001
btq %rax, %rcx
jb 0xa158
movabsq $0x200000002000, %rcx   # imm = 0x200000002000
btq %rax, %rcx
jb 0xa0d0
movabsq $0x40000000400000, %rcx # imm = 0x40000000400000
btq %rax, %rcx
jae 0xa07b
leaq 0x1(%r12), %r15
movq %r15, 0x10(%r14)
callq 0x2220
movq (%rax), %rdx
movsbq 0x1(%r12), %rcx
testb $0x10, 0x1(%rdx,%rcx,2)
je 0xa10e
testb %cl, %cl
je 0xa06e
incq %r15
movq %r15, 0x10(%r14)
movq (%rax), %rdx
movq 0x10(%r14), %r15
movsbq (%r15), %rcx
jmp 0xa058
callq 0x2220
movq (%rax), %rdx
movq 0x10(%r14), %rcx
movsbq (%rcx), %rsi
testb $0x8, 0x1(%rdx,%rsi,2)
je 0xa0a0
testb %sil, %sil
je 0xa080
incq %rcx
movq %rcx, 0x10(%r14)
jmp 0xa080
cmpb $0x2e, %sil
jne 0xa0b2
movsbq 0x1(%rcx), %rsi
testb $0x8, 0x1(%rdx,%rsi,2)
jne 0xa125
movl $0x30, (%rbx)
movl 0x18(%r14), %eax
movl %eax, 0x14(%rbx)
movq 0x8(%r14), %rax
movq %rax, 0x8(%rbx)
movq 0x10(%r14), %r15
jmp 0xa187
leaq 0x1(%r12), %r15
movq %r15, 0x10(%r14)
callq 0x2220
movsbq 0x1(%r12), %rcx
cmpq $0x37, %rcx
jg 0xa10e
movq (%rax), %rdx
movzwl (%rdx,%rcx,2), %edx
andl $0x800, %edx            # imm = 0x800
je 0xa10e
testb %cl, %cl
je 0xa104
incq %r15
movq %r15, 0x10(%r14)
movq 0x10(%r14), %r15
movsbq (%r15), %rcx
jmp 0xa0e4
movl $0x30, (%rbx)
movl 0x18(%r14), %eax
movl %eax, 0x14(%rbx)
movq 0x8(%r14), %rax
movq %rax, 0x8(%rbx)
jmp 0xa187
leaq 0x1(%rcx), %rdx
movq %rdx, 0x10(%r14)
movq (%rax), %rsi
movsbq 0x1(%rcx), %rcx
testb $0x8, 0x1(%rsi,%rcx,2)
je 0xa0b2
testb %cl, %cl
je 0xa14b
incq %rdx
movq %rdx, 0x10(%r14)
movq (%rax), %rsi
movq 0x10(%r14), %rdx
movsbq (%rdx), %rcx
jmp 0xa135
incq %r12
movq %r12, 0x10(%r14)
movb (%r12), %al
andb $-0x2, %al
incq %r12
cmpb $0x30, %al
je 0xa15b
movl $0x30, (%rbx)
movl 0x18(%r14), %eax
movl %eax, 0x14(%rbx)
movq 0x8(%r14), %rax
movq %rax, 0x8(%rbx)
decq %r12
movq %r12, %r15
subl %eax, %r15d
movl %r15d, 0x10(%rbx)
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
nopl (%rax)