// File: menhits[P]phplus/src/Actions/FunctionAction.cpp
// Function: FunctionAction::FunctionAction(std::shared_ptr<ActionData>, std::shared_ptr<StackFrame>)
FunctionAction(Action actionIn, shared_ptr<StackFrame> stackFameIn):
		ActionData(actionIn->getReturnType(), stackFameIn->getLeftInType(), stackFameIn->getRightInType())
	{
		stackFame=stackFameIn;
		action=actionIn;
		node=nullptr;
		
		setDescription("function ("+getInLeftType()->getString()+"."+getInRightType()->getString()+" > "+getReturnType()->getString()+")");
		
		if (action->getInLeftType()!=Void || action->getInRightType()!=Void)
		{
			throw PhplusError(action->getDescription() + " put into function even though its inputs are not void", INTERNAL_ERROR);
		}
	}

// Assembly:
subq $0x248, %rsp            # imm = 0x248
movq %rsi, 0x58(%rsp)
movq %rdi, %rax
movq 0x58(%rsp), %rdi
movq %rdi, 0x60(%rsp)
movq %rdx, 0x70(%rsp)
movq %rax, 0x240(%rsp)
movq %rdi, 0x238(%rsp)
movq %rdx, 0x230(%rsp)
movq 0x240(%rsp), %rax
movq %rax, 0x68(%rsp)
callq 0x1bb50
movq %rax, %rdi
callq 0x1bed0
movq %rax, %rsi
leaq 0x220(%rsp), %rdi
callq 0x1a920
movq 0x70(%rsp), %rdi
callq 0x3ea80
movq %rax, %rsi
leaq 0x210(%rsp), %rdi
callq 0x9c1d0
jmp 0xb7dbc
movq 0x70(%rsp), %rdi
callq 0x3ea80
movq %rax, %rsi
leaq 0x1f0(%rsp), %rdi
callq 0x9c230
jmp 0xb7dd8
movq 0x68(%rsp), %rdi
leaq 0x220(%rsp), %rsi
leaq 0x210(%rsp), %rdx
leaq 0x1f0(%rsp), %rcx
callq 0xaf570
jmp 0xb7dfc
leaq 0x1f0(%rsp), %rdi
callq 0x1a950
leaq 0x210(%rsp), %rdi
callq 0x1a950
leaq 0x220(%rsp), %rdi
callq 0x1a950
movq 0x68(%rsp), %rdi
leaq 0x5f769(%rip), %rax     # 0x117598
movq %rax, (%rdi)
addq $0x78, %rdi
movq %rdi, 0x30(%rsp)
callq 0x3e9d0
movq 0x68(%rsp), %rdi
addq $0x88, %rdi
movq %rdi, 0x38(%rsp)
xorl %eax, %eax
movl %eax, %esi
movq %rsi, 0x48(%rsp)
callq 0x1bcd0
movq 0x48(%rsp), %rsi
movq 0x68(%rsp), %rdi
addq $0x98, %rdi
movq %rdi, 0x40(%rsp)
callq 0x1b1d0
movq 0x30(%rsp), %rdi
movq 0x70(%rsp), %rsi
callq 0x3e9f0
movq 0x38(%rsp), %rdi
movq 0x60(%rsp), %rsi
callq 0x1a510
movq 0x40(%rsp), %rdi
movq 0x48(%rsp), %rsi
callq 0xb8980
movq 0x68(%rsp), %rdi
callq 0x3f060
movq %rax, 0x50(%rsp)
jmp 0xb7eb8
movq 0x50(%rsp), %rdi
callq 0x1a660
movq %rax, %rsi
movq (%rsi), %rax
movq 0x8(%rax), %rax
leaq 0x110(%rsp), %rdi
callq *%rax
jmp 0xb7ed8
leaq 0x1f300(%rip), %rsi     # 0xd71df
leaq 0x130(%rsp), %rdi
leaq 0x110(%rsp), %rdx
callq 0x1bcf0
jmp 0xb7ef6
leaq 0x1d57c(%rip), %rdx     # 0xd5479
leaq 0x150(%rsp), %rdi
leaq 0x130(%rsp), %rsi
callq 0xfa60
jmp 0xb7f14
movq 0x68(%rsp), %rdi
callq 0x3f070
movq %rax, 0x28(%rsp)
jmp 0xb7f25
movq 0x28(%rsp), %rdi
callq 0x1a660
movq %rax, %rsi
movq (%rsi), %rax
movq 0x8(%rax), %rax
leaq 0xf0(%rsp), %rdi
callq *%rax
jmp 0xb7f45
leaq 0x170(%rsp), %rdi
leaq 0x150(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x1bf20
jmp 0xb7f64
leaq 0x1f27f(%rip), %rdx     # 0xd71ea
leaq 0x190(%rsp), %rdi
leaq 0x170(%rsp), %rsi
callq 0xfa60
jmp 0xb7f82
movq 0x68(%rsp), %rdi
callq 0x1bed0
movq %rax, 0x20(%rsp)
jmp 0xb7f93
movq 0x20(%rsp), %rdi
callq 0x1a660
movq %rax, %rsi
movq (%rsi), %rax
movq 0x8(%rax), %rax
leaq 0xd0(%rsp), %rdi
callq *%rax
jmp 0xb7fb3
leaq 0x1b0(%rsp), %rdi
leaq 0x190(%rsp), %rsi
leaq 0xd0(%rsp), %rdx
callq 0x1bf20
jmp 0xb7fd2
leaq 0x1dd18(%rip), %rdx     # 0xd5cf1
leaq 0x1d0(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
callq 0xfa60
jmp 0xb7ff0
movq 0x68(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0xb0680
jmp 0xb8004
leaq 0x1d0(%rsp), %rdi
callq 0xb6e8
leaq 0x1b0(%rsp), %rdi
callq 0xb6e8
leaq 0xd0(%rsp), %rdi
callq 0xb6e8
leaq 0x190(%rsp), %rdi
callq 0xb6e8
leaq 0x170(%rsp), %rdi
callq 0xb6e8
leaq 0xf0(%rsp), %rdi
callq 0xb6e8
leaq 0x150(%rsp), %rdi
callq 0xb6e8
leaq 0x130(%rsp), %rdi
callq 0xb6e8
leaq 0x110(%rsp), %rdi
callq 0xb6e8
movq 0x68(%rsp), %rdi
addq $0x88, %rdi
callq 0x1bb50
movq %rax, %rdi
callq 0x3f060
movq %rax, 0x18(%rsp)
jmp 0xb8099
movq 0x18(%rsp), %rdi
leaq 0x60403(%rip), %rsi     # 0x1184a8
callq 0x1be90
testb $0x1, %al
jne 0xb80e8
movq 0x68(%rsp), %rdi
addq $0x88, %rdi
callq 0x1bb50
movq %rax, %rdi
callq 0x3f070
movq %rax, 0x10(%rsp)
jmp 0xb80ce
movq 0x10(%rsp), %rdi
leaq 0x603ce(%rip), %rsi     # 0x1184a8
callq 0x1be90
testb $0x1, %al
jne 0xb80e8
jmp 0xb83e3
movb $0x1, 0x7f(%rsp)
movl $0x38, %edi
callq 0xb1f0
movq 0x68(%rsp), %rdi
movq %rax, 0x8(%rsp)
addq $0x88, %rdi
callq 0x1bb50
movq %rax, %rsi
movq (%rsi), %rax
movq 0x18(%rax), %rax
leaq 0x90(%rsp), %rdi
callq *%rax
jmp 0xb8123
leaq 0x1f0c4(%rip), %rdx     # 0xd71ee
leaq 0xb0(%rsp), %rdi
leaq 0x90(%rsp), %rsi
callq 0xfa60
jmp 0xb8141
xorl %eax, %eax
movl %eax, %esi
leaq 0x80(%rsp), %rdi
movq %rdi, (%rsp)
callq 0xfbe0
movq 0x8(%rsp), %rdi
movq (%rsp), %rcx
leaq 0xb0(%rsp), %rsi
movl $0x3, %edx
callq 0x35600
jmp 0xb8173
movq 0x8(%rsp), %rdi
movb $0x0, 0x7f(%rsp)
leaq 0x5d444(%rip), %rsi     # 0x1155c8
leaq -0x9db1b(%rip), %rdx    # 0x1a670
callq 0xb640
jmp 0xb8420
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0xb81ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0xb81e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
leaq 0x1f0(%rsp), %rdi
callq 0x1a950
leaq 0x210(%rsp), %rdi
callq 0x1a950
leaq 0x220(%rsp), %rdi
callq 0x1a950
jmp 0xb8413
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0xb83eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0xb8355
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0xb8348
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0xb833b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0xb832e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0xb8321
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0xb8314
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0xb8307
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0xb82fa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
leaq 0x1d0(%rsp), %rdi
callq 0xb6e8
leaq 0x1b0(%rsp), %rdi
callq 0xb6e8
leaq 0xd0(%rsp), %rdi
callq 0xb6e8
leaq 0x190(%rsp), %rdi
callq 0xb6e8
leaq 0x170(%rsp), %rdi
callq 0xb6e8
leaq 0xf0(%rsp), %rdi
callq 0xb6e8
leaq 0x150(%rsp), %rdi
callq 0xb6e8
leaq 0x130(%rsp), %rdi
callq 0xb6e8
leaq 0x110(%rsp), %rdi
callq 0xb6e8
jmp 0xb83eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0xb83ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0xb83c1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
leaq 0x80(%rsp), %rdi
callq 0xfc00
leaq 0xb0(%rsp), %rdi
callq 0xb6e8
leaq 0x90(%rsp), %rdi
callq 0xb6e8
testb $0x1, 0x7f(%rsp)
jne 0xb83d7
jmp 0xb83e1
movq 0x8(%rsp), %rdi
callq 0xb2d0
jmp 0xb83eb
addq $0x248, %rsp            # imm = 0x248
retq
movq 0x40(%rsp), %rdi
callq 0x1b3f0
movq 0x38(%rsp), %rdi
callq 0x1acc0
movq 0x30(%rsp), %rdi
callq 0x1bb40
movq 0x68(%rsp), %rdi
callq 0xb0270
movq 0x208(%rsp), %rdi
callq 0xb680