LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_get_expr_kind
static void ext_get_expr_kind(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("get_expr_kind");
	
	script_value_t* exp_val = script_get_arg(args, 0);
	expr_t* exp = exp_val->nat.value;
	
	script_push_number(script, exp->type);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
cmpl $0x0, 0x10182(%rip)     # 0x16248
js 0x611e
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movq 0x20(%rax), %rax
movl 0x28(%rax), %eax
cvtsi2sd %rax, %xmm0
movsd %xmm0, -0x10(%rbp)
movq %rbx, %rdi
movl $0x3, %esi
callq 0x3322
movsd -0x10(%rbp), %xmm0
movsd %xmm0, 0x20(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x9bec(%rip), %rsi      # 0xfd11
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_create_bool_type
static void ext_create_bool_type(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("create_bool_type");

	g_file = script->cur_file;
	g_line = script->cur_line;
	
	script_push_native(script, create_type_tag(script, TAG_BOOL), NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
cmpl $0x0, 0x10108(%rip)     # 0x16248
js 0x61a3
movq 0x128(%rbx), %rax
movq %rax, 0x10008(%rip)     # 0x16158
movl 0x124(%rbx), %eax
movl %eax, 0xfff4(%rip)      # 0x16150
movq %rbx, %rdi
movl $0x2, %esi
callq 0x8156
movq %rax, %r14
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x9bab(%rip), %rsi      # 0xfd55
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_create_char_type
static void ext_create_char_type(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("create_char_type");

	g_file = script->cur_file;
	g_line = script->cur_line;

	script_push_native(script, create_type_tag(script, TAG_CHAR), NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
cmpl $0x0, 0x10083(%rip)     # 0x16248
js 0x6228
movq 0x128(%rbx), %rax
movq %rax, 0xff83(%rip)      # 0x16158
movl 0x124(%rbx), %eax
movl %eax, 0xff6f(%rip)      # 0x16150
movq %rbx, %rdi
movl $0x3, %esi
callq 0x8156
movq %rax, %r14
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x9b6d(%rip), %rsi      # 0xfd9c
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_create_number_type
static void ext_create_number_type(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("create_number_type");

	g_file = script->cur_file;
	g_line = script->cur_line;

	script_push_native(script, create_type_tag(script, TAG_NUMBER), NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
cmpl $0x0, 0xfffe(%rip)      # 0x16248
js 0x62ad
movq 0x128(%rbx), %rax
movq %rax, 0xfefe(%rip)      # 0x16158
movl 0x124(%rbx), %eax
movl %eax, 0xfeea(%rip)      # 0x16150
movq %rbx, %rdi
movl $0x4, %esi
callq 0x8156
movq %rax, %r14
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x9b2f(%rip), %rsi      # 0xfde3
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_create_string_type
static void ext_create_string_type(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("create_string_type");

	g_file = script->cur_file;
	g_line = script->cur_line;

	script_push_native(script, create_type_tag(script, TAG_STRING), NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
cmpl $0x0, 0xff79(%rip)      # 0x16248
js 0x6332
movq 0x128(%rbx), %rax
movq %rax, 0xfe79(%rip)      # 0x16158
movl 0x124(%rbx), %eax
movl %eax, 0xfe65(%rip)      # 0x16150
movq %rbx, %rdi
movl $0x5, %esi
callq 0x8156
movq %rax, %r14
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x9af3(%rip), %rsi      # 0xfe2c
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_create_function_type
static void ext_create_function_type(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("create_function_type");

	g_file = script->cur_file;
	g_line = script->cur_line;

	script_value_t* return_type_val = script_get_arg(args, 0);
	script_value_t* arg_types_val = script_get_arg(args, 1);
	
	type_tag_t* tag = create_type_tag(script, TAG_FUNC);
	tag->func.return_type = return_type_val->nat.value;
	for(int i = 0; i < arg_types_val->array.length; ++i)
	{
		script_value_t* arg_type_val = vec_get_value(&arg_types_val->array, i, script_value_t*);
		type_tag_t* arg_tag = arg_type_val->nat.value;
		
		vec_push_back(&tag->func.arg_types, &arg_tag);
	}
	
	script_push_native(script, tag, NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdi, %r12
cmpl $0x0, 0xfeea(%rip)      # 0x16248
js 0x644b
movq %rsi, %r14
movq 0x128(%r12), %rax
movq %rax, 0xfde2(%rip)      # 0x16158
movl 0x124(%r12), %eax
movl %eax, 0xfdcc(%rip)      # 0x16150
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %r15
movl $0x1, %esi
movq %r14, %rdi
callq 0xdcf3
movq (%rax), %rbx
movq %r12, -0x38(%rbp)
movq %r12, %rdi
movl $0x6, %esi
callq 0x8156
movq 0x20(%r15), %rcx
movq %rax, -0x30(%rbp)
movq %rcx, 0x48(%rax)
cmpq $0x0, 0x30(%rbx)
je 0x6402
movq -0x30(%rbp), %r15
addq $0x28, %r15
leaq 0x20(%rbx), %r12
xorl %r13d, %r13d
leaq -0x40(%rbp), %r14
movq %r12, %rdi
movq %r13, %rsi
callq 0xdcf3
movq (%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x40(%rbp)
movq %r15, %rdi
movq %r14, %rsi
callq 0xdd50
incq %r13
cmpq %r13, 0x30(%rbx)
ja 0x63d8
movq -0x38(%rbp), %rbx
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq -0x30(%rbp), %rcx
movq %rcx, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x9a23(%rip), %rsi      # 0xfe75
movq %r12, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_create_array_type
static void ext_create_array_type(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("create_array_type");

	g_file = script->cur_file;
	g_line = script->cur_line;

	script_value_t* contained_val = script_get_arg(args, 0);
	type_tag_t* contained = contained_val->nat.value;
	
	type_tag_t* array = create_type_tag(script, TAG_ARRAY);
	array->contained = contained;
	
	script_push_native(script, array, NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
cmpl $0x0, 0xfdd8(%rip)      # 0x16248
js 0x64ee
movq 0x128(%rbx), %rax
movq %rax, 0xfcd8(%rip)      # 0x16158
movl 0x124(%rbx), %eax
movl %eax, 0xfcc4(%rip)      # 0x16150
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movq 0x20(%rax), %r15
movq %rbx, %rdi
movl $0x7, %esi
callq 0x8156
movq %rax, %r14
movq %r15, 0x28(%rax)
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x99cb(%rip), %rsi      # 0xfec0
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_create_native_type
static void ext_create_native_type(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("create_native_type");

	g_file = script->cur_file;
	g_line = script->cur_line;

	script_push_native(script, create_type_tag(script, TAG_NATIVE), NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
cmpl $0x0, 0xfd38(%rip)      # 0x16248
js 0x6573
movq 0x128(%rbx), %rax
movq %rax, 0xfc38(%rip)      # 0x16158
movl 0x124(%rbx), %eax
movl %eax, 0xfc24(%rip)      # 0x16150
movq %rbx, %rdi
movl $0x8, %esi
callq 0x8156
movq %rax, %r14
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x998e(%rip), %rsi      # 0xff08
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_create_dynamic_type
static void ext_create_dynamic_type(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("create_dynamic_type");

	g_file = script->cur_file;
	g_line = script->cur_line;

	script_push_native(script, create_type_tag(script, TAG_DYNAMIC), NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
cmpl $0x0, 0xfcb3(%rip)      # 0x16248
js 0x65f8
movq 0x128(%rbx), %rax
movq %rax, 0xfbb3(%rip)      # 0x16158
movl 0x124(%rbx), %eax
movl %eax, 0xfb9f(%rip)      # 0x16150
movq %rbx, %rdi
movl $0x1, %esi
callq 0x8156
movq %rax, %r14
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x9952(%rip), %rsi      # 0xff51
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_create_void_type
static void ext_create_void_type(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("create_void_type");

	g_file = script->cur_file;
	g_line = script->cur_line;

	script_push_native(script, create_type_tag(script, TAG_VOID), NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
cmpl $0x0, 0xfc2e(%rip)      # 0x16248
js 0x667a
movq 0x128(%rbx), %rax
movq %rax, 0xfb2e(%rip)      # 0x16158
movl 0x124(%rbx), %eax
movl %eax, 0xfb1a(%rip)      # 0x16150
movq %rbx, %rdi
xorl %esi, %esi
callq 0x8156
movq %rax, %r14
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x991a(%rip), %rsi      # 0xff9b
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_compare_types
static void ext_compare_types(script_t* script, vector_t* args)
{
	script_value_t* a_val = script_get_arg(args, 0);
	script_value_t* b_val = script_get_arg(args, 1);
	
	type_tag_t* a = a_val->nat.value;
	type_tag_t* b = b_val->nat.value;

	script_push_bool(script, compare_type_tags(a, b));
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %r15
movl $0x1, %esi
movq %r14, %rdi
callq 0xdcf3
movq (%rax), %rax
movq 0x20(%r15), %rdi
movq 0x20(%rax), %rsi
callq 0x8250
movl $0x1, %ecx
movl %ecx, 0xfabc(%rip)      # 0x1618c
leaq 0xfaa9(%rip), %rdx      # 0x16180
movb $0x1, 0xfac2(%rip)      # 0x161a0
movl %ecx, 0xfae8(%rip)      # 0x161cc
leaq 0xfad5(%rip), %rsi      # 0x161c0
movb $0x0, 0xfaee(%rip)      # 0x161e0
testb %al, %al
cmovneq %rdx, %rsi
movq %rbx, %rdi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_get_array_type_contained_type
static void ext_get_array_type_contained_type(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("get_array_type_contained_type");

	script_value_t* type_val = script_get_arg(args, 0);
	type_tag_t* array_tag = type_val->nat.value;

	script_push_native(script, array_tag->contained, NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
cmpl $0x0, 0xfb1d(%rip)      # 0x16248
js 0x6779
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %r14
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x99c0(%rip), %rsi      # 0x10140
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_reference_func
static void ext_reference_func(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("reference_func");
	
	script_value_t* name_val = script_get_arg(args, 0);
	const char* name = name_val->string.data;
	
	func_decl_t* decl = reference_function(script, name);
	if(decl)
		script_push_native(script, decl, NULL, NULL);
	else
		script_push_null(script);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
cmpl $0x0, 0xfaad(%rip)      # 0x16248
js 0x680b
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movq 0x28(%rax), %rsi
movq %rbx, %rdi
callq 0x846c
testq %rax, %rax
je 0x67de
movq %rax, %r14
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
jmp 0x67f2
movl $0x0, 0xfa24(%rip)      # 0x1620c
leaq 0xfa11(%rip), %rsi      # 0x16200
movq %rbx, %rdi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x9982(%rip), %rsi      # 0x10194
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_get_func_decl_name
static void ext_get_func_decl_name(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("get_func_decl_name");
	
	script_value_t* decl_val = script_get_arg(args, 0);
	func_decl_t* decl = decl_val->nat.value;
	
	script_push_cstr(script, decl->name);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
cmpl $0x0, 0xfa1c(%rip)      # 0x16248
js 0x6861
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movq 0x20(%rax), %rax
movq 0x18(%rax), %rsi
movq %rbx, %rdi
callq 0x359a
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x9971(%rip), %rsi      # 0x101d9
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_declare_variable
static void ext_declare_variable(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("declare_variable");
	
	script_value_t* name_val = script_get_arg(args, 0);
	script_value_t* type_val = script_get_arg(args, 1);
	script_value_t* func_decl_val = script_get_arg(args, 2);
	script_value_t* scope_val = script_get_arg(args, 3);
	
	const char* name = name_val->string.data;
	type_tag_t* tag = type_val->nat.value;
	func_decl_t* decl = NULL;
	int scope = 0;
	
	if(func_decl_val->type != VAL_NULL)
	{
		decl = func_decl_val->nat.value;
		scope = (int)scope_val->number;
	}

	g_cur_func = decl;
	g_scope = scope;
	
	script_push_native(script, declare_variable(script, name, tag), NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
cmpl $0x0, 0xf9be(%rip)      # 0x16248
js 0x694a
movq %rsi, %r14
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %r13
movl $0x1, %esi
movq %r14, %rdi
callq 0xdcf3
movq (%rax), %r15
movl $0x2, %esi
movq %r14, %rdi
callq 0xdcf3
movq (%rax), %r12
movl $0x3, %esi
movq %r14, %rdi
callq 0xdcf3
xorl %edi, %edi
movq 0x28(%r13), %rsi
movq 0x20(%r15), %rdx
cmpl $0x0, 0xc(%r12)
movl $0x0, %ecx
je 0x68f1
movq (%rax), %rax
movq 0x20(%r12), %rdi
cvttsd2si 0x20(%rax), %ecx
movq %rdi, 0xf960(%rip)      # 0x16258
movl %ecx, 0xf952(%rip)      # 0x16250
movq %rbx, %rdi
callq 0x8516
movq %rax, %r14
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x98d1(%rip), %rsi      # 0x10222
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_reference_variable
static void ext_reference_variable(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("reference_variable");
	
	script_value_t* name_val = script_get_arg(args, 0);
	script_value_t* func_decl_val = script_get_arg(args, 1);
	script_value_t* scope_val = script_get_arg(args, 2);
	
	const char* name = name_val->string.data;
	func_decl_t* decl = NULL;
	int scope = 0;
	
	if(func_decl_val->type != VAL_NULL)
	{
		decl = func_decl_val->nat.value;
		scope = (int)scope_val->number;
	}

	g_cur_func = decl;
	g_scope = scope;
	
	var_decl_t* vdecl = reference_variable(script, name);
	if(!vdecl)
		error_exit_script(script, "Attempted to reference non-existent variable '%s'\n", name);
	else
		script_push_native(script, vdecl, NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
cmpl $0x0, 0xf8d5(%rip)      # 0x16248
js 0x6a2a
movq %rsi, %r14
xorl %r15d, %r15d
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %r13
movl $0x1, %esi
movq %r14, %rdi
callq 0xdcf3
movq (%rax), %r12
movl $0x2, %esi
movq %r14, %rdi
callq 0xdcf3
movq 0x28(%r13), %r14
cmpl $0x0, 0xc(%r12)
movl $0x0, %ecx
je 0x69c8
movq (%rax), %rax
movq 0x20(%r12), %rcx
cvttsd2si 0x20(%rax), %r15d
movq %rcx, 0xf889(%rip)      # 0x16258
movl %r15d, 0xf87a(%rip)     # 0x16250
movq %rbx, %rdi
movq %r14, %rsi
callq 0x863a
testq %rax, %rax
je 0x6a3b
movq %rax, %r15
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r15, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x9876(%rip), %rsi      # 0x102a7
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
leaq 0x98ae(%rip), %rsi      # 0x102f0
movq %rbx, %rdi
movq %r14, %rdx
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_parse_code
static void ext_parse_code(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("parse_code");
	
	script_module_t* module = vec_get(&script->modules, g_cur_module_index);
	script_value_t* code_val = script_get_arg(args, 0);
	
	const char* code = code_val->string.data;

	g_file = "parse_code";
	g_code = code;
	g_line = 1;

	vector_t expr_list;
	vec_init(&expr_list, sizeof(expr_t*));

	parse_program(script, &expr_list);

	vector_t expr_nat_list;
	vec_init(&expr_nat_list, sizeof(script_value_t*));

	for (int i = 0; i < expr_list.length; ++i)
	{
		expr_t* exp = vec_get_value(&expr_list, i, expr_t*);

		script_value_t* val = new_value(script, VAL_NATIVE);
		
		val->nat.on_mark = NULL;
		val->nat.on_delete = NULL;
		
		val->nat.value = exp;

		vec_push_back(&expr_nat_list, &val);
	}

	vec_destroy(&expr_list);

	script_push_premade_array(script, expr_nat_list);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
movq %rsi, %r14
movq %rdi, %rbx
movslq 0xf7db(%rip), %rsi      # 0x16248
testq %rsi, %rsi
js 0x6b95
leaq 0x2b8(%rbx), %rdi
callq 0xdcf3
movq %r14, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movq 0x28(%rax), %rax
leaq 0x8eeb(%rip), %rcx      # 0xf985
movq %rcx, 0xf6b7(%rip)      # 0x16158
movq %rax, 0xf798(%rip)      # 0x16240
movl $0x1, 0xf69e(%rip)      # 0x16150
leaq -0x90(%rbp), %r14
movl $0x8, %esi
movq %r14, %rdi
callq 0xda7c
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3c5e
leaq -0x70(%rbp), %rdi
movl $0x8, %esi
callq 0xda7c
cmpq $0x0, 0x10(%r14)
je 0x6b33
xorl %r14d, %r14d
leaq -0x70(%rbp), %r12
leaq -0x50(%rbp), %r13
leaq -0x90(%rbp), %rdi
movq %r14, %rsi
callq 0xdcf3
movq (%rax), %r15
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %rax, -0x50(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %r15, 0x20(%rax)
movq %r12, %rdi
movq %r13, %rsi
callq 0xdd50
incq %r14
cmpq %r14, -0x80(%rbp)
ja 0x6af1
leaq -0x90(%rbp), %rdi
callq 0xdfb9
movups -0x70(%rbp), %xmm0
movups -0x60(%rbp), %xmm1
movaps %xmm1, -0x40(%rbp)
movaps %xmm0, -0x50(%rbp)
movq %rbx, %rdi
movl $0x6, %esi
callq 0x3322
movaps -0x50(%rbp), %xmm0
movaps -0x40(%rbp), %xmm1
movups %xmm0, 0x20(%rax)
movups %xmm1, 0x30(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x9787(%rip), %rsi      # 0x10323
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_make_num_expr
static void ext_make_num_expr(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("make_num_expr");
	
	script_value_t* val = script_get_arg(args, 0);
	double number = val->number;
	
	expr_t* exp = create_expr(EXP_NUMBER);
	exp->number_index = register_number(script, number);
	
	script_push_native(script, exp, NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
cmpl $0x0, 0xf68d(%rip)      # 0x16248
js 0x6c2d
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movsd 0x20(%rax), %xmm0
movsd %xmm0, -0x18(%rbp)
movl $0x9, %edi
callq 0x8840
movq %rax, %r14
movq %rbx, %rdi
movsd -0x18(%rbp), %xmm0
callq 0x88a2
movl %eax, 0x38(%r14)
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x9730(%rip), %rsi      # 0x10364
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_make_string_expr
static void ext_make_string_expr(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("make_num_expr");
	
	script_value_t* val = script_get_arg(args, 0);
	const char* string = val->string.data;
	
	expr_t* exp = create_expr(EXP_STRING);
	exp->string_index = register_string(script, string);
	
	script_push_native(script, exp, NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
cmpl $0x0, 0xf5f6(%rip)      # 0x16248
js 0x6cbe
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movq 0x28(%rax), %r14
movl $0xa, %edi
callq 0x8840
movq %rax, %r15
movq %rbx, %rdi
movq %r14, %rsi
callq 0x8918
movl %eax, 0x38(%r15)
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r15, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x969f(%rip), %rsi      # 0x10364
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_make_var_expr
static void ext_make_var_expr(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("make_var_expr");
	
	script_value_t* decl_val = script_get_arg(args, 0);
	var_decl_t* decl = decl_val->nat.value;
	
	expr_t* exp = create_expr(EXP_VAR);
	
	exp->varx.decl = decl;
	exp->varx.name = estrdup(decl->name);
	
	script_push_native(script, exp, NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
cmpl $0x0, 0xf565(%rip)      # 0x16248
js 0x6d51
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movq 0x20(%rax), %r15
movl $0x5, %edi
callq 0x8840
movq %rax, %r14
movq %r15, 0x40(%rax)
movq 0x10(%r15), %rdi
callq 0x2817
movq %rax, 0x38(%r14)
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x9650(%rip), %rsi      # 0x103a8
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_make_undeclared_var_expr
static void ext_make_undeclared_var_expr(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("make_undeclared_var_expr");
	
	script_value_t* name_val = script_get_arg(args, 0);
	expr_t* exp = create_expr(EXP_VAR);
	
	exp->varx.decl = NULL;
	exp->varx.name = estrdup(name_val->string.data);
	
	script_push_native(script, exp, NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
cmpl $0x0, 0xf4d2(%rip)      # 0x16248
js 0x6de4
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %r15
movl $0x5, %edi
callq 0x8840
movq %rax, %r14
movq $0x0, 0x40(%rax)
movq 0x28(%r15), %rdi
callq 0x2817
movq %rax, 0x38(%r14)
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x9601(%rip), %rsi      # 0x103ec
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_make_write_expr
static void ext_make_write_expr(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("make_write_expr");
	
	script_value_t* val = script_get_arg(args, 0);
	
	expr_t* exp = create_expr(EXP_WRITE);
	exp->write = val->nat.value;
	
	script_push_native(script, exp, NULL, NULL);
	script_return_top(script); 
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
cmpl $0x0, 0xf43f(%rip)      # 0x16248
js 0x6e6a
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %r15
movl $0xc, %edi
callq 0x8840
movq %rax, %r14
movq 0x20(%r15), %rax
movq %rax, 0x38(%r14)
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x95ca(%rip), %rsi      # 0x1043b
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_make_bin_expr
static void ext_make_bin_expr(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("make_bin_expr");
	
	script_value_t* lhs_val = script_get_arg(args, 0);
	script_value_t* rhs_val = script_get_arg(args, 1);
	script_value_t* op_val = script_get_arg(args, 2);

	expr_t* lhs = lhs_val->nat.value;
	expr_t* rhs = rhs_val->nat.value;
	const char* op = op_val->string.data;
	
	expr_t* exp = create_expr(EXP_BINARY);
	exp->binx.lhs = lhs;
	exp->binx.rhs = rhs;
	
	if(strcmp(op, "=") == 0) exp->binx.op = TOK_ASSIGN;
	else error_exit_script(script, "Invalid operator '%s' given to 'make_bin_expr'\n", op);
	
	script_push_native(script, exp, NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
cmpl $0x0, 0xf3b5(%rip)      # 0x16248
js 0x6f54
movq %rsi, %r14
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %r15
movl $0x1, %esi
movq %r14, %rdi
callq 0xdcf3
movq (%rax), %r12
movl $0x2, %esi
movq %r14, %rdi
callq 0xdcf3
movq (%rax), %rax
movq 0x20(%r15), %r13
movq 0x20(%r12), %r12
movq 0x28(%rax), %r14
movl $0xe, %edi
callq 0x8840
movq %r13, 0x38(%rax)
movq %r12, 0x40(%rax)
cmpb $0x3d, (%r14)
jne 0x6f40
cmpb $0x0, 0x1(%r14)
jne 0x6f40
movq %rax, %r15
movl $0x24, 0x48(%rax)
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r15, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x957e(%rip), %rsi      # 0x104c5
movq %rbx, %rdi
movq %r14, %rdx
xorl %eax, %eax
callq 0x3224
leaq 0x9526(%rip), %rsi      # 0x10481
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_make_call_expr
static void ext_make_call_expr(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("make_call_expr");
	
	script_value_t* func_val = script_get_arg(args, 0);
	script_value_t* args_val = script_get_arg(args, 1);
	
	expr_t* exp = create_expr(EXP_CALL);
	vec_init(&exp->callx.args, sizeof(expr_t*));
	exp->callx.func = func_val->nat.value;
	
	for(int i = 0; i < args_val->array.length; ++i)
	{
		script_value_t* arg_exp_val = vec_get_value(&args_val->array, i, script_value_t*);
		vec_push_back(&exp->callx.args, &arg_exp_val->nat.value);
	}
	
	script_push_native(script, exp, NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, -0x30(%rbp)
cmpl $0x0, 0xf2ca(%rip)      # 0x16248
js 0x7041
movq %rsi, %r14
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %r12
movl $0x1, %esi
movq %r14, %rdi
callq 0xdcf3
movq (%rax), %rbx
movl $0xf, %edi
callq 0x8840
movq %rax, %r14
leaq 0x40(%rax), %r15
movl $0x8, %esi
movq %r15, %rdi
callq 0xda7c
movq 0x20(%r12), %rax
movq %rax, 0x38(%r14)
cmpq $0x0, 0x30(%rbx)
je 0x6ffc
leaq 0x20(%rbx), %r12
xorl %r13d, %r13d
movq %r12, %rdi
movq %r13, %rsi
callq 0xdcf3
movq (%rax), %rsi
addq $0x20, %rsi
movq %r15, %rdi
callq 0xdd50
incq %r13
cmpq %r13, 0x30(%rbx)
ja 0x6fd9
movq -0x30(%rbp), %rbx
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x94ad(%rip), %rsi      # 0x104f5
movq -0x30(%rbp), %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_make_array_index_expr
static void ext_make_array_index_expr(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("make_array_index_expr");
	
	script_value_t* array_exp_val = script_get_arg(args, 0);
	script_value_t* index_exp_val = script_get_arg(args, 1);
	
	expr_t* exp = create_expr(EXP_ARRAY_INDEX);
	exp->array_index.array = array_exp_val->nat.value;
	exp->array_index.index = index_exp_val->nat.value;
	
	script_push_native(script, exp, NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdi, %rbx
cmpl $0x0, 0xf1e0(%rip)      # 0x16248
js 0x70e3
movq %rsi, %r14
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %r15
movl $0x1, %esi
movq %r14, %rdi
callq 0xdcf3
movq (%rax), %r12
movl $0x6, %edi
callq 0x8840
movq %rax, %r14
movq 0x20(%r15), %rax
movq %rax, 0x38(%r14)
movq 0x20(%r12), %rax
movq %rax, 0x40(%r14)
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x9450(%rip), %rsi      # 0x1053a
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_get_func_expr_decl
static void ext_get_func_expr_decl(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("get_func_expr_decl");
	
	script_value_t* exp_val = script_get_arg(args, 0);
	expr_t* exp = exp_val->nat.value;
	
	if(exp->type != EXP_FUNC) error_exit_script(script, "Passed non-func expression into 'get_func_expr_decl'\n");
	
	script_push_native(script, exp->funcx.decl, NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
cmpl $0x0, 0xf143(%rip)      # 0x16248
js 0x7159
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movq 0x20(%rax), %rax
cmpl $0x19, 0x28(%rax)
jne 0x7162
movq 0x38(%rax), %r14
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x9426(%rip), %rsi      # 0x10586
jmp 0x7169
leaq 0x9466(%rip), %rsi      # 0x105cf
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_get_expr_type
static void ext_get_expr_type(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("get_expr_type");

	script_value_t* exp_val = script_get_arg(args, 0);
	expr_t* exp = exp_val->nat.value;

	// TODO: make script_create_native etc
	script_push_native(script, exp->tag, NULL, NULL);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
cmpl $0x0, 0xf0c4(%rip)      # 0x16248
js 0x71d2
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movq 0x20(%rax), %rax
movq 0x30(%rax), %r14
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x942c(%rip), %rsi      # 0x10605
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_get_var_expr_name
static void ext_get_var_expr_name(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("get_var_expr_name");

	script_value_t* exp_val = script_get_arg(args, 0);
	expr_t* exp = exp_val->nat.value;

	script_push_cstr(script, exp->varx.name);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
cmpl $0x0, 0xf055(%rip)      # 0x16248
js 0x7228
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movq 0x20(%rax), %rax
movq 0x38(%rax), %rsi
movq %rbx, %rdi
callq 0x359a
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x941a(%rip), %rsi      # 0x10649
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_resolve_expr_symbols
static void ext_resolve_expr_symbols(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("resolve_expr_symbols");

	script_value_t* exp_val = script_get_arg(args, 0);
	resolve_symbols(script, exp_val->nat.value);

	script_push_bool(script, !g_has_error);
	g_has_error = 0;
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
cmpl $0x0, 0xeffe(%rip)      # 0x16248
js 0x72c3
xorl %r14d, %r14d
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movq 0x20(%rax), %rsi
movq %rbx, %rdi
callq 0x89c7
movl $0x1, %eax
movl %eax, 0xef19(%rip)      # 0x1618c
leaq 0xef06(%rip), %rcx      # 0x16180
movb $0x1, 0xef1f(%rip)      # 0x161a0
movl %eax, 0xef45(%rip)      # 0x161cc
leaq 0xef32(%rip), %rsi      # 0x161c0
movb %r14b, 0xef4b(%rip)     # 0x161e0
cmpb %r14b, 0xefb0(%rip)     # 0x1624c
cmoveq %rcx, %rsi
movq %rbx, %rdi
callq 0x31a4
movb %r14b, 0xef9d(%rip)     # 0x1624c
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x93c7(%rip), %rsi      # 0x10691
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_resolve_expr_types
static void ext_resolve_expr_types(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("resolve_expr_types");

	script_value_t* exp_val = script_get_arg(args, 0);
	resolve_type_tags(script, exp_val->nat.value);
	
	script_push_bool(script, !g_has_error);
	g_has_error = 0;
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
cmpl $0x0, 0xef63(%rip)      # 0x16248
js 0x735e
xorl %r14d, %r14d
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movq 0x20(%rax), %rsi
movq %rbx, %rdi
callq 0x8d6c
movl $0x1, %eax
movl %eax, 0xee7e(%rip)      # 0x1618c
leaq 0xee6b(%rip), %rcx      # 0x16180
movb $0x1, 0xee84(%rip)      # 0x161a0
movl %eax, 0xeeaa(%rip)      # 0x161cc
leaq 0xee97(%rip), %rsi      # 0x161c0
movb %r14b, 0xeeb0(%rip)     # 0x161e0
cmpb %r14b, 0xef15(%rip)     # 0x1624c
cmoveq %rcx, %rsi
movq %rbx, %rdi
callq 0x31a4
movb %r14b, 0xef02(%rip)     # 0x1624c
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x93ed(%rip), %rsi      # 0x10752
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_add_expr_to_module
static void ext_add_expr_to_module(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("add_expr_to_module");
	
	script_value_t* mod_val = script_get_arg(args, 0);
	script_value_t* exp_val = script_get_arg(args, 1);
	
	int module_index = (int)mod_val->number;
	expr_t* exp = exp_val->nat.value;
	
	script_module_t* module = vec_get(&script->modules, module_index);
	vec_push_back(&module->expr_list, &exp);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
cmpl $0x0, 0xeec5(%rip)      # 0x16248
js 0x73df
movq %rsi, %r14
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %r15
movl $0x1, %esi
movq %r14, %rdi
callq 0xdcf3
movq (%rax), %rax
cvttsd2si 0x20(%r15), %ecx
movq 0x20(%rax), %rax
leaq -0x20(%rbp), %r14
movq %rax, (%r14)
addq $0x2b8, %rbx            # imm = 0x2B8
movslq %ecx, %rsi
movq %rbx, %rdi
callq 0xdcf3
leaq 0x50(%rax), %rdi
movq %r14, %rsi
callq 0xdd50
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x98d2(%rip), %rsi      # 0x10cb8
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_insert_expr_into_module
static void ext_insert_expr_into_module(script_t* script, vector_t* args)
{
	EXT_CHECK_IF_CT("insert_expr_into_module");
	
	script_value_t* mod_val = script_get_arg(args, 0);
	script_value_t* exp_val = script_get_arg(args, 1);
	script_value_t* loc_val = script_get_arg(args, 2);
	
	int module_index = (int)mod_val->number;
	expr_t* exp = exp_val->nat.value;
	int location = (int)loc_val->number;
	
	script_module_t* module = vec_get(&script->modules, module_index);
	vec_insert(&module->expr_list, &exp, location);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
cmpl $0x0, 0xee3f(%rip)      # 0x16248
js 0x7481
movq %rsi, %r14
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %r15
movl $0x1, %esi
movq %r14, %rdi
callq 0xdcf3
movq (%rax), %r12
movl $0x2, %esi
movq %r14, %rdi
callq 0xdcf3
cvttsd2si 0x20(%r15), %ecx
movq (%rax), %rax
movq 0x20(%r12), %rdx
leaq -0x28(%rbp), %r14
movq %rdx, (%r14)
cvttsd2si 0x20(%rax), %r15d
addq $0x2b8, %rbx            # imm = 0x2B8
movslq %ecx, %rsi
movq %rbx, %rdi
callq 0xdcf3
leaq 0x50(%rax), %rdi
movslq %r15d, %rdx
movq %r14, %rsi
callq 0xde03
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x9879(%rip), %rsi      # 0x10d01
movq %rbx, %rdi
xorl %eax, %eax
callq 0x3224
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_make_array_of_length
static void ext_make_array_of_length(script_t* script, vector_t* args)
{
	script_value_t* val = script_get_arg(args, 0);
	int length = (int)val->number;
	
	vector_t array;
	vec_init(&array, sizeof(script_value_t*));
	script_value_t* null_value = NULL;
	vec_resize(&array, length, &null_value);
	
	script_push_premade_array(script, array);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x58, %rsp
movq %rdi, %rbx
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
cvttsd2si 0x20(%rax), %r15d
leaq -0x68(%rbp), %r14
movl $0x8, %esi
movq %r14, %rdi
callq 0xda7c
leaq -0x48(%rbp), %rdx
movq $0x0, (%rdx)
movslq %r15d, %rsi
movq %r14, %rdi
callq 0xdc8d
movups (%r14), %xmm0
movups 0x10(%r14), %xmm1
movaps %xmm1, -0x30(%rbp)
movaps %xmm0, -0x40(%rbp)
movq %rbx, %rdi
movl $0x6, %esi
callq 0x3322
movaps -0x40(%rbp), %xmm0
movaps -0x30(%rbp), %xmm1
movups %xmm0, 0x20(%rax)
movups %xmm1, 0x30(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x58, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_array_push
static void ext_array_push(script_t* script, vector_t* args)
{
	script_value_t* array_val = script_get_arg(args, 0);
	script_value_t* value_val = script_get_arg(args, 1);

	vector_t* array = &array_val->array;
	
	vec_push_back(array, &value_val);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rsi, %rbx
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %r14
movl $0x1, %esi
movq %rbx, %rdi
callq 0xdcf3
movq (%rax), %rax
leaq -0x18(%rbp), %rsi
movq %rax, (%rsi)
addq $0x20, %r14
movq %r14, %rdi
callq 0xdd50
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_array_pop
static void ext_array_pop(script_t* script, vector_t* args)
{
	script_value_t* array_val = script_get_arg(args, 0);
	script_value_t* value;

	vector_t* array = &array_val->array;

	vec_pop_back(array, &value);

	push_value(script, value);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rdi
addq $0x20, %rdi
leaq -0x18(%rbp), %r14
movq %r14, %rsi
callq 0xddc1
movq (%r14), %rsi
movq %rbx, %rdi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_number_to_string
static void ext_number_to_string(script_t* script, vector_t* args)
{
	script_value_t* val = script_get_arg(args, 0);
	
	static char buf[256]; // TODO: don't use a magic number here
	sprintf(buf, "%g", val->number);
	
	script_push_cstr(script, buf);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movsd 0x20(%rax), %xmm0
leaq 0xebd1(%rip), %r14      # 0x16260
leaq 0x96b9(%rip), %rsi      # 0x10d4f
movq %r14, %rdi
movb $0x1, %al
callq 0x2230
movq %rbx, %rdi
movq %r14, %rsi
callq 0x359a
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_create_u8_buffer
static void ext_create_u8_buffer(script_t* script, vector_t* args)
{
	vector_t* buf = emalloc(sizeof(vector_t));
	vec_init(buf, sizeof(uint8_t));
	script_push_native(script, buf, NULL, delete_u8_buffer);
	script_return_top(script); 
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
movl $0x20, %edi
callq 0x21c0
testq %rax, %rax
je 0x78af
movq %rax, %r14
movl $0x1, %esi
movq %rax, %rdi
callq 0xda7c
movq %rbx, %rdi
movl $0x8, %esi
callq 0x3322
movq %r14, 0x20(%rax)
movq $0x0, 0x28(%rax)
leaq 0x20e6(%rip), %rcx      # 0x9972
movq %rcx, 0x30(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0xa3e1(%rip), %rdi      # 0x11c97
xorl %eax, %eax
callq 0x388c
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_u8_buffer_push
static void ext_u8_buffer_push(script_t* script, vector_t* args)
{
	script_native_t* nat = &script_get_arg(args, 0)->nat;
	script_value_t* val = script_get_arg(args, 1);
	
	uint8_t value = (uint8_t)val->number;
	
	vec_push_back(nat->value, &value);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rsi, %rbx
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %r14
movl $0x1, %esi
movq %rbx, %rdi
callq 0xdcf3
movq (%rax), %rax
cvttsd2si 0x20(%rax), %eax
leaq -0x11(%rbp), %rsi
movb %al, (%rsi)
movq 0x20(%r14), %rdi
callq 0xdd50
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_u8_buffer_pop
static void ext_u8_buffer_pop(script_t* script, vector_t* args)
{
	script_native_t* nat = &script_get_arg(args, 0)->nat;
	uint8_t value;
	vec_pop_back(nat->value, &value);
	
	script_push_number(script, value);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movq 0x20(%rax), %rdi
leaq -0x11(%rbp), %r14
movq %r14, %rsi
callq 0xddc1
movzbl (%r14), %eax
cvtsi2sd %eax, %xmm0
movsd %xmm0, -0x20(%rbp)
movq %rbx, %rdi
movl $0x3, %esi
callq 0x3322
movsd -0x20(%rbp), %xmm0
movsd %xmm0, 0x20(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x31a4
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/goodpaul6[P]generic/script.c
// Function: ext_u8_buffer_to_string
static void ext_u8_buffer_to_string(script_t* script, vector_t* args)
{
	script_native_t* nat = &script_get_arg(args, 0)->nat;
	vector_t* buf = nat->value;
	unsigned char null_terminator = '\0';
	vec_push_back(buf, &null_terminator);
	script_string_t str = { buf->length - 1, (char*)buf->data };
	
	script_push_string(script, str);
	script_return_top(script);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
movq %rsi, %rdi
xorl %esi, %esi
callq 0xdcf3
movq (%rax), %rax
movq 0x20(%rax), %r14
leaq -0x11(%rbp), %rsi
movb $0x0, (%rsi)
movq %r14, %rdi
callq 0xdd50
movl 0x10(%r14), %esi
decl %esi
movq (%r14), %rdx
movq %rbx, %rdi
callq 0x3602
movq %rbx, %rdi
callq 0x312b
movq %rax, 0x160(%rbx)
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq