// File: /workspace/github_cpp_makefile_star2_O3/araujoigor[P]ipp-compiler/./src/include/IRepeat.hpp
// Function: IRepeat::IRepeat(IBlock*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, int)
IRepeat(IBlock *block, string *var, int myline) : IStatement(myline){
		if(var == NULL)
			cout << "Erro: valor vazio para repeticao." << endl;

		innerBlock = block;

		varname = var;

		/* Se o valor for um numero, o repita se baseia em contadores numericos */
		if(IMath::isNumber(*varname)){
			if(IMath::isInteger(*varname))
				value = atoi(varname->c_str());
			else{
				/* Se for um valor real, mostramos o warning de arrendondamento */
				value = (int)atof(varname->c_str());
				//warning
				cout << "Atencao: a utilizacao de um valor real em uma expressao \'repita\' causa arredondamento para cima (i.e, `repita 3.3 vezes` repetiria o bloco de código 4 vezes)." << endl;
			}

			isValue = true;
		}
		/* Se o valor for uma string, setamos os boleanos correspondentes */
		else if(varname->find("\"") != std::string::npos)
			isValue = isStrValue = true;

		if(innerBlock != NULL)
			innerBlock->setStatementOwner(this);
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x40, %rsp
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
xorpd %xmm0, %xmm0
movupd %xmm0, 0x10(%rdi)
movl %ecx, 0x8(%rdi)
leaq 0x30ff5(%rip), %rax     # 0x3bc50
movq %rax, (%rdi)
movl $0x0, 0x20(%rdi)
movw $0x0, 0x30(%rdi)
testq %rdx, %rdx
jne 0xacb3
movq 0x31351(%rip), %r12     # 0x3bfc8
leaq 0x249cd(%rip), %rsi     # 0x2f64b
movl $0x21, %edx
movq %r12, %rdi
callq 0x7460
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x7360
movsbl %al, %esi
movq %r12, %rdi
callq 0x7030
movq %rax, %rdi
callq 0x72b0
movq %r15, 0x28(%rbx)
movq %r14, 0x18(%rbx)
leaq -0x50(%rbp), %r15
movq %r15, -0x10(%r15)
movq (%r14), %rsi
movq 0x8(%r14), %rdx
addq %rsi, %rdx
leaq -0x60(%rbp), %r14
movq %r14, %rdi
callq 0xfbae
movq %r14, %rdi
callq 0xa194
movl %eax, %r14d
movq -0x60(%rbp), %rdi
cmpq %r15, %rdi
je 0xacf2
callq 0x7350
movq 0x18(%rbx), %rdi
testb %r14b, %r14b
je 0xad48
leaq -0x30(%rbp), %r15
movq %r15, -0x10(%r15)
movq (%rdi), %rsi
movq 0x8(%rdi), %rdx
addq %rsi, %rdx
leaq -0x40(%rbp), %r14
movq %r14, %rdi
callq 0xfbae
movq %r14, %rdi
callq 0xa826
movl %eax, %r14d
movq -0x40(%rbp), %rdi
cmpq %r15, %rdi
je 0xad32
callq 0x7350
movq 0x18(%rbx), %rax
movq (%rax), %rdi
testb %r14b, %r14b
je 0xad67
callq 0x7690
movl %eax, 0x20(%rbx)
jmp 0xadb5
leaq 0x2031f(%rip), %rsi     # 0x2b06e
movl $0x1, %ecx
xorl %edx, %edx
callq 0x7790
cmpq $-0x1, %rax
je 0xadb9
movb $0x1, 0x31(%rbx)
jmp 0xadb5
callq 0x74f0
cvttsd2si %xmm0, %eax
movl %eax, 0x20(%rbx)
movq 0x3124e(%rip), %r14     # 0x3bfc8
leaq 0x248ec(%rip), %rsi     # 0x2f66d
movl $0x9f, %edx
movq %r14, %rdi
callq 0x7460
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x7360
movsbl %al, %esi
movq %r14, %rdi
callq 0x7030
movq %rax, %rdi
callq 0x72b0
movb $0x1, 0x30(%rbx)
movq 0x28(%rbx), %rax
testq %rax, %rax
je 0xadc6
movq %rbx, 0x38(%rax)
addq $0x40, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq -0x40(%rbp), %rdi
jmp 0xade3
movq %rax, %rbx
movq -0x60(%rbp), %rdi
cmpq %r15, %rdi
je 0xaded
callq 0x7350
movq %rbx, %rdi
callq 0x77b0
nop