// File: lukewagner[P]asmjs2wasm/src/cashew/parser.h
// Function: cashew::Parser<asmjs_ast::Node*, Builder>::parseAfterCurly(char*&)
NodeRef parseAfterCurly(char*& src) {
    expressionPartsStack.resize(expressionPartsStack.size()+1);
    NodeRef ret = builder.makeObject();
    while (1) {
      src = skipSpace(src);
      assert(*src);
      if (*src == '}') break;
      Frag key(src);
      assert(key.type == IDENT || key.type == STRING);
      src += key.size;
      src = skipSpace(src);
      assert(*src == ':');
      src++;
      NodeRef value = parseElement(src, ",}");
      builder.appendToObject(ret, key.str, value);
      src = skipSpace(src);
      if (*src == ',') {
        src++;
        continue;
      } else assert(*src == '}');
    }
    assert(*src == '}');
    src++;
    return ret;
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x40(%rbp)
callq 0x4ff0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
addq $0x1, %rsi
callq 0x4eb0
movq -0x40(%rbp), %rdi
addq $0x28, %rdi
callq 0xf4b0
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x5d30
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rax
cmpb $0x0, (%rax)
je 0xb2f2
jmp 0xb311
leaq 0xad1e(%rip), %rdi      # 0x16017
leaq 0xa007(%rip), %rsi      # 0x15307
movl $0x26f, %edx            # imm = 0x26F
leaq 0xadc1(%rip), %rcx      # 0x160cd
callq 0x2130
movq -0x10(%rbp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x7d, %eax
jne 0xb325
jmp 0xb483
movq -0x10(%rbp), %rax
movq (%rax), %rsi
leaq -0x28(%rbp), %rdi
callq 0x5f00
movb $0x1, %al
cmpl $0x2, -0x1c(%rbp)
movb %al, -0x41(%rbp)
je 0xb34a
cmpl $0x3, -0x1c(%rbp)
sete %al
movb %al, -0x41(%rbp)
movb -0x41(%rbp), %al
testb $0x1, %al
jne 0xb353
jmp 0xb355
jmp 0xb374
leaq 0xadef(%rip), %rdi      # 0x1614b
leaq 0x9fa4(%rip), %rsi      # 0x15307
movl $0x272, %edx            # imm = 0x272
leaq 0xad5e(%rip), %rcx      # 0x160cd
callq 0x2130
movl -0x20(%rbp), %edx
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movslq %edx, %rdx
addq %rdx, %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x5d30
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x3a, %eax
jne 0xb3ae
jmp 0xb3cd
leaq 0xa65c(%rip), %rdi      # 0x15a11
leaq 0x9f4b(%rip), %rsi      # 0x15307
movl $0x275, %edx            # imm = 0x275
leaq 0xad05(%rip), %rcx      # 0x160cd
callq 0x2130
movq -0x40(%rbp), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rsi
leaq 0xad89(%rip), %rdx      # 0x16173
callq 0x9850
movq -0x40(%rbp), %rdi
movq %rax, -0x30(%rbp)
addq $0x28, %rdi
movq -0x18(%rbp), %rsi
movq -0x28(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %rdx
callq 0xf4f0
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x5d30
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x2c, %eax
jne 0xb44c
movq -0x10(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
jmp 0xb2ce
movq -0x10(%rbp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x7d, %eax
jne 0xb45d
jmp 0xb47c
leaq 0xa222(%rip), %rdi      # 0x15686
leaq 0x9e9c(%rip), %rsi      # 0x15307
movl $0x27d, %edx            # imm = 0x27D
leaq 0xac56(%rip), %rcx      # 0x160cd
callq 0x2130
jmp 0xb47e
jmp 0xb2ce
movq -0x10(%rbp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x7d, %eax
jne 0xb494
jmp 0xb4b3
leaq 0xa1eb(%rip), %rdi      # 0x15686
leaq 0x9e65(%rip), %rsi      # 0x15307
movl $0x27f, %edx            # imm = 0x27F
leaq 0xac1f(%rip), %rcx      # 0x160cd
callq 0x2130
movq -0x10(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq -0x18(%rbp), %rax
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax,%rax)