// File: /workspace/github_cpp_makefile_star2_O2/menhits[P]phplus/src/Actions/Action.cpp
// Function: LambdaAction::LambdaAction(std::shared_ptr<TypeBase>, std::shared_ptr<TypeBase>, std::shared_ptr<TypeBase>, std::function<void* (void*, void*)>, std::function<void (std::shared_ptr<ActionData>, std::shared_ptr<ActionData>, CppProgram*)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
LambdaAction(Type inLeftTypeIn, Type inRightTypeIn, Type returnTypeIn,
		function<void*(void*,void*)> lambdaIn,
		function<void(Action inLeft, Action inRight, CppProgram* prog)> cppWriterIn,
		string textIn)
			: ActionData(returnTypeIn, inLeftTypeIn, inRightTypeIn)
	{
		if (cppWriterIn==nullptr)
		{
			cppWriter=[=](Action inLeft, Action inRight, CppProgram* prog)
			{
				prog->comment("lambda action '"+textIn+"' has not yet been implemented for C++");
			};
		}
		else
		{
			cppWriter=cppWriterIn;
		}
		
		if (lambdaIn==nullptr)
		{
			lambdaIn=[=](void* inLeft, void* inRight)->void*
			{
				throw PhplusError("action '"+textIn+"' has not yet been implemented for the interpreter", RUNTIME_ERROR);
			};
		}
		else
		{
			lambda=lambdaIn;
		}
		
		setDescription(textIn);
	}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x78, %rsp
movq %r9, %rbp
movq %r8, (%rsp)
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
leaq 0x48(%rsp), %r13
movq %r13, %rdi
movq %rcx, %rsi
callq 0x12c0a
leaq 0x38(%rsp), %r12
movq %r12, %rdi
movq %r15, %rsi
callq 0x12c0a
leaq 0x28(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0x12c0a
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r15, %rcx
callq 0x44704
movq 0xb0(%rsp), %r13
leaq 0x30(%rsp), %rdi
callq 0xc984
leaq 0x40(%rsp), %rdi
callq 0xc984
leaq 0x50(%rsp), %rdi
callq 0xc984
leaq 0x344d2(%rip), %rax     # 0x790f0
movq %rax, (%rbx)
leaq 0x78(%rbx), %r14
leaq 0xc8(%rbx), %rax
xorps %xmm0, %xmm0
movups %xmm0, 0x78(%rbx)
movups %xmm0, 0x88(%rbx)
movups %xmm0, 0x98(%rbx)
movups %xmm0, 0xa8(%rbx)
movq %rax, 0xb8(%rbx)
andq $0x0, 0xc0(%rbx)
leaq 0x98(%rbx), %r15
movb $0x0, 0xc8(%rbx)
cmpq $0x0, 0x10(%rbp)
je 0x44c7d
movq %r15, %rdi
movq %rbp, %rsi
callq 0x44fd8
movq (%rsp), %r12
jmp 0x44ca5
leaq 0x8(%rsp), %rdi
movq %r13, %rsi
callq 0xa3b0
movq (%rsp), %r12
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x44f8a
leaq 0x8(%rsp), %rdi
callq 0xa558
cmpq $0x0, 0x10(%r12)
je 0x44cba
movq %r14, %rdi
movq %r12, %rsi
callq 0x45074
jmp 0x44cde
leaq 0x8(%rsp), %rdi
movq %r13, %rsi
callq 0xa3b0
leaq 0x8(%rsp), %rsi
movq %r12, %rdi
callq 0x45026
leaq 0x8(%rsp), %rdi
callq 0xa558
leaq 0x58(%rsp), %rdi
movq %r13, %rsi
callq 0xa3b0
leaq 0x58(%rbx), %rdi
leaq 0x58(%rsp), %rsi
callq 0xa1d0
leaq 0x58(%rsp), %rdi
callq 0xa558
addq $0x78, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x44d16
jmp 0x44d54
movq %rax, %r12
leaq 0x8(%rsp), %rdi
jmp 0x44d2a
jmp 0x44d54
movq %rax, %r12
leaq 0x58(%rsp), %rdi
callq 0xa558
jmp 0x44d57
movq %rax, %r12
leaq 0x30(%rsp), %rdi
callq 0xc984
leaq 0x40(%rsp), %rdi
callq 0xc984
leaq 0x50(%rsp), %rdi
callq 0xc984
jmp 0x44d7b
movq %rax, %r12
leaq 0xb8(%rbx), %rdi
callq 0xa558
movq %r15, %rdi
callq 0x182be
movq %r14, %rdi
callq 0x182be
movq %rbx, %rdi
callq 0x44e86
movq %r12, %rdi
callq 0xa500
nop