// File: syusui-s[P]old_rpn_language/./element.h
// Function: calc_array(Element**, int)
Element** calc_array(Element** x, int length){
	Element* ins;
	int pos=0;
	int numop=0;

	if(length == 1){
		
	}

	while(length > 1){
		pos=-1;
		pos = findop(x,length); //	演算子の位置をposに代入
		numop = op_num(x[pos]->data_is()); // オペランド数を調べる
		if(pos-numop<0) throw((std::string)"書式が間違っています。演算子の位置がおかしいようです。");
		ins = calc_elements(take_elements(x, pos-numop, numop),x[pos]->data_is()); // 演算子とオペランドをcalc_elementsに渡し、計算結果を得る
		pos-=numop; // 削除および挿入の開始位置を指定
		x = ins_element(del_array(x,length,pos,numop+1), ins, length-numop-1, pos);
		length-=numop; // 計算後の配列の長さをlengthに代入
	}
	return x;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl $0x0, -0x1c(%rbp)
movl $0x0, -0x20(%rbp)
cmpl $0x1, -0xc(%rbp)
jne 0x8848
jmp 0x8848
jmp 0x884a
cmpl $0x1, -0xc(%rbp)
jle 0x8a29
movl $0xffffffff, -0x1c(%rbp) # imm = 0xFFFFFFFF
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
callq 0x5c90
movl %eax, -0x1c(%rbp)
movq -0x8(%rbp), %rax
movslq -0x1c(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
leaq -0x40(%rbp), %rdi
movq %rdi, -0x80(%rbp)
callq 0x58e0
movq -0x80(%rbp), %rdi
callq 0x5e40
movl %eax, -0x74(%rbp)
jmp 0x8891
movl -0x74(%rbp), %eax
movl %eax, -0x20(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x3448
movl -0x1c(%rbp), %eax
subl -0x20(%rbp), %eax
cmpl $0x0, %eax
jge 0x8962
movb $0x1, -0x4e(%rbp)
movl $0x20, %edi
callq 0x3130
movq %rax, -0x90(%rbp)
movq %rax, -0x98(%rbp)
leaq -0x4d(%rbp), %rdi
movq %rdi, -0x88(%rbp)
callq 0x33c0
movq -0x90(%rbp), %rdi
movq -0x88(%rbp), %rdx
leaq 0x195c(%rip), %rsi      # 0xa24c
callq 0x9180
jmp 0x88f7
movq -0x98(%rbp), %rdi
movb $0x0, -0x4e(%rbp)
leaq 0x547f(%rip), %rsi      # 0xdd88
movq 0x56a8(%rip), %rdx      # 0xdfb8
callq 0x3390
jmp 0x8a3f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x3448
jmp 0x8a36
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x4d(%rbp), %rdi
callq 0x3280
testb $0x1, -0x4e(%rbp)
jne 0x8951
jmp 0x895d
movq -0x98(%rbp), %rdi
callq 0x3190
jmp 0x8a36
movq -0x8(%rbp), %rdi
movl -0x1c(%rbp), %esi
movl -0x20(%rbp), %edx
subl %edx, %esi
callq 0x5dc0
movq %rax, -0xb0(%rbp)
movq -0x8(%rbp), %rax
movslq -0x1c(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
leaq -0x70(%rbp), %rdi
movq %rdi, -0xa8(%rbp)
callq 0x58e0
movq -0xb0(%rbp), %rdi
movq -0xa8(%rbp), %rsi
callq 0x8300
movq %rax, -0xa0(%rbp)
jmp 0x89b2
movq -0xa0(%rbp), %rax
movq %rax, -0x18(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x3448
movl -0x20(%rbp), %ecx
movl -0x1c(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x1c(%rbp)
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
movl -0x1c(%rbp), %edx
movl -0x20(%rbp), %ecx
addl $0x1, %ecx
callq 0x8670
movq %rax, %rdi
movq -0x18(%rbp), %rsi
movl -0xc(%rbp), %edx
subl -0x20(%rbp), %edx
subl $0x1, %edx
movl -0x1c(%rbp), %ecx
callq 0x8750
movq %rax, -0x8(%rbp)
movl -0x20(%rbp), %ecx
movl -0xc(%rbp), %eax
subl %ecx, %eax
movl %eax, -0xc(%rbp)
jmp 0x884a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x3448
jmp 0x8a36
movq -0x8(%rbp), %rax
addq $0xb0, %rsp
popq %rbp
retq
movq -0x48(%rbp), %rdi
callq 0x33b0
nop