// File: menhits[P]phplus/src/AstNode.cpp
// Function: AstFuncBody::makeCopyWithSpecificTypes(std::shared_ptr<TypeBase>, std::shared_ptr<TypeBase>)
AstNode AstFuncBody::makeCopyWithSpecificTypes(Type leftInType, Type rightInType)
{
	Type leftWhatevType=leftTypeNode->getReturnType()->getSubType();
	Type rightWhatevType=rightTypeNode->getReturnType()->getSubType();
	
	if (!leftInType->matches(leftWhatevType) || !rightInType->matches(rightWhatevType))
	{
		return nullptr;
	}
	
	AstNode actualLeftTypeNode;
	AstNode actualRightTypeNode;
	
	if (leftWhatevType->isWhatev())
	{
		actualLeftTypeNode=AstTypeType::make(leftWhatevType->actuallyIs(leftInType));
	}
	else
	{
		actualLeftTypeNode=leftTypeNode->makeCopy(false);
	}
	
	if (rightWhatevType->isWhatev())
	{
		actualRightTypeNode=AstTypeType::make(rightWhatevType->actuallyIs(rightInType));
	}
	else
	{
		actualRightTypeNode=rightTypeNode->makeCopy(false);
	}
	
	AstNode out=make(move(actualLeftTypeNode), move(actualRightTypeNode), returnTypeNode->makeCopy(false), bodyNode->makeCopy(false));
	out->nameHint=nameHint;
	out->setInput(ns, dynamic, Void, Void);
	return out;
}

