// File: menhits[P]phplus/src/Actions/MakeTupleAction.cpp
// Function: MakeTupleAction::MakeTupleAction(std::vector<std::shared_ptr<ActionData>, std::allocator<std::shared_ptr<ActionData>>> const&)
MakeTupleAction(const vector<Action>& sourceActionsIn):
		ActionData(
			[&]() -> Type
			{
				TupleTypeMaker tuple;
				
				for (auto i=sourceActionsIn.begin(); i!=sourceActionsIn.end(); ++i)
				{
					tuple.add((*i)->getReturnType());
				}
				
				return tuple.get(true);
			}(),
			
			Void, Void
		)
	{
		if (sourceActionsIn.size()<=0)
		{
			error.log("MakeTupleAction created with empty list", INTERNAL_ERROR);
		}
		
		sourceActions=sourceActionsIn;
		
		for (auto i=sourceActions.begin(); i!=sourceActions.end(); ++i)
		{
			if (!(*i)->getInLeftType()->matches(Void) || !(*i)->getInRightType()->matches(Void))
			{
				error.log((*i)->getDescription() + " put into tuple creation even though its inputs are not void", INTERNAL_ERROR);
			}
			
			if ((*i)->getReturnType()->matches(Void))
			{
				error.log((*i)->getDescription() + " put into tuple creation even though its output is void", INTERNAL_ERROR);
			}
		}
	}

