// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::lexer::helper::operator_joiner::join(exprtk::lexer::token const&, exprtk::lexer::token const&, exprtk::lexer::token&)
inline bool join(const lexer::token& t0, const lexer::token& t1, lexer::token& t) exprtk_override
            {
               // ': =' --> ':='
               if ((t0.type == lexer::token::e_colon) && (t1.type == lexer::token::e_eq))
               {
                  t.type     = lexer::token::e_assign;
                  t.value    = ":=";
                  t.position = t0.position;

                  return true;
               }
               // '+ =' --> '+='
               else if ((t0.type == lexer::token::e_add) && (t1.type == lexer::token::e_eq))
               {
                  t.type     = lexer::token::e_addass;
                  t.value    = "+=";
                  t.position = t0.position;

                  return true;
               }
               // '- =' --> '-='
               else if ((t0.type == lexer::token::e_sub) && (t1.type == lexer::token::e_eq))
               {
                  t.type     = lexer::token::e_subass;
                  t.value    = "-=";
                  t.position = t0.position;

                  return true;
               }
               // '* =' --> '*='
               else if ((t0.type == lexer::token::e_mul) && (t1.type == lexer::token::e_eq))
               {
                  t.type     = lexer::token::e_mulass;
                  t.value    = "*=";
                  t.position = t0.position;

                  return true;
               }
               // '/ =' --> '/='
               else if ((t0.type == lexer::token::e_div) && (t1.type == lexer::token::e_eq))
               {
                  t.type     = lexer::token::e_divass;
                  t.value    = "/=";
                  t.position = t0.position;

                  return true;
               }
               // '% =' --> '%='
               else if ((t0.type == lexer::token::e_mod) && (t1.type == lexer::token::e_eq))
               {
                  t.type     = lexer::token::e_modass;
                  t.value    = "%=";
                  t.position = t0.position;

                  return true;
               }
               // '> =' --> '>='
               else if ((t0.type == lexer::token::e_gt) && (t1.type == lexer::token::e_eq))
               {
                  t.type     = lexer::token::e_gte;
                  t.value    = ">=";
                  t.position = t0.position;

                  return true;
               }
               // '< =' --> '<='
               else if ((t0.type == lexer::token::e_lt) && (t1.type == lexer::token::e_eq))
               {
                  t.type     = lexer::token::e_lte;
                  t.value    = "<=";
                  t.position = t0.position;

                  return true;
               }
               // '= =' --> '=='
               else if ((t0.type == lexer::token::e_eq) && (t1.type == lexer::token::e_eq))
               {
                  t.type     = lexer::token::e_eq;
                  t.value    = "==";
                  t.position = t0.position;

                  return true;
               }
               // '! =' --> '!='
               else if ((static_cast<details::char_t>(t0.type) == '!') && (t1.type == lexer::token::e_eq))
               {
                  t.type     = lexer::token::e_ne;
                  t.value    = "!=";
                  t.position = t0.position;

                  return true;
               }
               // '< >' --> '<>'
               else if ((t0.type == lexer::token::e_lt) && (t1.type == lexer::token::e_gt))
               {
                  t.type     = lexer::token::e_ne;
                  t.value    = "<>";
                  t.position = t0.position;

                  return true;
               }
               // '<= >' --> '<=>'
               else if ((t0.type == lexer::token::e_lte) && (t1.type == lexer::token::e_gt))
               {
                  t.type     = lexer::token::e_swap;
                  t.value    = "<=>";
                  t.position = t0.position;

                  return true;
               }
               // '+ -' --> '-'
               else if ((t0.type == lexer::token::e_add) && (t1.type == lexer::token::e_sub))
               {
                  t.type     = lexer::token::e_sub;
                  t.value    = "-";
                  t.position = t0.position;

                  return true;
               }
               // '- +' --> '-'
               else if ((t0.type == lexer::token::e_sub) && (t1.type == lexer::token::e_add))
               {
                  t.type     = lexer::token::e_sub;
                  t.value    = "-";
                  t.position = t0.position;

                  return true;
               }
               // '- -' --> '+'
               else if ((t0.type == lexer::token::e_sub) && (t1.type == lexer::token::e_sub))
               {
                  /*
                     Note: May need to reconsider this when wanting to implement
                     pre/postfix decrement operator
                  */
                  t.type     = lexer::token::e_add;
                  t.value    = "+";
                  t.position = t0.position;

                  return true;
               }
               else
                  return false;
            }

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x18(%rsp)
movq %rsi, 0x10(%rsp)
movq %rdx, 0x8(%rsp)
movq %rcx, (%rsp)
movq 0x10(%rsp), %rax
cmpl $0x3a, (%rax)
jne 0x256924
movq 0x8(%rsp), %rax
cmpl $0x3d, (%rax)
jne 0x256924
movq (%rsp), %rax
movl $0xa, (%rax)
movq (%rsp), %rdi
addq $0x8, %rdi
leaq 0x349d79(%rip), %rsi    # 0x5a067d
callq 0x11b340
movq 0x10(%rsp), %rax
movq 0x28(%rax), %rcx
movq (%rsp), %rax
movq %rcx, 0x28(%rax)
movb $0x1, 0x27(%rsp)
jmp 0x256d5e
movq 0x10(%rsp), %rax
cmpl $0x2b, (%rax)
jne 0x256971
movq 0x8(%rsp), %rax
cmpl $0x3d, (%rax)
jne 0x256971
movq (%rsp), %rax
movl $0xb, (%rax)
movq (%rsp), %rdi
addq $0x8, %rdi
leaq 0x349d2f(%rip), %rsi    # 0x5a0680
callq 0x11b340
movq 0x10(%rsp), %rax
movq 0x28(%rax), %rcx
movq (%rsp), %rax
movq %rcx, 0x28(%rax)
movb $0x1, 0x27(%rsp)
jmp 0x256d5e
movq 0x10(%rsp), %rax
cmpl $0x2d, (%rax)
jne 0x2569be
movq 0x8(%rsp), %rax
cmpl $0x3d, (%rax)
jne 0x2569be
movq (%rsp), %rax
movl $0xc, (%rax)
movq (%rsp), %rdi
addq $0x8, %rdi
leaq 0x349ce5(%rip), %rsi    # 0x5a0683
callq 0x11b340
movq 0x10(%rsp), %rax
movq 0x28(%rax), %rcx
movq (%rsp), %rax
movq %rcx, 0x28(%rax)
movb $0x1, 0x27(%rsp)
jmp 0x256d5e
movq 0x10(%rsp), %rax
cmpl $0x2a, (%rax)
jne 0x256a0b
movq 0x8(%rsp), %rax
cmpl $0x3d, (%rax)
jne 0x256a0b
movq (%rsp), %rax
movl $0xd, (%rax)
movq (%rsp), %rdi
addq $0x8, %rdi
leaq 0x349c9b(%rip), %rsi    # 0x5a0686
callq 0x11b340
movq 0x10(%rsp), %rax
movq 0x28(%rax), %rcx
movq (%rsp), %rax
movq %rcx, 0x28(%rax)
movb $0x1, 0x27(%rsp)
jmp 0x256d5e
movq 0x10(%rsp), %rax
cmpl $0x2f, (%rax)
jne 0x256a58
movq 0x8(%rsp), %rax
cmpl $0x3d, (%rax)
jne 0x256a58
movq (%rsp), %rax
movl $0xe, (%rax)
movq (%rsp), %rdi
addq $0x8, %rdi
leaq 0x349c51(%rip), %rsi    # 0x5a0689
callq 0x11b340
movq 0x10(%rsp), %rax
movq 0x28(%rax), %rcx
movq (%rsp), %rax
movq %rcx, 0x28(%rax)
movb $0x1, 0x27(%rsp)
jmp 0x256d5e
movq 0x10(%rsp), %rax
cmpl $0x25, (%rax)
jne 0x256aa5
movq 0x8(%rsp), %rax
cmpl $0x3d, (%rax)
jne 0x256aa5
movq (%rsp), %rax
movl $0xf, (%rax)
movq (%rsp), %rdi
addq $0x8, %rdi
leaq 0x349c07(%rip), %rsi    # 0x5a068c
callq 0x11b340
movq 0x10(%rsp), %rax
movq 0x28(%rax), %rcx
movq (%rsp), %rax
movq %rcx, 0x28(%rax)
movb $0x1, 0x27(%rsp)
jmp 0x256d5e
movq 0x10(%rsp), %rax
cmpl $0x3e, (%rax)
jne 0x256af2
movq 0x8(%rsp), %rax
cmpl $0x3d, (%rax)
jne 0x256af2
movq (%rsp), %rax
movl $0x14, (%rax)
movq (%rsp), %rdi
addq $0x8, %rdi
leaq 0x349bc6(%rip), %rsi    # 0x5a0698
callq 0x11b340
movq 0x10(%rsp), %rax
movq 0x28(%rax), %rcx
movq (%rsp), %rax
movq %rcx, 0x28(%rax)
movb $0x1, 0x27(%rsp)
jmp 0x256d5e
movq 0x10(%rsp), %rax
cmpl $0x3c, (%rax)
jne 0x256b3f
movq 0x8(%rsp), %rax
cmpl $0x3d, (%rax)
jne 0x256b3f
movq (%rsp), %rax
movl $0x12, (%rax)
movq (%rsp), %rdi
addq $0x8, %rdi
leaq 0x349b70(%rip), %rsi    # 0x5a068f
callq 0x11b340
movq 0x10(%rsp), %rax
movq 0x28(%rax), %rcx
movq (%rsp), %rax
movq %rcx, 0x28(%rax)
movb $0x1, 0x27(%rsp)
jmp 0x256d5e
movq 0x10(%rsp), %rax
cmpl $0x3d, (%rax)
jne 0x256b8c
movq 0x8(%rsp), %rax
cmpl $0x3d, (%rax)
jne 0x256b8c
movq (%rsp), %rax
movl $0x3d, (%rax)
movq (%rsp), %rdi
addq $0x8, %rdi
leaq 0x35ed05(%rip), %rsi    # 0x5b5871
callq 0x11b340
movq 0x10(%rsp), %rax
movq 0x28(%rax), %rcx
movq (%rsp), %rax
movq %rcx, 0x28(%rax)
movb $0x1, 0x27(%rsp)
jmp 0x256d5e
movq 0x10(%rsp), %rax
movl (%rax), %eax
movsbl %al, %eax
cmpl $0x21, %eax
jne 0x256bde
movq 0x8(%rsp), %rax
cmpl $0x3d, (%rax)
jne 0x256bde
movq (%rsp), %rax
movl $0x13, (%rax)
movq (%rsp), %rdi
addq $0x8, %rdi
leaq 0x349ad4(%rip), %rsi    # 0x5a0692
callq 0x11b340
movq 0x10(%rsp), %rax
movq 0x28(%rax), %rcx
movq (%rsp), %rax
movq %rcx, 0x28(%rax)
movb $0x1, 0x27(%rsp)
jmp 0x256d5e
movq 0x10(%rsp), %rax
cmpl $0x3c, (%rax)
jne 0x256c2b
movq 0x8(%rsp), %rax
cmpl $0x3e, (%rax)
jne 0x256c2b
movq (%rsp), %rax
movl $0x13, (%rax)
movq (%rsp), %rdi
addq $0x8, %rdi
leaq 0x349a8a(%rip), %rsi    # 0x5a0695
callq 0x11b340
movq 0x10(%rsp), %rax
movq 0x28(%rax), %rcx
movq (%rsp), %rax
movq %rcx, 0x28(%rax)
movb $0x1, 0x27(%rsp)
jmp 0x256d5e
movq 0x10(%rsp), %rax
cmpl $0x12, (%rax)
jne 0x256c78
movq 0x8(%rsp), %rax
cmpl $0x3e, (%rax)
jne 0x256c78
movq (%rsp), %rax
movl $0x15, (%rax)
movq (%rsp), %rdi
addq $0x8, %rdi
leaq 0x34fcac(%rip), %rsi    # 0x5a6904
callq 0x11b340
movq 0x10(%rsp), %rax
movq 0x28(%rax), %rcx
movq (%rsp), %rax
movq %rcx, 0x28(%rax)
movb $0x1, 0x27(%rsp)
jmp 0x256d5e
movq 0x10(%rsp), %rax
cmpl $0x2b, (%rax)
jne 0x256cc5
movq 0x8(%rsp), %rax
cmpl $0x2d, (%rax)
jne 0x256cc5
movq (%rsp), %rax
movl $0x2d, (%rax)
movq (%rsp), %rdi
addq $0x8, %rdi
leaq 0x3499d2(%rip), %rsi    # 0x5a0677
callq 0x11b340
movq 0x10(%rsp), %rax
movq 0x28(%rax), %rcx
movq (%rsp), %rax
movq %rcx, 0x28(%rax)
movb $0x1, 0x27(%rsp)
jmp 0x256d5e
movq 0x10(%rsp), %rax
cmpl $0x2d, (%rax)
jne 0x256d0f
movq 0x8(%rsp), %rax
cmpl $0x2b, (%rax)
jne 0x256d0f
movq (%rsp), %rax
movl $0x2d, (%rax)
movq (%rsp), %rdi
addq $0x8, %rdi
leaq 0x349985(%rip), %rsi    # 0x5a0677
callq 0x11b340
movq 0x10(%rsp), %rax
movq 0x28(%rax), %rcx
movq (%rsp), %rax
movq %rcx, 0x28(%rax)
movb $0x1, 0x27(%rsp)
jmp 0x256d5e
movq 0x10(%rsp), %rax
cmpl $0x2d, (%rax)
jne 0x256d59
movq 0x8(%rsp), %rax
cmpl $0x2d, (%rax)
jne 0x256d59
movq (%rsp), %rax
movl $0x2b, (%rax)
movq (%rsp), %rdi
addq $0x8, %rdi
leaq 0x35eb2a(%rip), %rsi    # 0x5b5866
callq 0x11b340
movq 0x10(%rsp), %rax
movq 0x28(%rax), %rcx
movq (%rsp), %rax
movq %rcx, 0x28(%rax)
movb $0x1, 0x27(%rsp)
jmp 0x256d5e
movb $0x0, 0x27(%rsp)
movb 0x27(%rsp), %al
andb $0x1, %al
addq $0x28, %rsp
retq
nopl (%rax)