// File: /workspace/github_c_makefile_star2_O0/hikalium[P]compilium/parser.c
// Function: ParsePostfixExpr
struct Node *ParsePostfixExpr() {
  struct Node *n = ParsePrimaryExpr();
  while (n) {
    struct Node *t;
    if (ConsumePunctuator("(")) {
      struct Node *args = AllocList();
      if (!ConsumePunctuator(")")) {
        do {
          struct Node *arg_expr = ParseAssignExpr();
          if (!arg_expr)
            ErrorWithToken(NextToken(), "Expected expression here");
          PushToList(args, arg_expr);
        } while (ConsumePunctuator(","));
        ExpectPunctuator(")");
      }
      struct Node *nn = AllocNode(kASTExprFuncCall);
      nn->func_expr = n;
      nn->arg_expr_list = args;
      n = nn;
      continue;
    }
    if ((t = ConsumePunctuator("["))) {
      n = CreateASTBinOp(t, n, ParseExpr());
      ExpectPunctuator("]");
      continue;
    }
    if ((t = ConsumePunctuator(".")) || (t = ConsumePunctuator("->"))) {
      struct Node *right = ConsumeToken(kTokenIdent);
      assert(right);
      n = CreateASTBinOp(t, n, right);
      continue;
    }
    if ((t = ConsumePunctuator("++"))) {
      n = CreateASTUnaryPostfixOp(n, t);
      continue;
    }
    if ((t = ConsumePunctuator("--"))) {
      n = CreateASTUnaryPostfixOp(n, t);
      continue;
    }
    break;
  }
  return n;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
callq 0x8630
movq %rax, -0x8(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x89b8
leaq 0x7d51(%rip), %rdi      # 0x10534
callq 0xc320
cmpq $0x0, %rax
je 0x889b
movb $0x0, %al
callq 0x4e30
movq %rax, -0x18(%rbp)
leaq 0x8f41(%rip), %rdi      # 0x11745
callq 0xc320
cmpq $0x0, %rax
jne 0x8862
jmp 0x8811
callq 0x9240
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x8837
callq 0xc400
movq %rax, %rdi
leaq 0x892c(%rip), %rsi      # 0x1115c
movb $0x0, %al
callq 0x4d50
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x4f10
leaq 0x799f(%rip), %rdi      # 0x101ea
callq 0xc320
cmpq $0x0, %rax
jne 0x8811
leaq 0x8ee8(%rip), %rdi      # 0x11745
callq 0xc390
movl $0x5, %edi
callq 0x3a70
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0xb0(%rax)
movq -0x18(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0xb8(%rax)
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x87d1
leaq 0x7c65(%rip), %rdi      # 0x10507
callq 0xc320
movq %rax, -0x10(%rbp)
cmpq $0x0, %rax
je 0x88eb
movq -0x10(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x38(%rbp)
callq 0x8740
movq -0x40(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq %rax, %rdx
callq 0x3ab0
movq %rax, -0x8(%rbp)
leaq 0x7b95(%rip), %rdi      # 0x10476
callq 0xc390
jmp 0x87d1
leaq 0x7d23(%rip), %rdi      # 0x10615
callq 0xc320
movq %rax, -0x10(%rbp)
cmpq $0x0, %rax
jne 0x8917
leaq 0x7755(%rip), %rdi      # 0x1005d
callq 0xc320
movq %rax, -0x10(%rbp)
cmpq $0x0, %rax
je 0x895e
movl $0x4, %edi
callq 0xc1c0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x8944
leaq 0x8842(%rip), %rdi      # 0x11175
leaq 0x8841(%rip), %rsi      # 0x1117b
movl $0x3e, %edx
callq 0x4b20
movq -0x10(%rbp), %rdi
movq -0x8(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x3ab0
movq %rax, -0x8(%rbp)
jmp 0x87d1
leaq 0x7812(%rip), %rdi      # 0x10177
callq 0xc320
movq %rax, -0x10(%rbp)
cmpq $0x0, %rax
je 0x898a
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x3b80
movq %rax, -0x8(%rbp)
jmp 0x87d1
leaq 0x77e3(%rip), %rdi      # 0x10174
callq 0xc320
movq %rax, -0x10(%rbp)
cmpq $0x0, %rax
je 0x89b6
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x3b80
movq %rax, -0x8(%rbp)
jmp 0x87d1
jmp 0x89b8
movq -0x8(%rbp), %rax
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)