// File: /workspace/github_c_makefile_star2_O0/vtereshkov[P]umka-lang/src/umka_lexer.c
// Function: lexOperator
static void lexOperator(Lexer *lex)
{
    lex->tok.kind = TOK_NONE;
    char ch = lex->buf[lex->bufPos];

    switch (ch)
    {
        case '+':
        {
            ch = lexChar(lex);
            if (ch == '=')
            {
                lex->tok.kind = TOK_PLUSEQ;
                ch = lexChar(lex);
            }
            else if (ch == '+')
            {
                lex->tok.kind = TOK_PLUSPLUS;
                ch = lexChar(lex);
            }
            else
                lex->tok.kind = TOK_PLUS;
            break;
        }

        case '-':
        {
            ch = lexChar(lex);
            if (ch == '=')
            {
                lex->tok.kind = TOK_MINUSEQ;
                ch = lexChar(lex);
            }
            else if (ch == '-')
            {
                lex->tok.kind = TOK_MINUSMINUS;
                ch = lexChar(lex);
            }
            else
                lex->tok.kind = TOK_MINUS;
            break;
        }

        case '*':
        {
            ch = lexChar(lex);
            if (ch == '=')
            {
                lex->tok.kind = TOK_MULEQ;
                ch = lexChar(lex);
            }
            else
                lex->tok.kind = TOK_MUL;
            break;
        }

        case '/':
        {
            ch = lexChar(lex);
            if (ch == '=')
            {
                lex->tok.kind = TOK_DIVEQ;
                ch = lexChar(lex);
            }
            else
                lex->tok.kind = TOK_DIV;
            break;
        }

        case '%':
        {
            ch = lexChar(lex);
            if (ch == '=')
            {
                lex->tok.kind = TOK_MODEQ;
                ch = lexChar(lex);
            }
            else
                lex->tok.kind = TOK_MOD;
            break;
        }

        case '&':
        {
            ch = lexChar(lex);
            if (ch == '=')
            {
                lex->tok.kind = TOK_ANDEQ;
                ch = lexChar(lex);
            }
            else if (ch == '&')
            {
                lex->tok.kind = TOK_ANDAND;
                ch = lexChar(lex);
            }
            else
                lex->tok.kind = TOK_AND;
            break;
        }

        case '|':
        {
            ch = lexChar(lex);
            if (ch == '=')
            {
                lex->tok.kind = TOK_OREQ;
                ch = lexChar(lex);
            }
            else if (ch == '|')
            {
                lex->tok.kind = TOK_OROR;
                ch = lexChar(lex);
            }
            else
                lex->tok.kind = TOK_OR;
            break;
        }

        case '~':
        {
            ch = lexChar(lex);
            if (ch == '=')
            {
                lex->tok.kind = TOK_XOREQ;
                ch = lexChar(lex);
            }
            else
                lex->tok.kind = TOK_XOR;
            break;
        }

        case '<':
        {
            ch = lexChar(lex);
            if (ch == '<')
            {
                ch = lexChar(lex);
                if (ch == '=')
                {
                    lex->tok.kind = TOK_SHLEQ;
                    ch = lexChar(lex);
                }
                else
                    lex->tok.kind = TOK_SHL;
            }
            else if (ch == '=')
            {
                lex->tok.kind = TOK_LESSEQ;
                ch = lexChar(lex);
            }
            else
                lex->tok.kind = TOK_LESS;
            break;
        }

        case '>':
        {
            ch = lexChar(lex);
            if (ch == '>')
            {
                ch = lexChar(lex);
                if (ch == '=')
                {
                    lex->tok.kind = TOK_SHREQ;
                    ch = lexChar(lex);
                }
                else
                    lex->tok.kind = TOK_SHR;
            }
            else if (ch == '=')
            {
                lex->tok.kind = TOK_GREATEREQ;
                ch = lexChar(lex);
            }
            else
                lex->tok.kind = TOK_GREATER;
            break;
        }

        case '=':
        {
            ch = lexChar(lex);
            if (ch == '=')
            {
                lex->tok.kind = TOK_EQEQ;
                ch = lexChar(lex);
            }
            else
                lex->tok.kind = TOK_EQ;
            break;
        }

        case '?':
        {
            lex->tok.kind = TOK_QUESTION;
            ch = lexChar(lex);
            break;
        }

        case '!':
        {
            ch = lexChar(lex);
            if (ch == '=')
            {
                lex->tok.kind = TOK_NOTEQ;
                ch = lexChar(lex);
            }
            else
                lex->tok.kind = TOK_NOT;
            break;
        }

        case '(':
        {
            lex->tok.kind = TOK_LPAR;
            ch = lexChar(lex);
            break;
        }

        case ')':
        {
            lex->tok.kind = TOK_RPAR;
            ch = lexChar(lex);
            break;
        }

        case '[':
        {
            lex->tok.kind = TOK_LBRACKET;
            ch = lexChar(lex);
            break;
        }

        case ']':
        {
            lex->tok.kind = TOK_RBRACKET;
            ch = lexChar(lex);
            break;
        }

        case '{':
        {
            lex->tok.kind = TOK_LBRACE;
            ch = lexChar(lex);
            break;
        }

        case '}':
        {
            lex->tok.kind = TOK_RBRACE;
            ch = lexChar(lex);
            break;
        }

        case '^':
        {
            lex->tok.kind = TOK_CARET;
            ch = lexChar(lex);
            break;
        }

        case ',':
        {
            lex->tok.kind = TOK_COMMA;
            ch = lexChar(lex);
            break;
        }

        case ';':
        {
            lex->tok.kind = TOK_SEMICOLON;
            ch = lexChar(lex);
            break;
        }

        case ':':
        {
            ch = lexChar(lex);
            if (ch == '=')
            {
                lex->tok.kind = TOK_COLONEQ;
                ch = lexChar(lex);
            }
            else if (ch == ':')
            {
                lex->tok.kind = TOK_COLONCOLON;
                ch = lexChar(lex);
            }
            else
                lex->tok.kind = TOK_COLON;
            break;
        }

        case '.':
        {
            ch = lexChar(lex);
            if (ch == '.')
            {
                lex->tok.kind = TOK_ELLIPSIS;
                ch = lexChar(lex);
            }
            else
                lex->tok.kind = TOK_PERIOD;
            break;
        }

        case '\n':
        {
            lex->tok.kind = TOK_EOLN;
            ch = lexChar(lex);
            break;
        }
    } // switch
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movl $0x0, 0x28(%rax)
movq -0x8(%rbp), %rcx
movq 0x10(%rcx), %rax
movslq 0x18(%rcx), %rcx
movb (%rax,%rcx), %al
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
addl $-0xa, %eax
movl %eax, %ecx
movq %rcx, -0x18(%rbp)
subl $0x74, %eax
ja 0x1bfe0
movq -0x18(%rbp), %rax
leaq 0x1bd93a(%rip), %rcx    # 0x1d9344
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x3d, %eax
jne 0x1ba41
movq -0x8(%rbp), %rax
movl $0x20, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1ba70
movsbl -0x9(%rbp), %eax
cmpl $0x2b, %eax
jne 0x1ba63
movq -0x8(%rbp), %rax
movl $0x2c, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1ba6e
movq -0x8(%rbp), %rax
movl $0x16, 0x28(%rax)
jmp 0x1ba70
jmp 0x1bfe0
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x3d, %eax
jne 0x1baa3
movq -0x8(%rbp), %rax
movl $0x21, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bad2
movsbl -0x9(%rbp), %eax
cmpl $0x2d, %eax
jne 0x1bac5
movq -0x8(%rbp), %rax
movl $0x2d, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bad0
movq -0x8(%rbp), %rax
movl $0x17, 0x28(%rax)
jmp 0x1bad2
jmp 0x1bfe0
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x3d, %eax
jne 0x1bb05
movq -0x8(%rbp), %rax
movl $0x22, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bb10
movq -0x8(%rbp), %rax
movl $0x18, 0x28(%rax)
jmp 0x1bfe0
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x3d, %eax
jne 0x1bb43
movq -0x8(%rbp), %rax
movl $0x23, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bb4e
movq -0x8(%rbp), %rax
movl $0x19, 0x28(%rax)
jmp 0x1bfe0
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x3d, %eax
jne 0x1bb81
movq -0x8(%rbp), %rax
movl $0x24, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bb8c
movq -0x8(%rbp), %rax
movl $0x1a, 0x28(%rax)
jmp 0x1bfe0
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x3d, %eax
jne 0x1bbbf
movq -0x8(%rbp), %rax
movl $0x25, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bbee
movsbl -0x9(%rbp), %eax
cmpl $0x26, %eax
jne 0x1bbe1
movq -0x8(%rbp), %rax
movl $0x2a, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bbec
movq -0x8(%rbp), %rax
movl $0x1b, 0x28(%rax)
jmp 0x1bbee
jmp 0x1bfe0
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x3d, %eax
jne 0x1bc21
movq -0x8(%rbp), %rax
movl $0x26, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bc50
movsbl -0x9(%rbp), %eax
cmpl $0x7c, %eax
jne 0x1bc43
movq -0x8(%rbp), %rax
movl $0x2b, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bc4e
movq -0x8(%rbp), %rax
movl $0x1c, 0x28(%rax)
jmp 0x1bc50
jmp 0x1bfe0
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x3d, %eax
jne 0x1bc83
movq -0x8(%rbp), %rax
movl $0x27, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bc8e
movq -0x8(%rbp), %rax
movl $0x1d, 0x28(%rax)
jmp 0x1bfe0
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x3c, %eax
jne 0x1bce3
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x3d, %eax
jne 0x1bcd6
movq -0x8(%rbp), %rax
movl $0x28, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bce1
movq -0x8(%rbp), %rax
movl $0x1e, 0x28(%rax)
jmp 0x1bd12
movsbl -0x9(%rbp), %eax
cmpl $0x3d, %eax
jne 0x1bd05
movq -0x8(%rbp), %rax
movl $0x35, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bd10
movq -0x8(%rbp), %rax
movl $0x2f, 0x28(%rax)
jmp 0x1bd12
jmp 0x1bfe0
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x3e, %eax
jne 0x1bd67
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x3d, %eax
jne 0x1bd5a
movq -0x8(%rbp), %rax
movl $0x29, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bd65
movq -0x8(%rbp), %rax
movl $0x1f, 0x28(%rax)
jmp 0x1bd96
movsbl -0x9(%rbp), %eax
cmpl $0x3d, %eax
jne 0x1bd89
movq -0x8(%rbp), %rax
movl $0x36, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bd94
movq -0x8(%rbp), %rax
movl $0x30, 0x28(%rax)
jmp 0x1bd96
jmp 0x1bfe0
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x3d, %eax
jne 0x1bdc9
movq -0x8(%rbp), %rax
movl $0x2e, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bdd4
movq -0x8(%rbp), %rax
movl $0x31, 0x28(%rax)
jmp 0x1bfe0
movq -0x8(%rbp), %rax
movl $0x32, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bfe0
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x3d, %eax
jne 0x1be23
movq -0x8(%rbp), %rax
movl $0x34, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1be2e
movq -0x8(%rbp), %rax
movl $0x33, 0x28(%rax)
jmp 0x1bfe0
movq -0x8(%rbp), %rax
movl $0x38, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bfe0
movq -0x8(%rbp), %rax
movl $0x39, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bfe0
movq -0x8(%rbp), %rax
movl $0x3a, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bfe0
movq -0x8(%rbp), %rax
movl $0x3b, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bfe0
movq -0x8(%rbp), %rax
movl $0x3c, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bfe0
movq -0x8(%rbp), %rax
movl $0x3d, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bfe0
movq -0x8(%rbp), %rax
movl $0x3e, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bfe0
movq -0x8(%rbp), %rax
movl $0x3f, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bfe0
movq -0x8(%rbp), %rax
movl $0x40, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bfe0
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x3d, %eax
jne 0x1bf5d
movq -0x8(%rbp), %rax
movl $0x37, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bf8c
movsbl -0x9(%rbp), %eax
cmpl $0x3a, %eax
jne 0x1bf7f
movq -0x8(%rbp), %rax
movl $0x42, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bf8a
movq -0x8(%rbp), %rax
movl $0x41, 0x28(%rax)
jmp 0x1bf8c
jmp 0x1bfe0
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0x2e, %eax
jne 0x1bfbc
movq -0x8(%rbp), %rax
movl $0x44, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
jmp 0x1bfc7
movq -0x8(%rbp), %rax
movl $0x43, 0x28(%rax)
jmp 0x1bfe0
movq -0x8(%rbp), %rax
movl $0x4b, 0x28(%rax)
movq -0x8(%rbp), %rdi
callq 0x1bff0
movb %al, -0x9(%rbp)
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)