// File: /workspace/github_c_makefile_star2_O0/yutopp[P]cc/parser.c
// Function: parse_expr_additive
ParserResult parse_expr_additive(Parser *parser) {
    ParserResult res;
    state_t _parser_state = save_state(parser);

    res = parse_expr_postfix(parser); ErrProp;

    for (;;) {
        _parser_state = save_state(parser);

        ParserResult res0 = current_token(parser);
        if (res0.result == PARSER_ERROR) {
            rewind_state(parser, _parser_state);
            goto escape;
        }
        Token* op = res0.value.token;

        switch (op->kind) {
        case TOK_KIND_PLUS:
            break;
        case TOK_KIND_MINUS:
            break;
        default:
            rewind_state(parser, _parser_state);
            goto escape;
        }
        forward_token(parser);

        res0 = parse_expr_postfix(parser);
        if (res0.result == PARSER_ERROR) {
            rewind_state(parser, _parser_state);
            goto escape;
        }

        Node* node = node_arena_malloc(parser->arena);
        node->kind = NODE_EXPR_BIN;
        node->value.expr_bin.op = op;
        node->value.expr_bin.lhs = res.value.node;
        node->value.expr_bin.rhs = res0.value.node;

        res.value.node = node;

        _parser_state = save_state(parser); // Forward state
    }

escape:
    return res;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x88(%rbp)
movq %rdi, -0x90(%rbp)
movq %rsi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
callq 0x1ef0
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rsi
leaq -0x30(%rbp), %rdi
callq 0x3a50
movq -0x88(%rbp), %rdi
movq -0x30(%rbp), %rax
movq %rax, (%rdi)
movq -0x28(%rbp), %rax
movq %rax, 0x8(%rdi)
movq -0x20(%rbp), %rax
movq %rax, 0x10(%rdi)
movq -0x18(%rbp), %rax
movq %rax, 0x18(%rdi)
cmpl $0x1, (%rdi)
jne 0x3914
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x1fd0
jmp 0x3a36
jmp 0x3916
movq -0x8(%rbp), %rdi
callq 0x1ef0
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rsi
leaq -0x50(%rbp), %rdi
callq 0x26e0
cmpl $0x1, -0x50(%rbp)
jne 0x3948
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x1fd0
jmp 0x3a34
movq -0x38(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x94(%rbp)
subl $0xe, %eax
je 0x3970
jmp 0x3963
movl -0x94(%rbp), %eax
subl $0xf, %eax
je 0x3972
jmp 0x3974
jmp 0x3986
jmp 0x3986
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x1fd0
jmp 0x3a34
movq -0x8(%rbp), %rdi
callq 0x2750
movq -0x8(%rbp), %rsi
leaq -0x78(%rbp), %rdi
callq 0x3a50
movq -0x78(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0x38(%rbp)
cmpl $0x1, -0x50(%rbp)
jne 0x39d1
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x1fd0
jmp 0x3a34
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x4e00
movq %rax, %rcx
movq -0x88(%rbp), %rax
movq %rcx, -0x80(%rbp)
movq -0x80(%rbp), %rcx
movl $0x6, (%rcx)
movq -0x58(%rbp), %rdx
movq -0x80(%rbp), %rcx
movq %rdx, 0x8(%rcx)
movq 0x18(%rax), %rdx
movq -0x80(%rbp), %rcx
movq %rdx, 0x10(%rcx)
movq -0x38(%rbp), %rdx
movq -0x80(%rbp), %rcx
movq %rdx, 0x18(%rcx)
movq -0x80(%rbp), %rcx
movq %rcx, 0x18(%rax)
movq -0x8(%rbp), %rdi
callq 0x1ef0
movq %rax, -0x10(%rbp)
jmp 0x3916
jmp 0x3a36
movq -0x90(%rbp), %rax
addq $0xa0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)