// File: /workspace/github_c_makefile_star2_O3/lucvoo[P]sparse-dev/ast-inspect.c
// Function: inspect_statement
void inspect_statement(AstNode *node)
{
	struct statement *stmt = node->ptr;
	node->text = g_strdup_printf("%s %s:", node->text, statement_type_name(stmt->type));
	switch (stmt->type) {
		case STMT_COMPOUND:
			ast_append_child(node, "stmts:", stmt->stmts, inspect_statement_list);
			break;
		case STMT_EXPRESSION:
			ast_append_child(node, "expression:", stmt->expression, inspect_expression);
			break;
		case STMT_IF:
			ast_append_child(node, "conditional:", stmt->if_conditional, inspect_expression);
			ast_append_child(node, "if_true:", stmt->if_true, inspect_statement);
			ast_append_child(node, "if_false:", stmt->if_false, inspect_statement);
			break;
		case STMT_ITERATOR:
			ast_append_child(node, "break:", stmt->iterator_break, inspect_symbol);
			ast_append_child(node, "continue:", stmt->iterator_continue, inspect_symbol);
			ast_append_child(node, "pre_statement:", stmt->iterator_pre_statement,
					 inspect_statement);
			ast_append_child(node, "statement:", stmt->iterator_statement,
					 inspect_statement);
			ast_append_child(node, "post_statement:", stmt->iterator_post_statement,
					 inspect_statement);
			break;

		case STMT_SWITCH:
			ast_append_child(node, "switch_expression:", stmt->switch_expression, inspect_expression);
			ast_append_child(node, "switch_statement:", stmt->switch_statement, inspect_statement);
			ast_append_child(node, "switch_break:", stmt->switch_break, inspect_symbol);
			ast_append_child(node, "switch_case:", stmt->switch_case, inspect_symbol);
			break;
		case STMT_CASE:
			ast_append_child(node, "case_expression:", stmt->case_expression, inspect_expression);
			ast_append_child(node, "case_to:", stmt->case_to, inspect_expression);
			ast_append_child(node, "case_statement:", stmt->case_statement, inspect_statement);
			ast_append_child(node, "case_label:", stmt->case_label, inspect_symbol);
			break;
		case STMT_RETURN:
			ast_append_child(node, "ret_value:", stmt->ret_value, inspect_expression);
			ast_append_child(node, "ret_target:", stmt->ret_target, inspect_symbol);
			break;

		default:
			break;
	}
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x28(%rdi), %rsi
movq 0x38(%rdi), %r14
movl (%r14), %eax
leaq 0xcc6b(%rip), %rcx      # 0x4d92c
movslq (%rcx,%rax,4), %rdx
addq %rcx, %rdx
leaq 0xccd9(%rip), %rdi      # 0x4d9a8
xorl %eax, %eax
callq 0xf1f0
movq %rax, 0x28(%rbx)
movl (%r14), %eax
addl $-0x2, %eax
cmpl $0x6, %eax
ja 0x410fa
leaq 0xcbd8(%rip), %rcx      # 0x4d8c8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x10(%r14), %rcx
testq %rcx, %rcx
je 0x410fa
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xcd23(%rip), %rdx      # 0x4da37
leaq 0x4d8(%rip), %r8        # 0x411f3
jmp 0x410de
movq 0x10(%r14), %rcx
testq %rcx, %rcx
je 0x40d5a
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xccfb(%rip), %rdx      # 0x4da32
leaq 0x4b5(%rip), %r8        # 0x411f3
movq %rbx, %rdi
callq 0x40823
movq %rsp, %rsi
movq %rax, (%rsi)
movq 0x40(%rbx), %rdi
movl $0x1, %edx
callq 0xf1c0
movq 0x18(%r14), %rcx
testq %rcx, %rcx
je 0x40d94
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xccd2(%rip), %rdx      # 0x4da43
leaq 0x47b(%rip), %r8        # 0x411f3
movq %rbx, %rdi
callq 0x40823
movq %rsp, %rsi
movq %rax, (%rsi)
movq 0x40(%rbx), %rdi
movl $0x1, %edx
callq 0xf1c0
movq 0x20(%r14), %rcx
testq %rcx, %rcx
je 0x40dce
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xcca1(%rip), %rdx      # 0x4da4c
leaq -0x10a(%rip), %r8       # 0x40ca8
movq %rbx, %rdi
callq 0x40823
movq %rsp, %rsi
movq %rax, (%rsi)
movq 0x40(%rbx), %rdi
movl $0x1, %edx
callq 0xf1c0
movq 0x28(%r14), %rcx
testq %rcx, %rcx
je 0x410fa
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xcc73(%rip), %rdx      # 0x4da5c
jmp 0x40fcc
movq 0x10(%r14), %rcx
testq %rcx, %rcx
je 0x40e28
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0x9313(%rip), %rdx      # 0x4a118
leaq 0x3e7(%rip), %r8        # 0x411f3
movq %rbx, %rdi
callq 0x40823
movq %rsp, %rsi
movq %rax, (%rsi)
movq 0x40(%rbx), %rdi
movl $0x1, %edx
callq 0xf1c0
movq 0x18(%r14), %rcx
testq %rcx, %rcx
je 0x40e62
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xcb77(%rip), %rdx      # 0x4d9b6
leaq -0x19e(%rip), %r8       # 0x40ca8
movq %rbx, %rdi
callq 0x40823
movq %rsp, %rsi
movq %rax, (%rsi)
movq 0x40(%rbx), %rdi
movl $0x1, %edx
callq 0xf1c0
movq 0x20(%r14), %rcx
testq %rcx, %rcx
je 0x410fa
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xcb42(%rip), %rdx      # 0x4d9bf
jmp 0x410d7
movq 0x10(%r14), %rcx
testq %rcx, %rcx
je 0x40ebc
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xcbcf(%rip), %rdx      # 0x4da68
leaq 0x353(%rip), %r8        # 0x411f3
movq %rbx, %rdi
callq 0x40823
movq %rsp, %rsi
movq %rax, (%rsi)
movq 0x40(%rbx), %rdi
movl $0x1, %edx
callq 0xf1c0
movq 0x18(%r14), %rcx
testq %rcx, %rcx
je 0x410fa
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xcb9c(%rip), %rdx      # 0x4da73
jmp 0x40fcc
movq 0x10(%r14), %rcx
testq %rcx, %rcx
je 0x410fa
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xcab8(%rip), %rdx      # 0x4d9af
leaq 0x204(%rip), %r8        # 0x41102
jmp 0x410de
movq 0x10(%r14), %rcx
testq %rcx, %rcx
je 0x40f3d
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xcad8(%rip), %rdx      # 0x4d9f2
leaq 0x2d2(%rip), %r8        # 0x411f3
movq %rbx, %rdi
callq 0x40823
movq %rsp, %rsi
movq %rax, (%rsi)
movq 0x40(%rbx), %rdi
movl $0x1, %edx
callq 0xf1c0
movq 0x18(%r14), %rcx
testq %rcx, %rcx
je 0x40f77
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xcab1(%rip), %rdx      # 0x4da05
leaq -0x2b3(%rip), %r8       # 0x40ca8
movq %rbx, %rdi
callq 0x40823
movq %rsp, %rsi
movq %rax, (%rsi)
movq 0x40(%rbx), %rdi
movl $0x1, %edx
callq 0xf1c0
movq 0x20(%r14), %rcx
testq %rcx, %rcx
je 0x40fb1
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xca89(%rip), %rdx      # 0x4da17
leaq 0x3ca(%rip), %r8        # 0x4135f
movq %rbx, %rdi
callq 0x40823
movq %rsp, %rsi
movq %rax, (%rsi)
movq 0x40(%rbx), %rdi
movl $0x1, %edx
callq 0xf1c0
movq 0x28(%r14), %rcx
testq %rcx, %rcx
je 0x410fa
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xca59(%rip), %rdx      # 0x4da25
leaq 0x38c(%rip), %r8        # 0x4135f
jmp 0x410de
movq 0x10(%r14), %rcx
testq %rcx, %rcx
je 0x41012
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xca2f(%rip), %rdx      # 0x4da1e
leaq 0x369(%rip), %r8        # 0x4135f
movq %rbx, %rdi
callq 0x40823
movq %rsp, %rsi
movq %rax, (%rsi)
movq 0x40(%rbx), %rdi
movl $0x1, %edx
callq 0xf1c0
movq 0x18(%r14), %rcx
testq %rcx, %rcx
je 0x4104c
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xc9a0(%rip), %rdx      # 0x4d9c9
leaq 0x32f(%rip), %r8        # 0x4135f
movq %rbx, %rdi
callq 0x40823
movq %rsp, %rsi
movq %rax, (%rsi)
movq 0x40(%rbx), %rdi
movl $0x1, %edx
callq 0xf1c0
movq 0x28(%r14), %rcx
testq %rcx, %rcx
je 0x41086
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xc970(%rip), %rdx      # 0x4d9d3
leaq -0x3c2(%rip), %r8       # 0x40ca8
movq %rbx, %rdi
callq 0x40823
movq %rsp, %rsi
movq %rax, (%rsi)
movq 0x40(%rbx), %rdi
movl $0x1, %edx
callq 0xf1c0
movq 0x38(%r14), %rcx
testq %rcx, %rcx
je 0x410c0
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xc93a(%rip), %rdx      # 0x4d9d7
leaq -0x3fc(%rip), %r8       # 0x40ca8
movq %rbx, %rdi
callq 0x40823
movq %rsp, %rsi
movq %rax, (%rsi)
movq 0x40(%rbx), %rdi
movl $0x1, %edx
callq 0xf1c0
movq 0x40(%r14), %rcx
testq %rcx, %rcx
je 0x410fa
movq 0x40(%rbx), %rax
movl 0x8(%rax), %esi
leaq 0xc90b(%rip), %rdx      # 0x4d9e2
leaq -0x436(%rip), %r8       # 0x40ca8
movq %rbx, %rdi
callq 0x40823
movq %rsp, %rsi
movq %rax, (%rsi)
movq 0x40(%rbx), %rdi
movl $0x1, %edx
callq 0xf1c0
addq $0x8, %rsp
popq %rbx
popq %r14
retq