// File: /workspace/github_cpp_makefile_star2_O1/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 0x30f35(%rip), %rax     # 0x3cc50
movq %rax, (%rdi)
movl $0x0, 0x20(%rdi)
movw $0x0, 0x30(%rdi)
testq %rdx, %rdx
jne 0xbd73
movq 0x31291(%rip), %r12     # 0x3cfc8
leaq 0x24969(%rip), %rsi     # 0x306a7
movl $0x21, %edx
movq %r12, %rdi
callq 0x8460
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x8360
movsbl %al, %esi
movq %r12, %rdi
callq 0x8030
movq %rax, %rdi
callq 0x82b0
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 0x10d2a
movq %r14, %rdi
callq 0xb254
movl %eax, %r14d
movq -0x60(%rbp), %rdi
cmpq %r15, %rdi
je 0xbdb2
callq 0x8350
movq 0x18(%rbx), %rdi
testb %r14b, %r14b
je 0xbe08
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 0x10d2a
movq %r14, %rdi
callq 0xb8e6
movl %eax, %r14d
movq -0x40(%rbp), %rdi
cmpq %r15, %rdi
je 0xbdf2
callq 0x8350
movq 0x18(%rbx), %rax
movq (%rax), %rdi
testb %r14b, %r14b
je 0xbe27
callq 0x8690
movl %eax, 0x20(%rbx)
jmp 0xbe75
leaq 0x2028f(%rip), %rsi     # 0x2c09e
movl $0x1, %ecx
xorl %edx, %edx
callq 0x8790
cmpq $-0x1, %rax
je 0xbe79
movb $0x1, 0x31(%rbx)
jmp 0xbe75
callq 0x84f0
cvttsd2si %xmm0, %eax
movl %eax, 0x20(%rbx)
movq 0x3118e(%rip), %r14     # 0x3cfc8
leaq 0x24888(%rip), %rsi     # 0x306c9
movl $0x9f, %edx
movq %r14, %rdi
callq 0x8460
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x8360
movsbl %al, %esi
movq %r14, %rdi
callq 0x8030
movq %rax, %rdi
callq 0x82b0
movb $0x1, 0x30(%rbx)
movq 0x28(%rbx), %rax
testq %rax, %rax
je 0xbe86
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 0xbea3
movq %rax, %rbx
movq -0x60(%rbp), %rdi
cmpq %r15, %rdi
je 0xbead
callq 0x8350
movq %rbx, %rdi
callq 0x87b0
nop