// File: /workspace/github_c_makefile_star2_O0/takoeight0821[P]hoc_nyan/src/parse.c
// Function: postfix
static Node *postfix() {
  Node *node = term();
  Token *tok;

  for (;;) {
    if ((tok = match("."))) {
      char *name = read_ident();
      Node *e = new_node(NMEMBER, tok);
      e->expr = node;
      e->name = name;
      node = e;
    } else if ((tok = match("->"))) {
      char *name = read_ident();
      Node *deref = new_node(NDEREF, tok);
      deref->expr = node;
      Node *e = new_node(NMEMBER, tok);
      e->expr = deref;
      e->name = name;
      node = e;
    } else if ((tok = match("["))) {
      Node *offset = expr();
      if (!match("]")) {
        parse_error("]", peek(0));
      }
      node = new_subscript(tok, node, offset);
    } else if ((tok = match("++"))) {
      /*
       * a++ -> (a = a + 1, a - 1)
       */
      Node *one = new_int_node(tok, 1);
      Node *assign = new_assign_node(tok, NADD, node, one);
      Node *value = new_node(NSUB, tok);
      value->lhs = node;
      value->rhs = one;
      node = new_node(NCOMMA, tok);
      node->lhs = assign;
      node->rhs = value;
    } else if ((tok = match("--"))) {
      /*
       * a-- -> (a = a - 1, a + 1)
       */
      Node *one = new_int_node(tok, 1);
      Node *assign = new_assign_node(tok, NSUB, node, one);
      Node *value = new_node(NADD, tok);
      value->lhs = node;
      value->rhs = one;
      node = new_node(NCOMMA, tok);
      node->lhs = assign;
      node->rhs = value;
    } else {
      return node;
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
callq 0xc1d0
movq %rax, -0x8(%rbp)
leaq 0x741e(%rip), %rdi      # 0x13306
callq 0xa330
movq %rax, -0x10(%rbp)
cmpq $0x0, %rax
je 0xbf37
callq 0xae80
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rsi
movl $0x1b, %edi
callq 0x9d10
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xc15b
leaq 0x737e(%rip), %rdi      # 0x132bc
callq 0xa330
movq %rax, -0x10(%rbp)
cmpq $0x0, %rax
je 0xbfab
callq 0xae80
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rsi
movl $0x1a, %edi
callq 0x9d10
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x10(%rbp), %rsi
movl $0x1b, %edi
callq 0x9d10
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x28(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x38(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xc159
leaq 0x72ce(%rip), %rdi      # 0x13280
callq 0xa330
movq %rax, -0x10(%rbp)
cmpq $0x0, %rax
je 0xc00e
callq 0xc7b0
movq %rax, -0x40(%rbp)
leaq 0x6ead(%rip), %rdi      # 0x12e7e
callq 0xa330
cmpq $0x0, %rax
jne 0xbff4
xorl %eax, %eax
movl %eax, %edi
callq 0xa990
movq %rax, %rsi
leaq 0x6e8f(%rip), %rdi      # 0x12e7e
callq 0xaa00
movq -0x10(%rbp), %rdi
movq -0x8(%rbp), %rsi
movq -0x40(%rbp), %rdx
callq 0xc160
movq %rax, -0x8(%rbp)
jmp 0xc157
leaq 0x72aa(%rip), %rdi      # 0x132bf
callq 0xa330
movq %rax, -0x10(%rbp)
cmpq $0x0, %rax
je 0xc0ad
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0xb170
movq %rax, -0x48(%rbp)
movq -0x10(%rbp), %rdi
movq -0x8(%rbp), %rdx
movq -0x48(%rbp), %rcx
movl $0x3, %esi
callq 0xb380
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rsi
movl $0x4, %edi
callq 0x9d10
movq %rax, -0x58(%rbp)
movq -0x8(%rbp), %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x48(%rbp), %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rsi
movl $0x15, %edi
callq 0x9d10
movq %rax, -0x8(%rbp)
movq -0x50(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x58(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0xc155
leaq 0x720e(%rip), %rdi      # 0x132c2
callq 0xa330
movq %rax, -0x10(%rbp)
cmpq $0x0, %rax
je 0xc149
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0xb170
movq %rax, -0x60(%rbp)
movq -0x10(%rbp), %rdi
movq -0x8(%rbp), %rdx
movq -0x60(%rbp), %rcx
movl $0x4, %esi
callq 0xb380
movq %rax, -0x68(%rbp)
movq -0x10(%rbp), %rsi
movl $0x3, %edi
callq 0x9d10
movq %rax, -0x70(%rbp)
movq -0x8(%rbp), %rcx
movq -0x70(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x60(%rbp), %rcx
movq -0x70(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rsi
movl $0x15, %edi
callq 0x9d10
movq %rax, -0x8(%rbp)
movq -0x68(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x70(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0xc153
movq -0x8(%rbp), %rax
addq $0x70, %rsp
popq %rbp
retq
jmp 0xc155
jmp 0xc157
jmp 0xc159
jmp 0xc15b
jmp 0xbee1