// File: lukewagner[P]asmjs2wasm/src/cashew/parser.h
// Function: cashew::Parser<asmjs_ast::Node*, Builder>::parseAfterKeyword(cashew::Parser<asmjs_ast::Node*, Builder>::Frag&, char*&, char const*)
NodeRef parseAfterKeyword(Frag& frag, char*& src, const char* seps) {
    src = skipSpace(src);
    if (frag.str == FUNCTION) return parseFunction(frag, src, seps);
    else if (frag.str == VAR) return parseVar(frag, src, seps);
    else if (frag.str == CONST) return parseVar(frag, src, seps);
    else if (frag.str == RETURN) return parseReturn(frag, src, seps);
    else if (frag.str == IF) return parseIf(frag, src, seps);
    else if (frag.str == DO) return parseDo(frag, src, seps);
    else if (frag.str == WHILE) return parseWhile(frag, src, seps);
    else if (frag.str == BREAK) return parseBreak(frag, src, seps);
    else if (frag.str == CONTINUE) return parseContinue(frag, src, seps);
    else if (frag.str == SWITCH) return parseSwitch(frag, src, seps);
    else if (frag.str == NEW) return parseNew(frag, src, seps);
    dump(frag.str.str, src);
    assert(0);
    return nullptr;
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rdi
callq 0x5d30
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x18(%rbp), %rdi
leaq 0x1886f(%rip), %rsi     # 0x223e0
callq 0x6680
testb $0x1, %al
jne 0x9b7c
jmp 0x9b9a
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0xb4f0
movq %rax, -0x8(%rbp)
jmp 0x9de2
movq -0x18(%rbp), %rdi
leaq 0x18673(%rip), %rsi     # 0x22218
callq 0x6680
testb $0x1, %al
jne 0x9bb0
jmp 0x9bce
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0xb780
movq %rax, -0x8(%rbp)
jmp 0x9de2
movq -0x18(%rbp), %rdi
leaq 0x18647(%rip), %rsi     # 0x22220
callq 0x6680
testb $0x1, %al
jne 0x9be4
jmp 0x9c02
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0xb780
movq %rax, -0x8(%rbp)
jmp 0x9de2
movq -0x18(%rbp), %rdi
leaq 0x1862b(%rip), %rsi     # 0x22238
callq 0x6680
testb $0x1, %al
jne 0x9c18
jmp 0x9c36
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0xb990
movq %rax, -0x8(%rbp)
jmp 0x9de2
movq -0x18(%rbp), %rdi
leaq 0x185ff(%rip), %rsi     # 0x22240
callq 0x6680
testb $0x1, %al
jne 0x9c4c
jmp 0x9c6a
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0xba90
movq %rax, -0x8(%rbp)
jmp 0x9de2
movq -0x18(%rbp), %rdi
leaq 0x185e3(%rip), %rsi     # 0x22258
callq 0x6680
testb $0x1, %al
jne 0x9c80
jmp 0x9c9e
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0xbb80
movq %rax, -0x8(%rbp)
jmp 0x9de2
movq -0x18(%rbp), %rdi
leaq 0x185a7(%rip), %rsi     # 0x22250
callq 0x6680
testb $0x1, %al
jne 0x9cb4
jmp 0x9cd2
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0xbc60
movq %rax, -0x8(%rbp)
jmp 0x9de2
movq -0x18(%rbp), %rdi
leaq 0x185b3(%rip), %rsi     # 0x22290
callq 0x6680
testb $0x1, %al
jne 0x9ce8
jmp 0x9d06
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0xbcc0
movq %rax, -0x8(%rbp)
jmp 0x9de2
movq -0x18(%rbp), %rdi
leaq 0x18587(%rip), %rsi     # 0x22298
callq 0x6680
testb $0x1, %al
jne 0x9d1c
jmp 0x9d3a
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0xbd60
movq %rax, -0x8(%rbp)
jmp 0x9de2
movq -0x18(%rbp), %rdi
leaq 0x1855b(%rip), %rsi     # 0x222a0
callq 0x6680
testb $0x1, %al
jne 0x9d50
jmp 0x9d6b
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0xbe00
movq %rax, -0x8(%rbp)
jmp 0x9de2
movq -0x18(%rbp), %rdi
leaq 0x186ca(%rip), %rsi     # 0x22440
callq 0x6680
testb $0x1, %al
jne 0x9d81
jmp 0x9d9c
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0xc2b0
movq %rax, -0x8(%rbp)
jmp 0x9de2
jmp 0x9d9e
jmp 0x9da0
jmp 0x9da2
jmp 0x9da4
jmp 0x9da6
jmp 0x9da8
jmp 0x9daa
jmp 0x9dac
jmp 0x9dae
jmp 0x9db0
movq -0x18(%rbp), %rax
movq (%rax), %rdi
movq -0x20(%rbp), %rax
movq (%rax), %rsi
callq 0x7880
leaq 0xbdf1(%rip), %rdi      # 0x15bbb
leaq 0xb536(%rip), %rsi      # 0x15307
movl $0x156, %edx            # imm = 0x156
leaq 0xb690(%rip), %rcx      # 0x1546d
callq 0x2130
movq -0x8(%rbp), %rax
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax)