// File: /workspace/github_cpp_makefile_star2_O3/Eronana[P]strawberry/src/ast_codegen.cpp
// Function: AST_AssignmentExpression::codeGen(Symbol*)
DEF_AST_METHOD(AssignmentExpression,AST_CODEGEN)
{
    bool isIdentifier=is_identifier(expr);
    if(isIdentifier&&GET_LITERAL(assignOptr).type==TOKEN_ASSIGN)
    {
        CODEGEN(assignExpr);
        storeVariant(symbol,expr);
        return;
    }
    CODEGEN(assignExpr);
    CODEGEN(expr);
    if(GET_LITERAL(assignOptr).type!=TOKEN_ASSIGN)PRINTF("swap\n");
    switch(GET_LITERAL(assignOptr).type)
    {
        case TOKEN_ASSIGN:
            PRINTF("pop\n");
            break;
        case TOKEN_MUL_ASSIGN:
            PRINTF("mul\n");
            break;
        case TOKEN_DIV_ASSIGN:
            PRINTF("div\n");
            break;
        case TOKEN_MOD_ASSIGN:
            PRINTF("mod\n");
            break;
        case TOKEN_ADD_ASSIGN:
            PRINTF("add\n");
            break;
        case TOKEN_SUB_ASSIGN:
            PRINTF("sub\n");
            break;
        case TOKEN_LEFT_SHIFT_ASSIGN:
            PRINTF("shl\n");
            break;
        case TOKEN_RIGHT_SHIFT_ASSIGN:
            PRINTF("shr\n");
            break;
        case TOKEN_BITWISE_AND_ASSIGN:
            PRINTF("and\n");
            break;
        case TOKEN_BITWISE_XOR_ASSIGN:
            PRINTF("xor\n");
            break;
        case TOKEN_BITWISE_OR_ASSIGN:
            PRINTF("or\n");
            break;
        default:
            break;
    }
    if(isIdentifier)storeVariant(symbol,expr);
    else PRINTF("object_reset\n");
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r15
leaq 0x8(%rdi), %r14
movq %r14, %rdi
callq 0x1cee6
movl %eax, %ebp
testb %al, %al
je 0x1de57
movq 0x10(%r15), %rax
cmpl $0x20, 0x8(%rax)
jne 0x1de57
movq 0x18(%r15), %rdi
movq (%rdi), %rax
movq %rbx, %rsi
callq *0x18(%rax)
movq 0x8(%r15), %rsi
jmp 0x1dead
movq 0x18(%r15), %rdi
movq (%rdi), %rax
movq %rbx, %rsi
callq *0x18(%rax)
movq 0x8(%r15), %rdi
movq (%rdi), %rax
movq %rbx, %rsi
callq *0x18(%rax)
movq 0x10(%r15), %rax
cmpl $0x20, 0x8(%rax)
jne 0x1dec8
incl 0x11caf(%rip)           # 0x2fb30
leaq 0x11980(%rip), %rax     # 0x2f808
movq (%rax), %rcx
leaq 0x3775(%rip), %rdi      # 0x21607
movl $0x4, %esi
movl $0x1, %edx
callq 0x64b0
testb %bpl, %bpl
je 0x1df31
movq (%r14), %rsi
addq $0x18, %rsi
leaq 0x39a8(%rip), %rdx      # 0x21860
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x1cdd8
incl 0x11c62(%rip)           # 0x2fb30
leaq 0x11933(%rip), %r12     # 0x2f808
movq (%r12), %rcx
leaq 0x3775(%rip), %rdi      # 0x21655
movl $0x5, %esi
movl $0x1, %edx
callq 0x64b0
movq 0x10(%r15), %rax
movl 0x8(%rax), %eax
cmpl $0x14, %eax
jle 0x1df5f
cmpl $0x1f, %eax
jg 0x1df91
cmpl $0x15, %eax
je 0x1e031
cmpl $0x18, %eax
je 0x1e005
cmpl $0x1b, %eax
jne 0x1dea1
incl 0x11c0f(%rip)           # 0x2fb30
movq (%r12), %rcx
leaq 0x37af(%rip), %rdi      # 0x216db
jmp 0x1de92
incl 0x11bf9(%rip)           # 0x2fb30
leaq 0x118ca(%rip), %rax     # 0x2f808
movq (%rax), %rcx
leaq 0x3729(%rip), %rdi      # 0x21671
movl $0xd, %esi
movl $0x1, %edx
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x64b0
addl $-0x3, %eax
cmpl $0x9, %eax
ja 0x1dea1
leaq 0x35f6(%rip), %rcx      # 0x21568
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
incl 0x11baf(%rip)           # 0x2fb30
movq (%r12), %rcx
leaq 0x373f(%rip), %rdi      # 0x216cb
jmp 0x1de92
cmpl $0x25, %eax
je 0x1e04c
cmpl $0x21, %eax
je 0x1e01b
cmpl $0x20, %eax
je 0x1de7b
jmp 0x1dea1
incl 0x11b7d(%rip)           # 0x2fb30
movq (%r12), %rcx
leaq 0x3708(%rip), %rdi      # 0x216c6
jmp 0x1de92
incl 0x11b67(%rip)           # 0x2fb30
movq (%r12), %rcx
leaq 0x36ed(%rip), %rdi      # 0x216c1
jmp 0x1de92
incl 0x11b51(%rip)           # 0x2fb30
movq (%r12), %rcx
leaq 0x36d2(%rip), %rdi      # 0x216bc
jmp 0x1de92
incl 0x11b3b(%rip)           # 0x2fb30
movq (%r12), %rcx
leaq 0x36d0(%rip), %rdi      # 0x216d0
jmp 0x1de92
incl 0x11b25(%rip)           # 0x2fb30
movq (%r12), %rcx
leaq 0x36c0(%rip), %rdi      # 0x216d6
jmp 0x1de92
incl 0x11b0f(%rip)           # 0x2fb30
movq (%r12), %rcx
leaq 0x36be(%rip), %rdi      # 0x216ea
jmp 0x1de92
incl 0x11af9(%rip)           # 0x2fb30
movq (%r12), %rcx
leaq 0x369f(%rip), %rdi      # 0x216e1
movl $0x3, %esi
jmp 0x1de97
incl 0x11ade(%rip)           # 0x2fb30
movq (%r12), %rcx
leaq 0x3688(%rip), %rdi      # 0x216e5
jmp 0x1de92