// File: /workspace/github_cpp_makefile_star2_O1/rfotino[P]consolite-compiler/src/syntax.cpp
// Function: ExprToken::_validate()
bool ExprToken::_validate() {
  std::stack<std::string> operands;
  for (auto token : _postfix) {
    auto op = std::dynamic_pointer_cast<OperatorToken>(token);
    if (std::dynamic_pointer_cast<LiteralToken>(token) ||
        std::dynamic_pointer_cast<FunctionCallToken>(token)) {
      operands.push("rvalue");
    } else if (std::dynamic_pointer_cast<GlobalVarToken>(token) ||
               std::dynamic_pointer_cast<ParamToken>(token) ||
               std::dynamic_pointer_cast<LocalVarToken>(token)) {
      operands.push("lvalue");
    } else if (nullptr != op) {
      std::string rhs = operands.top();
      operands.pop();
      std::string lhs;
      if (op->isBinary()) {
        lhs = operands.top();
        operands.pop();
      }
      std::string result;
      if ("=" == op->str()) {
        if ("rvalue" == lhs) {
          _error("Can't assign to an rvalue in expression.", op->line());
          return false;
        }
        result = "rvalue";
      } else if ("*" == op->str() && op->isUnary()) {
        result = "lvalue";
      } else if ("&" == op->str() && op->isUnary()) {
        if ("lvalue" != rhs) {
          _error("Can't get address of an rvalue in expression.",
                 op->line());
          return false;
        }
        result = "rvalue";
      } else if ("[" == op->str()) {
        result = "lvalue";
      } else {
        result = "rvalue";
      }
      operands.push(result);
    }
  }
  return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x118, %rsp            # imm = 0x118
movq %rdi, %rbx
xorps %xmm0, %xmm0
leaq 0xc0(%rsp), %rdi
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
xorl %esi, %esi
callq 0xbc88
movq 0x10(%rbx), %r12
movq 0x18(%rbx), %rax
movq %rax, 0xb8(%rsp)
cmpq %rax, %r12
sete %bl
je 0x14a56
movb %bl, 0xf(%rsp)
movq (%r12), %r13
movq 0x8(%r12), %r14
testq %r14, %r14
je 0x14362
movq 0x33c46(%rip), %rax     # 0x47f98
cmpb $0x0, (%rax)
je 0x1435d
incl 0x8(%r14)
jmp 0x14362
lock
incl 0x8(%r14)
testq %r13, %r13
je 0x14384
movq %r13, %rdi
leaq 0x32977(%rip), %rsi     # 0x46ce8
leaq 0x33078(%rip), %rdx     # 0x473f0
xorl %ecx, %ecx
callq 0x7330
movq %rax, %rsi
jmp 0x14386
xorl %esi, %esi
testq %r14, %r14
sete %al
testq %rsi, %rsi
sete %cl
movq %r14, %rdx
cmoveq %rsi, %rdx
orb %al, %cl
jne 0x143b7
movq 0x33bf4(%rip), %rax     # 0x47f98
cmpb $0x0, (%rax)
je 0x143af
incl 0x8(%r14)
jmp 0x143b4
lock
incl 0x8(%r14)
movq %r14, %rdx
movq %rsi, 0x50(%rsp)
testq %r13, %r13
movq %rdx, 0xb0(%rsp)
je 0x143e6
movq %r13, %rdi
leaq 0x32915(%rip), %rsi     # 0x46ce8
leaq 0x32fe6(%rip), %rdx     # 0x473c0
xorl %ecx, %ecx
callq 0x7330
movq %rax, %rbx
jmp 0x143e8
xorl %ebx, %ebx
testq %r14, %r14
sete %al
testq %rbx, %rbx
sete %cl
movq %r14, %rbp
cmoveq %rbx, %rbp
orb %al, %cl
jne 0x14419
movq 0x33b92(%rip), %rax     # 0x47f98
cmpb $0x0, (%rax)
je 0x14411
incl 0x8(%r14)
jmp 0x14416
lock
incl 0x8(%r14)
movq %r14, %rbp
movb $0x1, %r15b
testq %rbx, %rbx
jne 0x14481
testq %r13, %r13
je 0x14440
movq %r13, %rdi
leaq 0x328b8(%rip), %rsi     # 0x46ce8
leaq 0x32fe9(%rip), %rdx     # 0x47420
xorl %ecx, %ecx
callq 0x7330
jmp 0x14442
xorl %eax, %eax
testq %r14, %r14
sete %cl
testq %rax, %rax
sete %dl
movq %r14, %rsi
cmoveq %rax, %rsi
movq %rsi, 0x68(%rsp)
orb %cl, %dl
jne 0x1447a
movq 0x33b33(%rip), %rcx     # 0x47f98
cmpb $0x0, (%rcx)
je 0x14470
incl 0x8(%r14)
jmp 0x14475
lock
incl 0x8(%r14)
movq %r14, 0x68(%rsp)
testq %rax, %rax
setne %r15b
testq %rbx, %rbx
jne 0x14498
cmpq $0x0, 0x68(%rsp)
je 0x14498
movq 0x68(%rsp), %rdi
callq 0x81ea
testq %rbp, %rbp
je 0x144a5
movq %rbp, %rdi
callq 0x81ea
testb %r15b, %r15b
je 0x144ec
leaq 0x40(%rsp), %rax
movq %rax, 0x30(%rsp)
leaq 0x30(%rsp), %rbx
movq %rbx, %rdi
leaq 0x22460(%rip), %rsi     # 0x36923
leaq 0x2245f(%rip), %rdx     # 0x36929
movq 0xb0(%rsp), %r15
callq 0xc0a4
leaq 0xc0(%rsp), %rdi
movq %rbx, %rsi
callq 0x300a0
jmp 0x14a0b
testq %r13, %r13
je 0x1450e
movq %r13, %rdi
leaq 0x327ed(%rip), %rsi     # 0x46ce8
leaq 0x32946(%rip), %rdx     # 0x46e48
xorl %ecx, %ecx
callq 0x7330
movq %rax, %rbp
jmp 0x14510
xorl %ebp, %ebp
testq %r14, %r14
sete %al
testq %rbp, %rbp
sete %cl
movq %r14, %rbx
cmoveq %rbp, %rbx
orb %al, %cl
jne 0x14541
movq 0x33a6a(%rip), %rax     # 0x47f98
cmpb $0x0, (%rax)
je 0x14539
incl 0x8(%r14)
jmp 0x1453e
lock
incl 0x8(%r14)
movq %r14, %rbx
movb $0x1, %cl
testq %rbp, %rbp
jne 0x145d7
testq %r13, %r13
je 0x14571
movq %r13, %rdi
leaq 0x3278d(%rip), %rsi     # 0x46ce8
leaq 0x32836(%rip), %rdx     # 0x46d98
xorl %ecx, %ecx
callq 0x7330
testq %rax, %rax
sete %al
jmp 0x14573
movb $0x1, %al
testq %r14, %r14
sete %cl
orb %al, %cl
testb %al, %al
movl $0x0, %edx
cmoveq %r14, %rdx
movq %rdx, 0x60(%rsp)
testb %cl, %cl
jne 0x145ab
movq 0x33a02(%rip), %rcx     # 0x47f98
cmpb $0x0, (%rcx)
je 0x145a1
incl 0x8(%r14)
jmp 0x145a6
lock
incl 0x8(%r14)
movq %r14, 0x60(%rsp)
movb $0x1, %cl
testb %al, %al
je 0x145d7
testq %r13, %r13
je 0x14890
movq %r13, %rdi
leaq 0x32724(%rip), %rsi     # 0x46ce8
leaq 0x32d05(%rip), %rdx     # 0x472d0
xorl %ecx, %ecx
callq 0x7330
jmp 0x14892
movb $0x1, %r13b
testb %cl, %cl
jne 0x145f0
cmpq $0x0, 0x58(%rsp)
je 0x145f0
movq 0x58(%rsp), %rdi
callq 0x81ea
testq %rbp, %rbp
jne 0x14607
cmpq $0x0, 0x60(%rsp)
je 0x14607
movq 0x60(%rsp), %rdi
callq 0x81ea
testq %rbx, %rbx
movq 0xb0(%rsp), %r15
leaq 0x2230a(%rip), %rbp     # 0x36923
je 0x14623
movq %rbx, %rdi
callq 0x81ea
testb %r13b, %r13b
je 0x14662
leaq 0x40(%rsp), %rax
movq %rax, 0x30(%rsp)
leaq 0x30(%rsp), %rbx
movq %rbx, %rdi
leaq 0x222e9(%rip), %rsi     # 0x3692a
leaq 0x222e8(%rip), %rdx     # 0x36930
callq 0xc0a4
leaq 0xc0(%rsp), %rdi
movq %rbx, %rsi
callq 0x300a0
jmp 0x14a0b
movq 0x50(%rsp), %rbx
testq %rbx, %rbx
je 0x14a27
movq 0xf0(%rsp), %rax
cmpq 0xf8(%rsp), %rax
jne 0x14696
movq 0x108(%rsp), %rax
movq -0x8(%rax), %rax
movl $0x200, %ecx            # imm = 0x200
addq %rcx, %rax
leaq 0x40(%rsp), %rcx
movq %rcx, 0x30(%rsp)
movq -0x20(%rax), %rsi
movq -0x18(%rax), %rdx
addq %rsi, %rdx
leaq 0x30(%rsp), %rdi
callq 0xc014
leaq 0xc0(%rsp), %rdi
callq 0x30864
leaq 0xa0(%rsp), %rax
movq %rax, 0x90(%rsp)
movq $0x0, 0x98(%rsp)
movb $0x0, 0xa0(%rsp)
cmpb $0x1, 0x30(%rbx)
jne 0x14730
movq 0xf0(%rsp), %rsi
cmpq 0xf8(%rsp), %rsi
jne 0x14712
movq 0x108(%rsp), %rax
movq -0x8(%rax), %rsi
movl $0x200, %eax            # imm = 0x200
addq %rax, %rsi
addq $-0x20, %rsi
leaq 0x90(%rsp), %rdi
callq 0x71a0
leaq 0xc0(%rsp), %rdi
callq 0x30864
leaq 0x80(%rsp), %rax
movq %rax, 0x70(%rsp)
movq $0x0, 0x78(%rsp)
movb $0x0, 0x80(%rsp)
leaq 0x20(%rsp), %r13
movq %r13, 0x10(%rsp)
movq 0x10(%rbx), %rsi
movq 0x18(%rbx), %rdx
addq %rsi, %rdx
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
callq 0xc014
movq %rbx, %rdi
leaq 0x21e78(%rip), %rsi     # 0x365f2
callq 0x70c0
movl %eax, %ebx
movq 0x10(%rsp), %rdi
cmpq %r13, %rdi
je 0x14798
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x72c0
testl %ebx, %ebx
je 0x147f4
leaq 0x20(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x50(%rsp), %rbx
movq 0x10(%rbx), %rsi
movq 0x18(%rbx), %rdx
addq %rsi, %rdx
leaq 0x10(%rsp), %r13
movq %r13, %rdi
callq 0xc014
movq %r13, %rdi
leaq 0x21e09(%rip), %rsi     # 0x365d6
callq 0x70c0
testl %eax, %eax
je 0x14816
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x14842
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x72c0
jmp 0x14842
leaq 0x90(%rsp), %rdi
movq %rbp, %rsi
callq 0x70c0
testl %eax, %eax
movq 0x50(%rsp), %rbx
jne 0x14997
jmp 0x14a7a
movb 0x30(%rbx), %bl
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x14835
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x72c0
testb %bl, %bl
movq 0x50(%rsp), %rbx
je 0x14958
leaq 0x20(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rbx), %rsi
movq 0x18(%rbx), %rdx
addq %rsi, %rdx
movq %r13, %rdi
callq 0xc014
movq %r13, %rdi
leaq 0x21d7d(%rip), %rsi     # 0x365e6
callq 0x70c0
testl %eax, %eax
je 0x148cb
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x148f7
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x72c0
jmp 0x148f7
xorl %eax, %eax
testq %r14, %r14
sete %cl
testq %rax, %rax
sete %dl
movq %r14, %rsi
cmoveq %rax, %rsi
movq %rsi, 0x58(%rsp)
orb %cl, %dl
jne 0x14970
movq 0x336df(%rip), %rcx     # 0x47f98
cmpb $0x0, (%rcx)
je 0x14966
incl 0x8(%r14)
jmp 0x1496b
movb 0x30(%rbx), %bl
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x148ea
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x72c0
testb %bl, %bl
movq 0x50(%rsp), %rbx
je 0x1497e
leaq 0x20(%rsp), %r13
movq %r13, 0x10(%rsp)
movq 0x10(%rbx), %rsi
movq 0x18(%rbx), %rdx
addq %rsi, %rdx
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
callq 0xc014
movq %rbx, %rdi
leaq 0x21cd1(%rip), %rsi     # 0x365f4
callq 0x70c0
movl %eax, %ebx
movq 0x10(%rsp), %rdi
cmpq %r13, %rdi
je 0x14941
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x72c0
testl %ebx, %ebx
movq 0x78(%rsp), %rdx
movq %rbp, %rcx
leaq 0x21fd8(%rip), %rax     # 0x3692a
cmoveq %rax, %rcx
jmp 0x1499f
movq 0x78(%rsp), %rdx
leaq 0x21fc6(%rip), %rcx     # 0x3692a
jmp 0x1499f
lock
incl 0x8(%r14)
movq %r14, 0x58(%rsp)
testq %rax, %rax
setne %r13b
xorl %ecx, %ecx
jmp 0x145da
leaq 0x30(%rsp), %rdi
leaq 0x21fa0(%rip), %rsi     # 0x3692a
callq 0x70c0
testl %eax, %eax
jne 0x14aa9
movq 0x78(%rsp), %rdx
movq %rbp, %rcx
movl $0x6, %r8d
leaq 0x70(%rsp), %rbx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x7450
leaq 0xc0(%rsp), %rdi
movq %rbx, %rsi
callq 0x309f4
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x149e6
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x72c0
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0x14a0b
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x72c0
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x14a27
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x72c0
testq %r15, %r15
je 0x14a34
movq %r15, %rdi
callq 0x81ea
testq %r14, %r14
je 0x14a41
movq %r14, %rdi
callq 0x81ea
addq $0x10, %r12
cmpq 0xb8(%rsp), %r12
sete %bl
jne 0x14339
leaq 0xc0(%rsp), %rdi
callq 0xbe00
andb $0x1, %bl
movl %ebx, %eax
addq $0x118, %rsp            # imm = 0x118
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %r12
movq %r12, (%rdi)
leaq 0x21ea3(%rip), %rsi     # 0x36931
leaq 0x21ec4(%rip), %rdx     # 0x36959
callq 0xc0a4
movl 0x8(%rbx), %esi
leaq 0x10(%rsp), %rdi
callq 0x34811
jmp 0x14ad6
leaq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %r12
movq %r12, (%rdi)
leaq 0x21e9d(%rip), %rsi     # 0x3695a
leaq 0x21ec3(%rip), %rdx     # 0x36987
callq 0xc0a4
movl 0x8(%rbx), %esi
leaq 0x10(%rsp), %rdi
callq 0x34811
movq 0x10(%rsp), %rdi
cmpq %r12, %rdi
je 0x14aed
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x72c0
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x14b0f
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x72c0
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0x14b34
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x72c0
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x14b50
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x72c0
testq %r15, %r15
je 0x14b5d
movq %r15, %rdi
callq 0x81ea
testq %r14, %r14
je 0x14b6a
movq %r14, %rdi
callq 0x81ea
movb 0xf(%rsp), %bl
jmp 0x14a56
jmp 0x14b77
jmp 0x14bae
movq %r15, %rbx
movq %rax, %r15
movq 0x10(%rsp), %rdi
cmpq %r12, %rdi
je 0x14bb4
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x72c0
jmp 0x14bb4
jmp 0x14bae
jmp 0x14bae
movq %r15, %rbx
movq %rax, %r15
jmp 0x14bd6
jmp 0x14bae
jmp 0x14bae
jmp 0x14bae
jmp 0x14bfd
jmp 0x14c05
jmp 0x14bfd
movq %r15, %rbx
movq %rax, %r15
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x14bd6
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x72c0
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0x14c0b
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x72c0
jmp 0x14c0b
movq %r15, %rbx
movq %rax, %r15
jmp 0x14c27
movq %r15, %rbx
movq %rax, %r15
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x14c27
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x72c0
testq %rbx, %rbx
je 0x14c34
movq %rbx, %rdi
callq 0x81ea
testq %r14, %r14
je 0x14c41
movq %r14, %rdi
callq 0x81ea
leaq 0xc0(%rsp), %rdi
callq 0xbe00
movq %r15, %rdi
callq 0x74f0