// File: /workspace/github_c_makefile_star2_O2/lucvoo[P]sparse-dev/show-parse.c
// Function: show_expression
int show_expression(struct expression *expr)
{
	if (!expr)
		return 0;

	if (!expr->ctype) {
		struct position *pos = &expr->pos;
		printf("\tno type at %s:%d:%d\n",
			stream_name(pos->stream),
			pos->line, pos->pos);
		return 0;
	}
		
	switch (expr->type) {
	case EXPR_CALL:
		return show_call_expression(expr);
		
	case EXPR_ASSIGNMENT:
		return show_assignment(expr);

	case EXPR_COMMA:
		return show_comma(expr);
	case EXPR_BINOP:
	case EXPR_COMPARE:
	case EXPR_LOGICAL:
		return show_binop(expr);
	case EXPR_PREOP:
		return show_preop(expr);
	case EXPR_POSTOP:
		return show_postop(expr);
	case EXPR_SYMBOL:
		return show_symbol_expr(expr->symbol);
	case EXPR_DEREF:
	case EXPR_SIZEOF:
	case EXPR_PTRSIZEOF:
	case EXPR_ALIGNOF:
	case EXPR_OFFSETOF:
		warning(expr->pos, "invalid expression after evaluation");
		return 0;
	case EXPR_CAST:
	case EXPR_FORCE_CAST:
	case EXPR_IMPLIED_CAST:
		return show_cast_expr(expr);
	case EXPR_VALUE:
		return show_value(expr);
	case EXPR_FVALUE:
		return show_fvalue(expr);
	case EXPR_STRING:
		return show_string_expr(expr);
	case EXPR_INITIALIZER:
		return show_initializer_expr(expr, expr->ctype);
	case EXPR_SELECT:
	case EXPR_CONDITIONAL:
		return show_conditional_expr(expr);
	case EXPR_STATEMENT:
		return show_statement_expr(expr);
	case EXPR_LABEL:
		return show_label_expr(expr);
	case EXPR_SLICE:
		return show_slice(expr);

	// None of these should exist as direct expressions: they are only
	// valid as sub-expressions of initializers.
	case EXPR_POS:
		warning(expr->pos, "unable to show plain initializer position expression");
		return 0;
	case EXPR_IDENTIFIER:
		warning(expr->pos, "unable to show identifier expression");
		return 0;
	case EXPR_INDEX:
		warning(expr->pos, "unable to show index expression");
		return 0;
	case EXPR_TYPE:
		warning(expr->pos, "unable to show type expression");
		return 0;
	case EXPR_GENERIC:
		warning(expr->pos, "unable to show generic expression");
		return 0;
	}
	return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdi, %r14
leaq 0x1e40a(%rip), %r15     # 0x3f5a4
xorl %ebx, %ebx
testq %r14, %r14
je 0x21674
movq 0x10(%r14), %rsi
testq %rsi, %rsi
je 0x21311
movzbl (%r14), %eax
decl %eax
cmpl $0x1e, %eax
ja 0x21674
movslq (%r15,%rax,4), %rax
addq %r15, %rax
jmpq *%rax
movq 0x20(%r14), %rdi
callq 0x21182
movq 0x28(%r14), %r14
jmp 0x2119c
movq 0x8(%r14), %rdi
leaq 0x1e563(%rip), %rsi     # 0x3f747
xorl %ebx, %ebx
xorl %eax, %eax
callq 0x1108a
jmp 0x21674
movq 0x20(%r14), %rdi
callq 0x21182
movl %eax, %ebp
movq 0x28(%r14), %rdi
callq 0x21182
movl %eax, %r15d
movl 0x437d1(%rip), %ebx     # 0x649e0
incl %ebx
movl %ebx, 0x437c9(%rip)     # 0x649e0
movl 0x4(%r14), %r12d
movl %r12d, %edi
callq 0x29332
cmpq $0x7c, %r12
ja 0x21234
leaq 0x31e00(%rip), %rax     # 0x53030
movq (%rax,%r12,8), %rax
movq 0x10(%r14), %rcx
movl 0x50(%rcx), %edx
leaq 0x1e9a9(%rip), %rdi     # 0x3fbeb
movq %rax, %rsi
movl %ebx, %ecx
movl %ebp, %r8d
movl %r15d, %r9d
xorl %eax, %eax
callq 0xe0f0
jmp 0x21674
movq 0x28(%r14), %rdi
callq 0x21182
movq 0x20(%r14), %rdx
movq 0x28(%r14), %rcx
movq 0x10(%rcx), %rsi
movl 0x50(%rsi), %ecx
movl 0x50(%rdx), %edx
cmpl %edx, %ecx
jge 0x2134f
movl 0x4375e(%rip), %ebx     # 0x649e0
incl %ebx
movl %ebx, 0x43756(%rip)     # 0x649e0
movzbl (%rsi), %edi
cmpl $0x3, %edi
jne 0x21299
movq 0x60(%rsi), %rsi
movzbl (%rsi), %edi
cmpl $0x4, %edi
je 0x21356
testb $0x40, 0x69(%rsi)
jne 0x21356
leaq 0x1e97a(%rip), %rdi     # 0x3fc2d
movl %ecx, %esi
movl %ebx, %ecx
movl %eax, %r8d
jmp 0x214aa
movq 0x20(%r14), %rdi
callq 0x21182
movl %eax, %ebp
movq 0x28(%r14), %rdi
callq 0x21182
movl %eax, %r15d
movq 0x30(%r14), %rdi
callq 0x21182
movl 0x436fb(%rip), %ebx     # 0x649e0
incl %ebx
movl %ebx, 0x436f3(%rip)     # 0x649e0
movq 0x10(%r14), %rcx
movl 0x50(%rcx), %edx
leaq 0x1e9d1(%rip), %rdi     # 0x3fccc
movl %ebp, %esi
movl %ebx, %ecx
movl %r15d, %r8d
movl %eax, %r9d
xorl %eax, %eax
callq 0xe0f0
jmp 0x21674
movl 0x8(%r14), %edi
shrl $0x6, %edi
andl $0x3fff, %edi           # imm = 0x3FFF
callq 0x292d8
movq 0x8(%r14), %rcx
movq %rcx, %rdx
shrq $0x20, %rdx
andl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
shrl $0x16, %ecx
leaq 0x1e3f3(%rip), %rdi     # 0x3f731
xorl %ebx, %ebx
movq %rax, %rsi
xorl %eax, %eax
callq 0xe0f0
jmp 0x21674
movl %eax, %ebx
jmp 0x21674
pushq $-0x1
popq %r8
shlq %cl, %r8
notq %r8
leaq 0x1e8da(%rip), %rdi     # 0x3fc41
movl %edx, %esi
movl %ebx, %edx
movl %eax, %ecx
xorl %eax, %eax
callq 0xe0f0
jmp 0x21674
movq 0x8(%r14), %rdi
leaq 0x1e441(%rip), %rsi     # 0x3f7c5
jmp 0x211e4
movq 0x20(%r14), %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x20b88
movq %r14, %rdi
callq 0x2186f
jmp 0x21674
movl 0x50(%rsi), %ebp
movq 0x20(%r14), %r15
movq 0x28(%r14), %rdi
callq 0x21182
movl %eax, %ebx
movq %r15, %rdi
callq 0x21b83
leaq 0x1e708(%rip), %rdi     # 0x3fad6
movl %ebp, %esi
movl %ebx, %edx
movl %eax, %ecx
xorl %eax, %eax
callq 0xe0f0
jmp 0x21674
movq 0x8(%r14), %rdi
leaq 0x1e419(%rip), %rsi     # 0x3f804
jmp 0x211e4
pushq $0x1
popq %rsi
movq %r14, %rdi
jmp 0x215cd
movq %r14, %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2182e
movl 0x435c9(%rip), %ebx     # 0x649e0
incl %ebx
movl %ebx, 0x435c1(%rip)     # 0x649e0
fldt 0x20(%r14)
movl 0x50(%rsi), %esi
fstpt (%rsp)
leaq 0x1e83e(%rip), %rdi     # 0x3fc6e
jmp 0x2166b
movl 0x435a5(%rip), %ebx     # 0x649e0
incl %ebx
movl %ebx, 0x4359d(%rip)     # 0x649e0
movq 0x20(%r14), %rcx
movl 0x50(%rsi), %esi
leaq 0x1e808(%rip), %rdi     # 0x3fc59
jmp 0x215ba
movq 0x8(%r14), %rdi
leaq 0x1e30a(%rip), %rsi     # 0x3f76b
jmp 0x211e4
movq 0x20(%r14), %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2176a
movq 0x20(%r14), %rdi
callq 0x21182
movl 0x43554(%rip), %ebx     # 0x649e0
incl %ebx
movl %ebx, 0x4354c(%rip)     # 0x649e0
movq 0x10(%r14), %rcx
movl 0x50(%rcx), %esi
movl 0x28(%r14), %r8d
leaq 0x1e856(%rip), %rdi     # 0x3fcfc
movl %eax, %edx
movl %ebx, %ecx
xorl %eax, %eax
callq 0xe0f0
jmp 0x21674
movq 0x8(%r14), %rdi
leaq 0x1e2df(%rip), %rsi     # 0x3f7a0
jmp 0x211e4
movq 0x8(%r14), %rdi
leaq 0x1e314(%rip), %rsi     # 0x3f7e5
jmp 0x211e4
movq 0x28(%r14), %r15
testq %r15, %r15
je 0x215e0
movq %r15, %r13
xorl %ebx, %ebx
movq 0x8(%r13), %r13
movsbq (%r13), %rbp
movl %ebp, %ebp
testl %ebp, %ebp
jle 0x2154f
movq 0x10(%r13,%rbp,8), %r12
decq %rbp
cmpw $0x100, (%r13)          # imm = 0x100
jb 0x2150d
testq %r12, %r12
je 0x214f3
movq %r12, %rdi
callq 0x21182
movq 0x10(%r12), %rcx
movl 0x50(%rcx), %r12d
leaq 0x1e66c(%rip), %rdi     # 0x3fb91
movl %r12d, %esi
movl %eax, %edx
xorl %eax, %eax
callq 0xe0f0
pushq $-0x1
popq %rax
testl %r12d, %r12d
js 0x2154b
leaq 0x3d1c0(%rip), %rax     # 0x5e700
movl (%rax), %ecx
leal (%r12,%rcx), %eax
decl %eax
cltd
idivl %ecx
addl %eax, %ebx
jmp 0x214f1
cmpq %r15, %r13
jne 0x214e8
jmp 0x215e2
movl 0x4(%r14), %eax
cmpl $0x103, %eax            # imm = 0x103
je 0x215c8
cmpl $0x101, %eax            # imm = 0x101
je 0x215c8
cmpl $0x2a, %eax
jne 0x21685
movq %r14, %rdi
callq 0x21b83
movq 0x10(%r14), %rcx
movl 0x50(%rcx), %edi
movl %eax, %esi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x21c2e
movl 0x43442(%rip), %ebx     # 0x649e0
incl %ebx
movl %ebx, 0x4343a(%rip)     # 0x649e0
leaq 0x3d17f(%rip), %rax     # 0x5e72c
movl (%rax), %esi
movq 0x20(%r14), %rcx
leaq 0x1e72e(%rip), %rdi     # 0x3fce8
movl %ebx, %edx
xorl %eax, %eax
callq 0xe0f0
jmp 0x21674
movq %r14, %rdi
xorl %esi, %esi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x21b8c
xorl %ebx, %ebx
movq 0x20(%r14), %rdi
cmpb $0x9, (%rdi)
jne 0x2161d
movq 0x20(%rdi), %rax
cmpb $0x3, (%rax)
jne 0x2161d
movq 0x20(%rax), %rax
movq 0x60(%rax), %rcx
cmpb $0x5, (%rcx)
jne 0x2161d
movq 0x18(%rax), %rdi
callq 0x2936d
leaq 0x1e58f(%rip), %rdi     # 0x3fba0
movq %rax, %rsi
xorl %eax, %eax
callq 0xe0f0
jmp 0x21632
callq 0x21182
leaq 0x1e582(%rip), %rdi     # 0x3fbab
movl %eax, %esi
xorl %eax, %eax
callq 0xe0f0
testl %ebx, %ebx
je 0x2164f
leaq 0x3d0ef(%rip), %rax     # 0x5e72c
movl (%rax), %esi
leaq 0x1e572(%rip), %rdi     # 0x3fbb8
movl %ebx, %edx
xorl %eax, %eax
callq 0xe0f0
movl 0x4338b(%rip), %ebx     # 0x649e0
incl %ebx
movl %ebx, 0x43383(%rip)     # 0x649e0
movq 0x10(%r14), %rax
movl 0x50(%rax), %esi
leaq 0x1e563(%rip), %rdi     # 0x3fbce
movl %ebx, %edx
xorl %eax, %eax
callq 0xe0f0
movl %ebx, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x20(%r14), %rdi
callq 0x21182
movl %eax, %ebp
movl 0x4334a(%rip), %ebx     # 0x649e0
incl %ebx
movl %ebx, 0x43342(%rip)     # 0x649e0
movl 0x4(%r14), %r15d
movl %r15d, %edi
callq 0x29332
cmpq $0x7e, %r15
ja 0x216bb
leaq 0x31d69(%rip), %rax     # 0x53420
movq (%rax,%r15,8), %rax
movq 0x10(%r14), %rcx
movl 0x50(%rcx), %edx
leaq 0x1e553(%rip), %rdi     # 0x3fc1c
movq %rax, %rsi
movl %ebx, %ecx
movl %ebp, %r8d
xorl %eax, %eax
callq 0xe0f0
jmp 0x21674