// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/extended/spec_visitor.c
// Function: gt_spec_visitor_new
GtNodeVisitor* gt_spec_visitor_new(const char *specfile, GtSpecResults *res,
                                   GtError *err)
{
  GtNodeVisitor *nv;
  GtSpecVisitor *sv;
  int had_err = 0;
  gt_assert(specfile);
  nv = gt_node_visitor_create(gt_spec_visitor_class());
  sv = spec_visitor_cast(nv);
  sv->L = luaL_newstate();
  if (!sv->L) {
    gt_error_set(err, "cannot create new Lua state");
    gt_node_visitor_delete(nv);
    return NULL;
  }
  spec_luaL_opencustomlibs(sv->L, spec_luasecurelibs);
  spec_luaL_opencustomlibs(sv->L, spec_luainsecurelibs);
  sv->filename = gt_str_new_cstr(specfile);
  sv->res = res;
  sv->type_checker = NULL;
  sv->type_specs = gt_hashmap_new(GT_HASH_STRING, gt_free_func, gt_free_func);
  sv->graph_context = gt_array_new(sizeof (GtFeatureNode*));
  sv->runtime_fail_hard = false;

  had_err = spec_init_lua_env(sv, gt_error_get_progname(err), err);
  if (!had_err) {
    if (luaL_loadfile(sv->L, specfile) || lua_pcall(sv->L, 0, 0, 0)) {
      gt_error_set(err, "%s", lua_tostring(sv->L, -1));
      gt_node_visitor_delete(nv);
      return NULL;
    }
  } else {
    gt_node_visitor_delete(nv);
    return NULL;
  }
  return nv;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
testq %rdi, %rdi
je 0x177a10
movq %rdx, %r14
movq %rsi, %r13
movq %rdi, %r12
callq 0x176f38
movq %rax, %rdi
callq 0x163080
movq %rax, %rbx
callq 0x176f38
movq %rax, %rdi
movq %rbx, %rsi
callq 0x1630b1
movq %rax, %r15
callq 0x22810a
movq %rax, 0x10(%r15)
testq %rax, %rax
je 0x177959
leaq 0x33ca7a(%rip), %rsi    # 0x4b3f40
movq %rax, %rdi
callq 0x177a15
movq 0x10(%r15), %rdi
leaq 0x33cac7(%rip), %rsi    # 0x4b3fa0
callq 0x177a15
movq %r12, %rdi
callq 0x11acc9
movq %rax, 0x18(%r15)
movq %r13, 0x68(%r15)
movq $0x0, 0x28(%r15)
leaq -0x72e53(%rip), %rdx    # 0x1046aa
movl $0x1, %edi
movq %rdx, %rsi
callq 0x1008fc
movq %rax, 0x20(%r15)
movl $0x8, %edi
callq 0xd214c
movq %rax, 0x60(%r15)
movb $0x0, 0x70(%r15)
movq %r14, %rdi
callq 0xfccba
movq %rax, %r13
movq 0x10(%r15), %rdi
leaq 0x21c4c2(%rip), %rdx    # 0x3939f9
movl $0xffffd8f0, %esi       # imm = 0xFFFFD8F0
callq 0x224a06
movq 0x10(%r15), %rdi
leaq 0x21c4c5(%rip), %rsi    # 0x393a11
callq 0x2243ba
movq 0x10(%r15), %rdi
leaq 0x646(%rip), %rsi       # 0x177ba2
xorl %edx, %edx
callq 0x2247b8
movq 0x10(%r15), %rdi
movl $0xfffffffd, %esi       # imm = 0xFFFFFFFD
callq 0x224fd4
movq 0x10(%r15), %rdi
leaq 0x21c4ae(%rip), %rsi    # 0x393a2a
callq 0x2243ba
movq 0x10(%r15), %rdi
leaq 0x61d(%rip), %rsi       # 0x177ba9
xorl %edx, %edx
callq 0x2247b8
movq 0x10(%r15), %rdi
movl $0xfffffffd, %esi       # imm = 0xFFFFFFFD
callq 0x224fd4
movq 0x10(%r15), %rdi
leaq 0x21c5b7(%rip), %rsi    # 0x393b63
callq 0x2243ba
movq 0x10(%r15), %rdi
leaq 0x5f7(%rip), %rsi       # 0x177bb3
xorl %edx, %edx
callq 0x2247b8
movq 0x10(%r15), %rdi
movl $0xfffffffd, %esi       # imm = 0xFFFFFFFD
callq 0x224fd4
movq 0x10(%r15), %rdi
leaq 0x21c603(%rip), %rsi    # 0x393bdf
callq 0x2243ba
movq 0x10(%r15), %rdi
leaq 0x656(%rip), %rsi       # 0x177c42
xorl %edx, %edx
callq 0x2247b8
movq 0x10(%r15), %rdi
movl $0xfffffffd, %esi       # imm = 0xFFFFFFFD
callq 0x224fd4
movq 0x10(%r15), %rdi
leaq 0x21c5fc(%rip), %rsi    # 0x393c08
callq 0x2243ba
movq 0x10(%r15), %rdi
leaq 0x7bb(%rip), %rsi       # 0x177dd7
xorl %edx, %edx
callq 0x2247b8
movq 0x10(%r15), %rdi
movl $0xfffffffd, %esi       # imm = 0xFFFFFFFD
callq 0x224fd4
movq 0x10(%r15), %rdi
leaq 0x1f9e62(%rip), %rdx    # 0x37149e
movl $0xffffd8ee, %esi       # imm = 0xFFFFD8EE
callq 0x224a06
movq 0x10(%r15), %rdi
leaq 0x21fce2(%rip), %rsi    # 0x397333
callq 0x2243ba
movq 0x10(%r15), %rdi
leaq 0x875(%rip), %rsi       # 0x177ed6
xorl %edx, %edx
callq 0x2247b8
movq 0x10(%r15), %rdi
movl $0xfffffffd, %esi       # imm = 0xFFFFFFFD
callq 0x224fd4
movq 0x10(%r15), %rdi
leaq 0x21c5d4(%rip), %rsi    # 0x393c55
callq 0x2243ba
movq 0x10(%r15), %rdi
leaq 0x971(%rip), %rsi       # 0x178002
xorl %edx, %edx
callq 0x2247b8
movq 0x10(%r15), %rdi
movl $0xfffffffd, %esi       # imm = 0xFFFFFFFD
callq 0x224fd4
movq 0x10(%r15), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x224be0
movq 0x10(%r15), %rdi
leaq 0x2090e9(%rip), %rsi    # 0x3807a7
callq 0x2243ba
movq 0x10(%r15), %rdi
leaq 0xa60(%rip), %rsi       # 0x17812e
xorl %edx, %edx
callq 0x2247b8
movq 0x10(%r15), %rdi
movl $0xfffffffd, %esi       # imm = 0xFFFFFFFD
callq 0x224fd4
movq 0x10(%r15), %rdi
leaq 0x1f7f6f(%rip), %rsi    # 0x36f65d
callq 0x2243ba
movq 0x10(%r15), %rdi
leaq 0xb3f(%rip), %rsi       # 0x17823d
xorl %edx, %edx
callq 0x2247b8
movq 0x10(%r15), %rdi
movl $0xfffffffd, %esi       # imm = 0xFFFFFFFD
callq 0x224fd4
movq 0x10(%r15), %rdi
leaq 0x226420(%rip), %rsi    # 0x39db3e
callq 0x2243ba
movq 0x10(%r15), %rdi
leaq 0xbc0(%rip), %rsi       # 0x1782ee
xorl %edx, %edx
callq 0x2247b8
movq 0x10(%r15), %rdi
movl $0xfffffffd, %esi       # imm = 0xFFFFFFFD
callq 0x224fd4
movq 0x10(%r15), %rdi
leaq 0x2508c5(%rip), %rsi    # 0x3c8013
callq 0x2243ba
movq 0x10(%r15), %rdi
leaq 0xc41(%rip), %rsi       # 0x17839f
xorl %edx, %edx
callq 0x2247b8
movq 0x10(%r15), %rdi
movl $0xfffffffd, %esi       # imm = 0xFFFFFFFD
callq 0x224fd4
movq 0x10(%r15), %rdi
leaq 0x21b638(%rip), %rsi    # 0x392db6
callq 0x2243ba
movq 0x10(%r15), %rdi
leaq 0xcc2(%rip), %rsi       # 0x178450
xorl %edx, %edx
callq 0x2247b8
movq 0x10(%r15), %rdi
movl $0xfffffffd, %esi       # imm = 0xFFFFFFFD
callq 0x224fd4
movq 0x10(%r15), %rdi
leaq 0x21c29a(%rip), %rdx    # 0x393a48
movl $0xffffd8ee, %esi       # imm = 0xFFFFD8EE
callq 0x224f78
movq 0x10(%r15), %rdi
leaq 0xd3e(%rip), %rsi       # 0x178501
xorl %edx, %edx
callq 0x2247b8
movq 0x10(%r15), %rdi
leaq 0x1f6128(%rip), %rdx    # 0x36d8fd
movl $0xffffd8ee, %esi       # imm = 0xFFFFD8EE
callq 0x224f78
movq 0x10(%r15), %rdi
leaq 0xdca(%rip), %rsi       # 0x1785b4
xorl %edx, %edx
callq 0x2247b8
movq 0x10(%r15), %rdi
leaq 0x1f3d17(%rip), %rdx    # 0x36b513
movl $0xffffd8ee, %esi       # imm = 0xFFFFD8EE
callq 0x224f78
movq 0x10(%r15), %rdi
leaq 0x21c240(%rip), %rsi    # 0x393a51
callq 0x2270b9
movq 0x10(%r15), %rdi
leaq 0x21c247(%rip), %rsi    # 0x393a68
callq 0x2243ba
movq 0x10(%r15), %rdi
leaq 0xe5b(%rip), %rsi       # 0x17868c
xorl %edx, %edx
callq 0x2247b8
movq 0x10(%r15), %rdi
movl $0xfffffffd, %esi       # imm = 0xFFFFFFFD
callq 0x224d62
movq 0x10(%r15), %rdi
leaq 0x21c21f(%rip), %rsi    # 0x393a70
callq 0x2243ba
movq 0x10(%r15), %rdi
leaq 0x1d31bf(%rip), %rsi    # 0x34aa20
callq 0x2243ba
movq 0x10(%r15), %rdi
movl $0xfffffffd, %esi       # imm = 0xFFFFFFFD
callq 0x224d62
callq 0x11ac6c
movq %rax, %rbp
movq %r13, %rdi
movl $0x20, %esi
callq 0xe438c
movq %rbp, %rdi
movq %r13, %rsi
movq %rax, %rdx
callq 0x11ae1b
movq %rbp, %rdi
callq 0x11b0a1
movq %rax, %rdi
xorl %esi, %esi
callq 0x100758
movq %rax, %r13
movq %rbp, %rdi
callq 0x11bdbf
leaq 0x21c1bc(%rip), %rsi    # 0x393a77
movq %r13, %rdi
callq 0x11acf3
movq 0x10(%r15), %rbp
movq %r13, %rdi
callq 0x11b0a1
movq %rbp, %rdi
movq %rax, %rsi
callq 0x227ca2
testl %eax, %eax
jne 0x1778f5
movq 0x10(%r15), %rdi
xorl %esi, %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x22537b
testl %eax, %eax
je 0x177986
movq 0x10(%r15), %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
xorl %edx, %edx
callq 0x223ea8
leaq 0x25119d(%rip), %rsi    # 0x3c8aa9
movq %r14, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0xfcb67
movq %r13, %rdi
callq 0x11bdbf
movq 0x10(%r15), %rdi
leaq 0x3428cc(%rip), %rsi    # 0x4ba1f8
callq 0x2248bd
movq 0x10(%r15), %rdi
movq %r15, %rsi
callq 0x2248bd
movq 0x10(%r15), %rdi
movl $0xffffd8f0, %esi       # imm = 0xFFFFD8F0
callq 0x224d62
movaps 0x1e10de(%rip), %xmm0   # 0x358a30
movups %xmm0, 0x30(%r15)
jmp 0x17796a
leaq 0x21bd48(%rip), %rsi    # 0x3936a8
movq %r14, %rdi
xorl %eax, %eax
callq 0xfcb67
movq %rbx, %rdi
callq 0x1632f2
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %r13, %rdi
callq 0x11bdbf
movq 0x10(%r15), %rdi
leaq 0x34285f(%rip), %rsi    # 0x4ba1f8
callq 0x2248bd
movq 0x10(%r15), %rdi
movq %r15, %rsi
callq 0x2248bd
movq 0x10(%r15), %rdi
movl $0xffffd8f0, %esi       # imm = 0xFFFFD8F0
callq 0x224d62
movaps 0x1e1071(%rip), %xmm0   # 0x358a30
movups %xmm0, 0x30(%r15)
movq 0x10(%r15), %rdi
movq %r12, %rsi
callq 0x227ca2
testl %eax, %eax
jne 0x1779e7
movq 0x10(%r15), %rdi
xorl %esi, %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x22537b
testl %eax, %eax
je 0x177974
movq 0x10(%r15), %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
xorl %edx, %edx
callq 0x223ea8
leaq 0x2510ab(%rip), %rsi    # 0x3c8aa9
movq %r14, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0xfcb67
jmp 0x17796a
callq 0x5541a