// File: /workspace/github_c_makefile_star2_O0/niho[P]elmc/src/eparse.c
// Function: elm_parser_init
static elm_parser_t *elm_parser_init(void) {
    elm_parser_t *p = malloc(sizeof(elm_parser_t));

    //mpc_parser_t *Whitespace = mpc_new("whitespace");
    p->Comment  = mpc_new("comment");
    p->True     = mpc_new("true");
    p->False    = mpc_new("false");
    p->Number   = mpc_new("number");
    p->Float    = mpc_new("float");
    p->Char     = mpc_new("char");
    p->String   = mpc_new("string");
    //p->MultiStr = mpc_new("multistr");
    p->Literal  = mpc_new("literal");
    p->Decl     = mpc_new("declaration");
    /*p->ValueDecl = mpc_new("valuedecl");
    p->TypeDecl  = mpc_new("typedecl");
    p->Type   = mpc_new("type");
    p->CustomType = mpc_new("customtype");
    p->TypeAlias = mpc_new("typealias");*/
    p->Var      = mpc_new("variable");
    p->Value    = mpc_new("value");
    p->Expr     = mpc_new("expression");
    p->List     = mpc_new("list");
    p->Tuple    = mpc_new("tuple");
    p->If       = mpc_new("if");
    p->Case     = mpc_new("case");
    /*p->Lexpr  = mpc_new("lexpr");
    p->Prod     = mpc_new("product");
    p->Value    = mpc_new("value");*/
    p->Module   = mpc_new("module");

    mpc_define(p->Comment, mpc_apply(elm_comment(), elm_ast_comment));

    mpc_define(p->True, mpc_apply(mpc_sym("True"), elm_ast_bool));
    mpc_define(p->False, mpc_apply(mpc_sym("False"), elm_ast_bool));

    mpc_define(p->Number, mpc_apply(elm_number(), elm_ast_number));
    mpc_define(p->Float, mpc_apply(elm_float(), elm_ast_float));

    mpc_define(p->Char, mpc_apply(mpc_char_lit(), elm_ast_char));
    mpc_define(p->String, mpc_apply(mpc_string_lit(), elm_ast_string));

    mpc_define(p->Literal, mpc_apply(mpc_or(7, p->True, p->False, mpc_or(2, p->Float, p->Number), p->Char, p->String, p->List, p->Tuple), elm_ast_literal));
    mpc_define(p->Var, elm_variable());

    mpc_define(p->Value, elm_value(p->Expr, p->Literal, p->Var, p->If, p->Case));
    mpc_define(p->Expr, elm_expr(p->Value));

    mpc_define(p->List, elm_list(p->Expr));
    mpc_define(p->Tuple, elm_tuple(p->Expr));

    mpc_define(p->If, elm_if(p->Expr));
    mpc_define(p->Case, elm_case(p->Expr, elm_pattern(mpc_or(6, p->True, p->False, p->Float, p->Number, p->Char, p->String))));

    mpc_define(p->Decl, elm_declaration(p->Var, p->Expr));

    mpc_define(p->Module, elm_module(p->Comment, p->Decl));
    
    return p;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movl $0x88, %edi
callq 0x1130
movq %rax, -0x8(%rbp)
leaq 0xedac(%rip), %rdi      # 0x114bc
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
leaq 0xed14(%rip), %rdi      # 0x1143a
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
leaq 0xed02(%rip), %rdi      # 0x1143f
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
leaq 0xecf1(%rip), %rdi      # 0x11445
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x18(%rax)
leaq 0xece1(%rip), %rdi      # 0x1144c
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x20(%rax)
leaq 0xecd0(%rip), %rdi      # 0x11452
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x28(%rax)
leaq 0xecbe(%rip), %rdi      # 0x11457
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
leaq 0xecae(%rip), %rdi      # 0x1145e
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x38(%rax)
leaq 0xec9f(%rip), %rdi      # 0x11466
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x40(%rax)
leaq 0xec94(%rip), %rdi      # 0x11472
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x48(%rax)
leaq 0xec86(%rip), %rdi      # 0x1147b
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x50(%rax)
leaq 0xec75(%rip), %rdi      # 0x11481
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x58(%rax)
leaq 0xec69(%rip), %rdi      # 0x1148c
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x60(%rax)
leaq 0xec57(%rip), %rdi      # 0x11491
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x68(%rax)
leaq 0xec46(%rip), %rdi      # 0x11497
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x70(%rax)
leaq 0xec32(%rip), %rdi      # 0x1149a
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x78(%rax)
leaq 0xec20(%rip), %rdi      # 0x1149f
callq 0x5e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x80(%rax)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xa8(%rbp)
callq 0x2fe0
movq %rax, %rdi
leaq -0x135f(%rip), %rsi     # 0x1550
callq 0x6bd0
movq -0xa8(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0xa0(%rbp)
leaq 0xe847(%rip), %rdi      # 0x11120
callq 0x8390
movq %rax, %rdi
leaq -0x1378(%rip), %rsi     # 0x1570
callq 0x6bd0
movq -0xa0(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x98(%rbp)
leaq 0xeb94(%rip), %rdi      # 0x114a6
callq 0x8390
movq %rax, %rdi
leaq -0x13b1(%rip), %rsi     # 0x1570
callq 0x6bd0
movq -0x98(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x90(%rbp)
callq 0x3020
movq %rax, %rdi
leaq -0x1393(%rip), %rsi     # 0x15c0
callq 0x6bd0
movq -0x90(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x88(%rbp)
callq 0x3060
movq %rax, %rdi
leaq -0x13a5(%rip), %rsi     # 0x15e0
callq 0x6bd0
movq -0x88(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x80(%rbp)
callq 0x7ef0
movq %rax, %rdi
leaq -0x13b4(%rip), %rsi     # 0x1600
callq 0x6bd0
movq -0x80(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x78(%rbp)
callq 0x7fc0
movq %rax, %rdi
leaq -0x13c0(%rip), %rsi     # 0x1620
callq 0x6bd0
movq -0x78(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x70(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x68(%rbp)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdx
movl $0x2, %edi
movb $0x0, %al
callq 0x71b0
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdx
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq 0x28(%rax), %r8
movq -0x8(%rbp), %rax
movq 0x30(%rax), %r9
movq -0x8(%rbp), %rax
movq 0x60(%rax), %r10
movq -0x8(%rbp), %rax
movq 0x68(%rax), %rax
movl $0x7, %edi
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
movb $0x0, %al
callq 0x71b0
movq %rax, %rdi
leaq -0x143b(%rip), %rsi     # 0x1640
callq 0x6bd0
movq -0x60(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq %rax, -0x58(%rbp)
callq 0x3090
movq -0x58(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rsi
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdx
movq -0x8(%rbp), %rax
movq 0x70(%rax), %rcx
movq -0x8(%rbp), %rax
movq 0x78(%rax), %r8
callq 0x30e0
movq -0x50(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rdi
callq 0x3160
movq -0x48(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x60(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rdi
callq 0x31a0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x68(%rax), %rax
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rdi
callq 0x3280
movq -0x38(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x70(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rdi
callq 0x3360
movq -0x30(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x78(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdx
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x8(%rbp), %rax
movq 0x18(%rax), %r8
movq -0x8(%rbp), %rax
movq 0x28(%rax), %r9
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movl $0x6, %edi
movq %rax, (%rsp)
movb $0x0, %al
callq 0x71b0
movq %rax, %rdi
callq 0x34c0
movq -0x28(%rbp), %rdi
movq %rax, %rsi
callq 0x3420
movq -0x20(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rsi
callq 0x3500
movq -0x18(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
movq 0x80(%rax), %rax
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rsi
callq 0x3580
movq -0x10(%rbp), %rdi
movq %rax, %rsi
callq 0x6340
movq -0x8(%rbp), %rax
addq $0xc0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)