// Assembly:
subq $0x238, %rsp            # imm = 0x238
movq %rdi, 0x230(%rsp)
movq %rsi, 0x228(%rsp)
movq 0x230(%rsp), %rax
movq %rax, 0xa0(%rsp)
movq 0x228(%rsp), %rax
movq %rax, 0x210(%rsp)
leaq 0x218(%rsp), %rdi
movq %rdi, 0xa8(%rsp)
leaq 0x210(%rsp), %rsi
callq 0xc12f0
leaq 0x5808d(%rip), %rsi     # 0x1184a8
movq %rsi, 0x98(%rsp)
leaq 0x200(%rsp), %rdi
movq %rdi, 0xb0(%rsp)
callq 0x1a920
movq 0x98(%rsp), %rsi
leaq 0x1f0(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x1a920
movq 0xa0(%rsp), %rdi
movq 0xa8(%rsp), %rsi
movq 0xb0(%rsp), %rdx
movq 0xb8(%rsp), %rcx
callq 0xaf570
jmp 0xc047c
leaq 0x1f0(%rsp), %rdi
callq 0x1a950
leaq 0x200(%rsp), %rdi
callq 0x1a950
leaq 0x218(%rsp), %rdi
callq 0x1a950
movq 0xa0(%rsp), %rdi
leaq 0x5741e(%rip), %rax     # 0x1178d0
addq $0x10, %rax
movq %rax, (%rdi)
addq $0x78, %rdi
movq %rdi, 0x90(%rsp)
callq 0x1aa90
movq 0x228(%rsp), %rdi
callq 0x22290
cmpq $0x0, %rax
ja 0xc0612
leaq 0x1bf(%rsp), %rdi
movq %rdi, 0x88(%rsp)
callq 0xb690
movq 0x88(%rsp), %rdx
leaq 0x1724a(%rip), %rsi     # 0xd774f
leaq 0x1c0(%rsp), %rdi
callq 0xb4c0
jmp 0xc0514
xorl %eax, %eax
movl %eax, %esi
leaq 0x1a8(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0xfbe0
movq 0x80(%rsp), %rcx
leaq 0x57e87(%rip), %rdi     # 0x1183c3
leaq 0x1c0(%rsp), %rsi
movl $0x3, %edx
callq 0x34c70
jmp 0xc0550
leaq 0x1a8(%rsp), %rdi
callq 0xfc00
leaq 0x1c0(%rsp), %rdi
callq 0xb6e8
leaq 0x1bf(%rsp), %rdi
callq 0xb3f0
jmp 0xc0612
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e8(%rsp)
movl %eax, 0x1e4(%rsp)
leaq 0x1f0(%rsp), %rdi
callq 0x1a950
leaq 0x200(%rsp), %rdi
callq 0x1a950
leaq 0x218(%rsp), %rdi
callq 0x1a950
jmp 0xc0ae3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e8(%rsp)
movl %eax, 0x1e4(%rsp)
jmp 0xc0600
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e8(%rsp)
movl %eax, 0x1e4(%rsp)
leaq 0x1a8(%rsp), %rdi
callq 0xfc00
leaq 0x1c0(%rsp), %rdi
callq 0xb6e8
leaq 0x1bf(%rsp), %rdi
callq 0xb3f0
jmp 0xc0ac9
movq 0xa0(%rsp), %rdi
movq 0x228(%rsp), %rsi
addq $0x78, %rdi
callq 0xbd6c0
jmp 0xc062d
movq 0xa0(%rsp), %rdi
addq $0x78, %rdi
callq 0x221a0
movq %rax, 0x1a0(%rsp)
movq 0xa0(%rsp), %rdi
addq $0x78, %rdi
callq 0x22010
movq %rax, 0x198(%rsp)
leaq 0x1a0(%rsp), %rdi
leaq 0x198(%rsp), %rsi
callq 0xbd540
testb $0x1, %al
jne 0xc067d
jmp 0xc0ac1
leaq 0x1a0(%rsp), %rdi
callq 0xbd580
movq %rax, %rdi
callq 0x1bb50
movq %rax, %rdi
movb $0x0, 0x177(%rsp)
callq 0x3f060
movq %rax, 0x78(%rsp)
jmp 0xc06a9
movq 0x78(%rsp), %rdi
callq 0x1a660
movq %rax, 0x60(%rsp)
leaq 0x57de9(%rip), %rsi     # 0x1184a8
leaq 0x188(%rsp), %rdi
movq %rdi, 0x68(%rsp)
callq 0x1a920
movq 0x60(%rsp), %rdi
movq 0x68(%rsp), %rsi
callq 0x9f1a0
movb %al, 0x77(%rsp)
jmp 0xc06e6
movb 0x77(%rsp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0x5f(%rsp)
jne 0xc06f7
jmp 0xc076a
leaq 0x1a0(%rsp), %rdi
callq 0xbd580
movq %rax, %rdi
callq 0x1bb50
movq %rax, %rdi
callq 0x3f070
movq %rax, 0x50(%rsp)
jmp 0xc071b
movq 0x50(%rsp), %rdi
callq 0x1a660
movq %rax, 0x38(%rsp)
leaq 0x57d77(%rip), %rsi     # 0x1184a8
leaq 0x178(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0x1a920
movq 0x38(%rsp), %rdi
movq 0x40(%rsp), %rsi
movb $0x1, 0x177(%rsp)
callq 0x9f1a0
movb %al, 0x4f(%rsp)
jmp 0xc0760
movb 0x4f(%rsp), %al
xorb $-0x1, %al
movb %al, 0x5f(%rsp)
movb 0x5f(%rsp), %al
movb %al, 0x37(%rsp)
testb $0x1, 0x177(%rsp)
jne 0xc077e
jmp 0xc078b
leaq 0x178(%rsp), %rdi
callq 0x1a950
leaq 0x188(%rsp), %rdi
callq 0x1a950
movb 0x37(%rsp), %al
testb $0x1, %al
jne 0xc07a5
jmp 0xc0916
leaq 0x1a0(%rsp), %rdi
callq 0xbd580
movq %rax, %rdi
callq 0x1bb50
movq %rax, %rsi
movq (%rsi), %rax
movq 0x18(%rax), %rax
leaq 0x130(%rsp), %rdi
callq *%rax
jmp 0xc07d0
leaq 0x16fa0(%rip), %rdx     # 0xd7777
leaq 0x150(%rsp), %rdi
leaq 0x130(%rsp), %rsi
callq 0xfa60
jmp 0xc07ee
xorl %eax, %eax
movl %eax, %esi
leaq 0x120(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0xfbe0
movq 0x28(%rsp), %rcx
leaq 0x57bb3(%rip), %rdi     # 0x1183c3
leaq 0x150(%rsp), %rsi
movl $0x3, %edx
callq 0x34c70
jmp 0xc0824
leaq 0x120(%rsp), %rdi
callq 0xfc00
leaq 0x150(%rsp), %rdi
callq 0xb6e8
leaq 0x130(%rsp), %rdi
callq 0xb6e8
jmp 0xc0916
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e8(%rsp)
movl %eax, 0x1e4(%rsp)
jmp 0xc0ac9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e8(%rsp)
movl %eax, 0x1e4(%rsp)
jmp 0xc08ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e8(%rsp)
movl %eax, 0x1e4(%rsp)
testb $0x1, 0x177(%rsp)
jne 0xc089f
jmp 0xc08ac
leaq 0x178(%rsp), %rdi
callq 0x1a950
jmp 0xc08ae
leaq 0x188(%rsp), %rdi
callq 0x1a950
jmp 0xc0ac9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e8(%rsp)
movl %eax, 0x1e4(%rsp)
jmp 0xc0904
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e8(%rsp)
movl %eax, 0x1e4(%rsp)
leaq 0x120(%rsp), %rdi
callq 0xfc00
leaq 0x150(%rsp), %rdi
callq 0xb6e8
leaq 0x130(%rsp), %rdi
callq 0xb6e8
jmp 0xc0ac9
leaq 0x1a0(%rsp), %rdi
callq 0xbd580
movq %rax, %rdi
callq 0x1bb50
movq %rax, %rdi
callq 0x1bed0
movq %rax, 0x20(%rsp)
jmp 0xc093a
movq 0x20(%rsp), %rdi
callq 0x1a660
movq %rax, 0x8(%rsp)
leaq 0x57b58(%rip), %rsi     # 0x1184a8
leaq 0x110(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x1a920
movq 0x8(%rsp), %rdi
movq 0x10(%rsp), %rsi
callq 0x9f1a0
movb %al, 0x1f(%rsp)
jmp 0xc0977
leaq 0x110(%rsp), %rdi
callq 0x1a950
movb 0x1f(%rsp), %al
testb $0x1, %al
jne 0xc0991
jmp 0xc0aad
leaq 0x1a0(%rsp), %rdi
callq 0xbd580
movq %rax, %rdi
callq 0x1bb50
movq %rax, %rsi
movq (%rsi), %rax
movq 0x18(%rax), %rax
leaq 0xd0(%rsp), %rdi
callq *%rax
jmp 0xc09bc
leaq 0x16df1(%rip), %rdx     # 0xd77b4
leaq 0xf0(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
callq 0xfa60
jmp 0xc09da
xorl %eax, %eax
movl %eax, %esi
leaq 0xc0(%rsp), %rdi
movq %rdi, (%rsp)
callq 0xfbe0
movq (%rsp), %rcx
leaq 0x579c9(%rip), %rdi     # 0x1183c3
leaq 0xf0(%rsp), %rsi
movl $0x3, %edx
callq 0x34c70
jmp 0xc0a0e
leaq 0xc0(%rsp), %rdi
callq 0xfc00
leaq 0xf0(%rsp), %rdi
callq 0xb6e8
leaq 0xd0(%rsp), %rdi
callq 0xb6e8
jmp 0xc0aad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e8(%rsp)
movl %eax, 0x1e4(%rsp)
leaq 0x110(%rsp), %rdi
callq 0x1a950
jmp 0xc0ac9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e8(%rsp)
movl %eax, 0x1e4(%rsp)
jmp 0xc0a9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1e8(%rsp)
movl %eax, 0x1e4(%rsp)
leaq 0xc0(%rsp), %rdi
callq 0xfc00
leaq 0xf0(%rsp), %rdi
callq 0xb6e8
leaq 0xd0(%rsp), %rdi
callq 0xb6e8
jmp 0xc0ac9
jmp 0xc0aaf
leaq 0x1a0(%rsp), %rdi
callq 0xbd610
jmp 0xc0646
addq $0x238, %rsp            # imm = 0x238
retq
movq 0x90(%rsp), %rdi
callq 0x1adb0
movq 0xa0(%rsp), %rdi
callq 0xb0270
movq 0x1e8(%rsp), %rdi
callq 0xb680