// File: /workspace/github_c_makefile_star2_O0/oridb[P]mc/parse/infer.c
// Function: ctxstr
static char *
ctxstr(Node *n)
{
	char *t, *t1, *t2, *t3;
	char *s, *d;
	size_t nargs;
	Node **args;
	char buf[512];

	if (!n)
		return strdup("???");
	switch (n->type) {
	default:
		s = strdup(nodestr[n->type]);
		break;
	case Ndecl:
		 d = declname(n);
		 t = nodetystr(n);
		 bprintf(buf, sizeof buf, "%s:%s", d, t);
		 s = strdup(buf);
		 free(t);
		 break;
	case Nname:	s = strdup(namestr(n));	break;
	case Nexpr:
		args = n->expr.args;
		nargs = n->expr.nargs;
		t1 = NULL;
		t2 = NULL;
		t3 = NULL;
		if (exprop(n) == Ovar)
			d = namestr(args[0]);
		else
			d = opstr[exprop(n)];
		t = nodetystr(n);
		if (nargs >= 1)
			t1 = nodetystr(args[0]);
		if (nargs >= 2)
			t2 = nodetystr(args[1]);
		if (nargs >= 3)
			t3 = nodetystr(args[2]);

		switch (opclass[exprop(n)]) {
		case OTpre:	bprintf(buf, sizeof buf, "%s<e:%s>", oppretty[exprop(n)], t1);	break;
		case OTpost:	bprintf(buf, sizeof buf, "<e:%s>%s", t1, oppretty[exprop(n)]);	break;
		case OTzarg:	bprintf(buf, sizeof buf, "%s", oppretty[exprop(n)]);	break;
		case OTbin:
			bprintf(buf, sizeof buf, "<e1:%s> %s <e2:%s>", t1, oppretty[exprop(n)], t2);
			break;
		case OTmisc:
			switch (exprop(n)) {
			case Ovar:	bprintf(buf, sizeof buf, "%s:%s", namestr(args[0]), t);	break;
			case Ocall:	ctxstrcall(buf, sizeof buf,n);	break;
			case Oidx:
				if (exprop(args[0]) == Ovar)
					bprintf(buf, sizeof buf, "%s[<e1:%s>]", namestr(args[0]->expr.args[0]), t2);
				else
					bprintf(buf, sizeof buf, "<sl:%s>[<e1%s>]", t1, t2);
				break;
			case Oslice:
				if (exprop(args[0]) == Ovar)
					bprintf(buf, sizeof buf, "%s[<e1:%s>:<e2:%s>]", namestr(args[0]->expr.args[0]), t2, t3);
				else
					bprintf( buf, sizeof buf, "<sl:%s>[<e1%s>:<e2:%s>]", t1, t2, t3);
				break;
			case Omemb:
				bprintf(buf, sizeof buf, "<%s>.%s", t1, namestr(args[1]));
				break;
			case Otupmemb:
				bprintf(buf, sizeof buf, "<%s>.%llu", t1, args[1]->lit.intval);
				break;
			default:
				bprintf(buf, sizeof buf, "%s:%s", d, t);
				break;
			}
			break;
		default: bprintf(buf, sizeof buf, "%s", d); break;
		}
		free(t);
		free(t1);
		free(t2);
		free(t3);
		s = strdup(buf);
		break;
	}
	return s;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2c0, %rsp            # imm = 0x2C0
movq %rdi, -0x10(%rbp)
cmpq $0x0, -0x10(%rbp)
jne 0x27c0b
leaq 0x2a28b(%rip), %rdi     # 0x51e88
callq 0x6330
movq %rax, -0x8(%rbp)
jmp 0x2819b
movq -0x10(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x254(%rbp)
subl $0x8, %eax
je 0x27cd7
jmp 0x27c23
movl -0x254(%rbp), %eax
subl $0xa, %eax
je 0x27cbd
jmp 0x27c34
movl -0x254(%rbp), %eax
subl $0xb, %eax
je 0x27c63
jmp 0x27c41
movq -0x10(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, %ecx
leaq 0x54b6f(%rip), %rax     # 0x7c7c0
movq (%rax,%rcx,8), %rdi
callq 0x6330
movq %rax, -0x38(%rbp)
jmp 0x28193
movq -0x10(%rbp), %rdi
callq 0x30200
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rdi
callq 0x281b0
movq %rax, -0x18(%rbp)
leaq -0x250(%rbp), %rdi
movq -0x40(%rbp), %rcx
movq -0x18(%rbp), %r8
movl $0x200, %esi            # imm = 0x200
leaq 0x2b5e6(%rip), %rdx     # 0x5327e
movb $0x0, %al
callq 0x4a230
leaq -0x250(%rbp), %rdi
callq 0x6330
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rdi
callq 0x6040
jmp 0x28193
movq -0x10(%rbp), %rdi
callq 0x30600
movq %rax, %rdi
callq 0x6330
movq %rax, -0x38(%rbp)
jmp 0x28193
movq -0x10(%rbp), %rax
movq 0x50(%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x48(%rbp)
movq $0x0, -0x20(%rbp)
movq $0x0, -0x28(%rbp)
movq $0x0, -0x30(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2f210
cmpl $0x33, %eax
jne 0x27d27
movq -0x50(%rbp), %rax
movq (%rax), %rdi
callq 0x30600
movq %rax, -0x40(%rbp)
jmp 0x27d43
movq -0x10(%rbp), %rdi
callq 0x2f210
movl %eax, %eax
movl %eax, %ecx
leaq 0x54185(%rip), %rax     # 0x7bec0
movq (%rax,%rcx,8), %rax
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rdi
callq 0x281b0
movq %rax, -0x18(%rbp)
cmpq $0x1, -0x48(%rbp)
jb 0x27d67
movq -0x50(%rbp), %rax
movq (%rax), %rdi
callq 0x281b0
movq %rax, -0x20(%rbp)
cmpq $0x2, -0x48(%rbp)
jb 0x27d7f
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x281b0
movq %rax, -0x28(%rbp)
cmpq $0x3, -0x48(%rbp)
jb 0x27d97
movq -0x50(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x281b0
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2f210
movl %eax, %eax
movl %eax, %ecx
leaq 0x54895(%rip), %rax     # 0x7c640
movl (%rax,%rcx,4), %eax
movq %rax, -0x260(%rbp)
subq $0x4, %rax
ja 0x28141
movq -0x260(%rbp), %rax
leaq 0x29b43(%rip), %rcx     # 0x51910
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq -0x250(%rbp), %rax
movq %rax, -0x268(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2f210
movq -0x268(%rbp), %rdi
movl %eax, %eax
movl %eax, %ecx
leaq 0x543c1(%rip), %rax     # 0x7c1c0
movq (%rax,%rcx,8), %rcx
movq -0x20(%rbp), %r8
movl $0x200, %esi            # imm = 0x200
leaq 0x2a079(%rip), %rdx     # 0x51e8c
movb $0x0, %al
callq 0x4a230
jmp 0x2815f
leaq -0x250(%rbp), %rax
movq %rax, -0x278(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x270(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2f210
movq -0x278(%rbp), %rdi
movq -0x270(%rbp), %rcx
movl %eax, %eax
movl %eax, %edx
leaq 0x54366(%rip), %rax     # 0x7c1c0
movq (%rax,%rdx,8), %r8
movl $0x200, %esi            # imm = 0x200
leaq 0x2a02b(%rip), %rdx     # 0x51e95
movb $0x0, %al
callq 0x4a230
jmp 0x2815f
leaq -0x250(%rbp), %rax
movq %rax, -0x280(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2f210
movq -0x280(%rbp), %rdi
movl %eax, %eax
movl %eax, %ecx
leaq 0x54321(%rip), %rax     # 0x7c1c0
movq (%rax,%rcx,8), %rcx
movl $0x200, %esi            # imm = 0x200
leaq 0x2abec(%rip), %rdx     # 0x52a9b
movb $0x0, %al
callq 0x4a230
jmp 0x2815f
leaq -0x250(%rbp), %rax
movq %rax, -0x290(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x288(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2f210
movq -0x290(%rbp), %rdi
movq -0x288(%rbp), %rcx
movl %eax, %eax
movl %eax, %edx
leaq 0x542ca(%rip), %rax     # 0x7c1c0
movq (%rax,%rdx,8), %r8
movq -0x28(%rbp), %r9
movl $0x200, %esi            # imm = 0x200
leaq 0x29f94(%rip), %rdx     # 0x51e9e
movb $0x0, %al
callq 0x4a230
jmp 0x2815f
movq -0x10(%rbp), %rdi
callq 0x2f210
addl $-0x28, %eax
movl %eax, %ecx
movq %rcx, -0x298(%rbp)
subl $0xb, %eax
ja 0x2811d
movq -0x298(%rbp), %rax
leaq 0x299e2(%rip), %rcx     # 0x51924
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq -0x250(%rbp), %rax
movq %rax, -0x2a0(%rbp)
movq -0x50(%rbp), %rax
movq (%rax), %rdi
callq 0x30600
movq -0x2a0(%rbp), %rdi
movq %rax, %rcx
movq -0x18(%rbp), %r8
movl $0x200, %esi            # imm = 0x200
leaq 0x2b2ff(%rip), %rdx     # 0x5327e
movb $0x0, %al
callq 0x4a230
jmp 0x2813f
leaq -0x250(%rbp), %rdi
movq -0x10(%rbp), %rdx
movl $0x200, %esi            # imm = 0x200
callq 0x28270
jmp 0x2813f
movq -0x50(%rbp), %rax
movq (%rax), %rdi
callq 0x2f210
cmpl $0x33, %eax
jne 0x27ffa
leaq -0x250(%rbp), %rax
movq %rax, -0x2a8(%rbp)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq 0x50(%rax), %rax
movq (%rax), %rdi
callq 0x30600
movq -0x2a8(%rbp), %rdi
movq %rax, %rcx
movq -0x28(%rbp), %r8
movl $0x200, %esi            # imm = 0x200
leaq 0x29ec0(%rip), %rdx     # 0x51eb1
movb $0x0, %al
callq 0x4a230
jmp 0x2801c
leaq -0x250(%rbp), %rdi
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movl $0x200, %esi            # imm = 0x200
leaq 0x29ea8(%rip), %rdx     # 0x51ebd
movb $0x0, %al
callq 0x4a230
jmp 0x2813f
movq -0x50(%rbp), %rax
movq (%rax), %rdi
callq 0x2f210
cmpl $0x33, %eax
jne 0x2807a
leaq -0x250(%rbp), %rax
movq %rax, -0x2b0(%rbp)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq 0x50(%rax), %rax
movq (%rax), %rdi
callq 0x30600
movq -0x2b0(%rbp), %rdi
movq %rax, %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
movl $0x200, %esi            # imm = 0x200
leaq 0x29e5c(%rip), %rdx     # 0x51ecd
movb $0x0, %al
callq 0x4a230
jmp 0x280a0
leaq -0x250(%rbp), %rdi
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
movl $0x200, %esi            # imm = 0x200
leaq 0x29e48(%rip), %rdx     # 0x51ee1
movb $0x0, %al
callq 0x4a230
jmp 0x2813f
leaq -0x250(%rbp), %rax
movq %rax, -0x2c0(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x2b8(%rbp)
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x30600
movq -0x2c0(%rbp), %rdi
movq -0x2b8(%rbp), %rcx
movq %rax, %r8
movl $0x200, %esi            # imm = 0x200
leaq 0x29e11(%rip), %rdx     # 0x51ef9
movb $0x0, %al
callq 0x4a230
jmp 0x2813f
leaq -0x250(%rbp), %rdi
movq -0x20(%rbp), %rcx
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x30(%rax), %r8
movl $0x200, %esi            # imm = 0x200
leaq 0x29ded(%rip), %rdx     # 0x51f01
movb $0x0, %al
callq 0x4a230
jmp 0x2813f
leaq -0x250(%rbp), %rdi
movq -0x40(%rbp), %rcx
movq -0x18(%rbp), %r8
movl $0x200, %esi            # imm = 0x200
leaq 0x2b146(%rip), %rdx     # 0x5327e
movb $0x0, %al
callq 0x4a230
jmp 0x2815f
leaq -0x250(%rbp), %rdi
movq -0x40(%rbp), %rcx
movl $0x200, %esi            # imm = 0x200
leaq 0x2a943(%rip), %rdx     # 0x52a9b
movb $0x0, %al
callq 0x4a230
movq -0x18(%rbp), %rdi
callq 0x6040
movq -0x20(%rbp), %rdi
callq 0x6040
movq -0x28(%rbp), %rdi
callq 0x6040
movq -0x30(%rbp), %rdi
callq 0x6040
leaq -0x250(%rbp), %rdi
callq 0x6330
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x2c0, %rsp            # imm = 0x2C0
popq %rbp
retq
nopl (%rax,%rax)