// Assembly:
subq $0x228, %rsp            # imm = 0x228
movq %rcx, 0x98(%rsp)
movq %rdx, 0xa0(%rsp)
movq %rdi, 0xa8(%rsp)
movq %rdi, %rax
movq %rax, 0xb0(%rsp)
movq %rdi, 0x220(%rsp)
movq %rsi, 0x218(%rsp)
movq %rdx, 0x210(%rsp)
movq %rcx, 0x208(%rsp)
movq 0x218(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
addq $0x88, %rdi
callq 0x1a5f0
movq %rax, %rsi
leaq 0x1e8(%rsp), %rdi
movq %rdi, 0xc0(%rsp)
callq 0x1aec0
movq 0xc0(%rsp), %rdi
callq 0x1a660
movq %rax, %rsi
movq (%rsi), %rax
movq 0x48(%rax), %rax
leaq 0x1f8(%rsp), %rdi
callq *%rax
jmp 0x13591
leaq 0x1e8(%rsp), %rdi
callq 0x1a950
movq 0xb8(%rsp), %rdi
addq $0x90, %rdi
callq 0x1a5f0
movq %rax, %rsi
leaq 0x1b8(%rsp), %rdi
callq 0x1aec0
jmp 0x135c4
leaq 0x1b8(%rsp), %rdi
callq 0x1a660
movq %rax, %rsi
movq (%rsi), %rax
movq 0x48(%rax), %rax
leaq 0x1c8(%rsp), %rdi
callq *%rax
jmp 0x135e7
leaq 0x1b8(%rsp), %rdi
callq 0x1a950
movq 0xa0(%rsp), %rdi
callq 0x1a660
movq %rax, 0x80(%rsp)
leaq 0x1a8(%rsp), %rdi
movq %rdi, 0x88(%rsp)
leaq 0x1f8(%rsp), %rsi
callq 0x1a920
movq 0x80(%rsp), %rdi
movq 0x88(%rsp), %rsi
movb $0x0, 0x197(%rsp)
callq 0x9f1a0
movb %al, 0x97(%rsp)
jmp 0x1364c
movb 0x97(%rsp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0x7f(%rsp)
jne 0x13660
jmp 0x136b3
movq 0x98(%rsp), %rdi
callq 0x1a660
movq %rax, 0x68(%rsp)
leaq 0x198(%rsp), %rdi
movq %rdi, 0x70(%rsp)
leaq 0x1c8(%rsp), %rsi
callq 0x1a920
movq 0x68(%rsp), %rdi
movq 0x70(%rsp), %rsi
movb $0x1, 0x197(%rsp)
callq 0x9f1a0
movb %al, 0x7e(%rsp)
jmp 0x136a9
movb 0x7e(%rsp), %al
xorb $-0x1, %al
movb %al, 0x7f(%rsp)
movb 0x7f(%rsp), %al
movb %al, 0x67(%rsp)
testb $0x1, 0x197(%rsp)
jne 0x136c7
jmp 0x136d4
leaq 0x198(%rsp), %rdi
callq 0x1a950
leaq 0x1a8(%rsp), %rdi
callq 0x1a950
movb 0x67(%rsp), %al
testb $0x1, %al
jne 0x136ee
jmp 0x137cb
movq 0xa8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x1b1d0
movl $0x1, 0x190(%rsp)
jmp 0x13de2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e0(%rsp)
movl %eax, 0x1dc(%rsp)
leaq 0x1e8(%rsp), %rdi
callq 0x1a950
jmp 0x13e26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e0(%rsp)
movl %eax, 0x1dc(%rsp)
jmp 0x13e19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e0(%rsp)
movl %eax, 0x1dc(%rsp)
leaq 0x1b8(%rsp), %rdi
callq 0x1a950
jmp 0x13e19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e0(%rsp)
movl %eax, 0x1dc(%rsp)
jmp 0x137b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e0(%rsp)
movl %eax, 0x1dc(%rsp)
testb $0x1, 0x197(%rsp)
jne 0x137aa
jmp 0x137b7
leaq 0x198(%rsp), %rdi
callq 0x1a950
jmp 0x137b9
leaq 0x1a8(%rsp), %rdi
callq 0x1a950
jmp 0x13e0c
leaq 0x188(%rsp), %rdi
callq 0x1b210
leaq 0x180(%rsp), %rdi
callq 0x1b210
leaq 0x1f8(%rsp), %rdi
callq 0x1a660
movq %rax, %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
callq *%rax
movb %al, 0x66(%rsp)
jmp 0x13804
movb 0x66(%rsp), %al
testb $0x1, %al
jne 0x13811
jmp 0x13913
leaq 0x1f8(%rsp), %rdi
callq 0x1a660
movq 0xa0(%rsp), %rsi
movq %rax, 0x50(%rsp)
leaq 0x158(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0x1a920
movq 0x50(%rsp), %rsi
movq 0x58(%rsp), %rdx
movq (%rsi), %rax
movq (%rax), %rax
leaq 0x168(%rsp), %rdi
callq *%rax
jmp 0x13859
leaq 0x178(%rsp), %rdi
leaq 0x168(%rsp), %rsi
callq 0x1b240
jmp 0x13870
leaq 0x188(%rsp), %rdi
leaq 0x178(%rsp), %rsi
callq 0x1b300
leaq 0x178(%rsp), %rdi
callq 0x1b360
leaq 0x168(%rsp), %rdi
callq 0x1a950
leaq 0x158(%rsp), %rdi
callq 0x1a950
jmp 0x13961
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e0(%rsp)
movl %eax, 0x1dc(%rsp)
jmp 0x13dc6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e0(%rsp)
movl %eax, 0x1dc(%rsp)
jmp 0x13901
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e0(%rsp)
movl %eax, 0x1dc(%rsp)
leaq 0x168(%rsp), %rdi
callq 0x1a950
leaq 0x158(%rsp), %rdi
callq 0x1a950
jmp 0x13dc6
movq 0xb8(%rsp), %rdi
addq $0x88, %rdi
callq 0x1a5f0
movq %rax, %rsi
movq (%rsi), %rax
movq 0x20(%rax), %rax
leaq 0x150(%rsp), %rdi
xorl %edx, %edx
callq *%rax
jmp 0x1393f
leaq 0x188(%rsp), %rdi
leaq 0x150(%rsp), %rsi
callq 0x1b3c0
leaq 0x150(%rsp), %rdi
callq 0x1b3f0
leaq 0x1c8(%rsp), %rdi
callq 0x1a660
movq %rax, %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
callq *%rax
movb %al, 0x4f(%rsp)
jmp 0x13980
movb 0x4f(%rsp), %al
testb $0x1, %al
jne 0x1398d
jmp 0x13a76
leaq 0x1c8(%rsp), %rdi
callq 0x1a660
movq 0x98(%rsp), %rsi
movq %rax, 0x38(%rsp)
leaq 0x128(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0x1a920
movq 0x38(%rsp), %rsi
movq 0x40(%rsp), %rdx
movq (%rsi), %rax
movq (%rax), %rax
leaq 0x138(%rsp), %rdi
callq *%rax
jmp 0x139d5
leaq 0x148(%rsp), %rdi
leaq 0x138(%rsp), %rsi
callq 0x1b240
jmp 0x139ec
leaq 0x180(%rsp), %rdi
leaq 0x148(%rsp), %rsi
callq 0x1b300
leaq 0x148(%rsp), %rdi
callq 0x1b360
leaq 0x138(%rsp), %rdi
callq 0x1a950
leaq 0x128(%rsp), %rdi
callq 0x1a950
jmp 0x13ac4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e0(%rsp)
movl %eax, 0x1dc(%rsp)
jmp 0x13a64
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e0(%rsp)
movl %eax, 0x1dc(%rsp)
leaq 0x138(%rsp), %rdi
callq 0x1a950
leaq 0x128(%rsp), %rdi
callq 0x1a950
jmp 0x13dc6
movq 0xb8(%rsp), %rdi
addq $0x90, %rdi
callq 0x1a5f0
movq %rax, %rsi
movq (%rsi), %rax
movq 0x20(%rax), %rax
leaq 0x120(%rsp), %rdi
xorl %edx, %edx
callq *%rax
jmp 0x13aa2
leaq 0x180(%rsp), %rdi
leaq 0x120(%rsp), %rsi
callq 0x1b3c0
leaq 0x120(%rsp), %rdi
callq 0x1b3f0
movb $0x0, 0x11f(%rsp)
leaq 0x110(%rsp), %rdi
leaq 0x188(%rsp), %rsi
callq 0x1b710
leaq 0x108(%rsp), %rdi
leaq 0x180(%rsp), %rsi
callq 0x1b710
movq 0xb8(%rsp), %rdi
addq $0x98, %rdi
callq 0x1a5f0
movq %rax, %rsi
movq (%rsi), %rax
movq 0x20(%rax), %rax
leaq 0x100(%rsp), %rdi
xorl %edx, %edx
callq *%rax
jmp 0x13b22
movq 0xb8(%rsp), %rdi
addq $0xa0, %rdi
callq 0x1a5f0
movq %rax, %rsi
movq (%rsi), %rax
movq 0x20(%rax), %rax
leaq 0xf8(%rsp), %rdi
xorl %edx, %edx
callq *%rax
jmp 0x13b4e
movq 0xa8(%rsp), %rdi
leaq 0x110(%rsp), %rsi
leaq 0x108(%rsp), %rdx
leaq 0x100(%rsp), %rcx
leaq 0xf8(%rsp), %r8
callq 0x1b450
jmp 0x13b7d
leaq 0xf8(%rsp), %rdi
callq 0x1b3f0
leaq 0x100(%rsp), %rdi
callq 0x1b3f0
leaq 0x108(%rsp), %rdi
callq 0x1b3f0
leaq 0x110(%rsp), %rdi
callq 0x1b3f0
movq 0xb8(%rsp), %rax
movq 0xa8(%rsp), %rdi
addq $0x8, %rax
movq %rax, 0x30(%rsp)
callq 0x1a5f0
movq 0x30(%rsp), %rsi
movq %rax, %rdi
addq $0x8, %rdi
callq 0xb050
jmp 0x13be2
movq 0xa8(%rsp), %rdi
callq 0x1a5f0
movq 0xb8(%rsp), %rsi
movq %rax, 0x10(%rsp)
addq $0x70, %rsi
leaq 0xe8(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x1a8f0
movq 0xb8(%rsp), %rax
movzbl 0x68(%rax), %eax
movl %eax, 0xc(%rsp)
leaq 0x10487f(%rip), %rsi    # 0x1184a8
movq %rsi, (%rsp)
leaq 0xd8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0x1a920
movq (%rsp), %rsi
leaq 0xc8(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x1a920
movl 0xc(%rsp), %edx
movq 0x10(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rcx
movq 0x28(%rsp), %r8
andl $0x1, %edx
callq 0x1a6f0
jmp 0x13c77
leaq 0xc8(%rsp), %rdi
callq 0x1a950
leaq 0xd8(%rsp), %rdi
callq 0x1a950
leaq 0xe8(%rsp), %rdi
callq 0x1a6e0
movb $0x1, 0x11f(%rsp)
movl $0x1, 0x190(%rsp)
testb $0x1, 0x11f(%rsp)
jne 0x13d9d
jmp 0x13d90
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e0(%rsp)
movl %eax, 0x1dc(%rsp)
jmp 0x13d1e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e0(%rsp)
movl %eax, 0x1dc(%rsp)
jmp 0x13d11
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e0(%rsp)
movl %eax, 0x1dc(%rsp)
leaq 0xf8(%rsp), %rdi
callq 0x1b3f0
leaq 0x100(%rsp), %rdi
callq 0x1b3f0
leaq 0x108(%rsp), %rdi
callq 0x1b3f0
leaq 0x110(%rsp), %rdi
callq 0x1b3f0
jmp 0x13dc6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e0(%rsp)
movl %eax, 0x1dc(%rsp)
jmp 0x13db9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e0(%rsp)
movl %eax, 0x1dc(%rsp)
leaq 0xc8(%rsp), %rdi
callq 0x1a950
leaq 0xd8(%rsp), %rdi
callq 0x1a950
leaq 0xe8(%rsp), %rdi
callq 0x1a6e0
jmp 0x13db9
movq 0xa8(%rsp), %rdi
callq 0x1b3f0
leaq 0x180(%rsp), %rdi
callq 0x1b3f0
leaq 0x188(%rsp), %rdi
callq 0x1b3f0
jmp 0x13de2
movq 0xa8(%rsp), %rdi
callq 0x1b3f0
leaq 0x180(%rsp), %rdi
callq 0x1b3f0
leaq 0x188(%rsp), %rdi
callq 0x1b3f0
jmp 0x13e0c
leaq 0x1c8(%rsp), %rdi
callq 0x1a950
leaq 0x1f8(%rsp), %rdi
callq 0x1a950
movq 0xb0(%rsp), %rax
addq $0x228, %rsp            # imm = 0x228
retq
leaq 0x1c8(%rsp), %rdi
callq 0x1a950
leaq 0x1f8(%rsp), %rdi
callq 0x1a950
movq 0x1e0(%rsp), %rdi
callq 0xb680
nopw %cs:(%rax,%rax)