// File: /workspace/github_cpp_makefile_star2_O1/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 %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r15
leaq 0x8(%rdi), %r14
movq %r14, %rdi
callq 0x1d4b2
movl %eax, %ebp
testb %al, %al
je 0x1e417
movq 0x10(%r15), %rax
cmpl $0x20, 0x8(%rax)
jne 0x1e417
movq 0x18(%r15), %rdi
movq (%rdi), %rax
movq %rbx, %rsi
callq *0x18(%rax)
movq 0x8(%r15), %rsi
jmp 0x1e603
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)
je 0x1e461
incl 0x116ef(%rip)           # 0x2fb30
leaq 0x113c0(%rip), %rax     # 0x2f808
movq (%rax), %rcx
leaq 0x31e7(%rip), %rdi      # 0x21639
movl $0x5, %esi
movl $0x1, %edx
callq 0x64b0
movq 0x10(%r15), %rax
movl 0x8(%rax), %eax
cmpl $0x14, %eax
jle 0x1e4a9
cmpl $0x1f, %eax
jg 0x1e4e1
cmpl $0x15, %eax
je 0x1e5b7
cmpl $0x18, %eax
je 0x1e585
cmpl $0x1b, %eax
jne 0x1e5fb
incl 0x1169d(%rip)           # 0x2fb30
leaq 0x1136e(%rip), %rax     # 0x2f808
movq (%rax), %rcx
leaq 0x321b(%rip), %rdi      # 0x216bf
jmp 0x1e5ec
addl $-0x3, %eax
cmpl $0x9, %eax
ja 0x1e5fb
leaq 0x3090(%rip), %rcx      # 0x2154c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
incl 0x11665(%rip)           # 0x2fb30
leaq 0x11336(%rip), %rax     # 0x2f808
movq (%rax), %rcx
leaq 0x31d3(%rip), %rdi      # 0x216af
jmp 0x1e5ec
cmpl $0x25, %eax
je 0x1e5d5
cmpl $0x21, %eax
je 0x1e59e
cmpl $0x20, %eax
jne 0x1e5fb
incl 0x1162e(%rip)           # 0x2fb30
leaq 0x112ff(%rip), %rax     # 0x2f808
movq (%rax), %rcx
leaq 0x30d8(%rip), %rdi      # 0x215eb
jmp 0x1e5ec
incl 0x11612(%rip)           # 0x2fb30
leaq 0x112e3(%rip), %rax     # 0x2f808
movq (%rax), %rcx
leaq 0x317b(%rip), %rdi      # 0x216aa
jmp 0x1e5ec
incl 0x115f6(%rip)           # 0x2fb30
leaq 0x112c7(%rip), %rax     # 0x2f808
movq (%rax), %rcx
leaq 0x315a(%rip), %rdi      # 0x216a5
jmp 0x1e5ec
incl 0x115da(%rip)           # 0x2fb30
leaq 0x112ab(%rip), %rax     # 0x2f808
movq (%rax), %rcx
leaq 0x3139(%rip), %rdi      # 0x216a0
jmp 0x1e5ec
incl 0x115be(%rip)           # 0x2fb30
leaq 0x1128f(%rip), %rax     # 0x2f808
movq (%rax), %rcx
leaq 0x3131(%rip), %rdi      # 0x216b4
jmp 0x1e5ec
incl 0x115a5(%rip)           # 0x2fb30
leaq 0x11276(%rip), %rax     # 0x2f808
movq (%rax), %rcx
leaq 0x311e(%rip), %rdi      # 0x216ba
jmp 0x1e5ec
incl 0x1158c(%rip)           # 0x2fb30
leaq 0x1125d(%rip), %rax     # 0x2f808
movq (%rax), %rcx
leaq 0x3119(%rip), %rdi      # 0x216ce
jmp 0x1e5ec
incl 0x11573(%rip)           # 0x2fb30
leaq 0x11244(%rip), %rax     # 0x2f808
movq (%rax), %rcx
leaq 0x30f7(%rip), %rdi      # 0x216c5
movl $0x3, %esi
jmp 0x1e5f1
incl 0x11555(%rip)           # 0x2fb30
leaq 0x11226(%rip), %rax     # 0x2f808
movq (%rax), %rcx
leaq 0x30dd(%rip), %rdi      # 0x216c9
movl $0x4, %esi
movl $0x1, %edx
callq 0x64b0
testb %bpl, %bpl
je 0x1e620
movq (%r14), %rsi
addq $0x18, %rsi
leaq 0x3236(%rip), %rdx      # 0x21844
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x1d3a4
incl 0x1150a(%rip)           # 0x2fb30
leaq 0x111db(%rip), %rax     # 0x2f808
movq (%rax), %rcx
leaq 0x301e(%rip), %rdi      # 0x21655
movl $0xd, %esi
movl $0x1, %edx
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x64b0