// File: 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
subq $0x90, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x78(%rbp)
movl -0x1c(%rbp), %esi
callq 0x104b0
movq -0x78(%rbp), %rax
leaq 0x7316b(%rip), %rcx     # 0x81c40
addq $0x10, %rcx
movq %rcx, (%rax)
movq $0x0, 0x18(%rax)
movl $0x0, 0x20(%rax)
movb $0x0, 0x30(%rax)
movb $0x0, 0x31(%rax)
cmpq $0x0, -0x18(%rbp)
jne 0xeb38
movq 0x734c7(%rip), %rdi     # 0x81fc8
leaq 0x52f62(%rip), %rsi     # 0x61a6a
callq 0x9500
movq %rax, -0x80(%rbp)
jmp 0xeb13
movq -0x80(%rbp), %rdi
movq 0x7347a(%rip), %rsi     # 0x81f98
callq 0x95a0
jmp 0xeb25
jmp 0xeb38
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0xecbe
movq -0x78(%rbp), %rax
movq -0x10(%rbp), %rcx
movq %rcx, 0x28(%rax)
movq -0x18(%rbp), %rcx
movq %rcx, 0x18(%rax)
movq 0x18(%rax), %rsi
leaq -0x50(%rbp), %rdi
callq 0x9240
jmp 0xeb5b
leaq -0x50(%rbp), %rdi
callq 0xda40
movb %al, -0x81(%rbp)
jmp 0xeb6c
leaq -0x50(%rbp), %rdi
callq 0x9c30
movb -0x81(%rbp), %al
testb $0x1, %al
jne 0xeb84
jmp 0xec71
movq -0x78(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x70(%rbp), %rdi
callq 0x9240
jmp 0xeb97
leaq -0x70(%rbp), %rdi
callq 0xe310
movb %al, -0x82(%rbp)
jmp 0xeba8
leaq -0x70(%rbp), %rdi
callq 0x9c30
movb -0x82(%rbp), %al
testb $0x1, %al
jne 0xebbd
jmp 0xec14
movq -0x78(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x9220
movq %rax, %rdi
callq 0x98f0
movl %eax, %ecx
movq -0x78(%rbp), %rax
movl %ecx, 0x20(%rax)
jmp 0xec67
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x9c30
jmp 0xecbe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x9c30
jmp 0xecbe
movq -0x78(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x9220
movq %rax, %rdi
callq 0x96d0
movq -0x78(%rbp), %rax
cvttsd2si %xmm0, %ecx
movl %ecx, 0x20(%rax)
movq 0x7338d(%rip), %rdi     # 0x81fc8
leaq 0x52e4a(%rip), %rsi     # 0x61a8c
callq 0x9500
movq %rax, -0x90(%rbp)
jmp 0xec50
movq -0x90(%rbp), %rdi
movq 0x7333a(%rip), %rsi     # 0x81f98
callq 0x95a0
jmp 0xec65
jmp 0xec67
movq -0x78(%rbp), %rax
movb $0x1, 0x30(%rax)
jmp 0xec9d
movq -0x78(%rbp), %rax
movq 0x18(%rax), %rdi
leaq 0x4e82c(%rip), %rsi     # 0x5d4ac
xorl %eax, %eax
movl %eax, %edx
callq 0x9be0
cmpq $-0x1, %rax
je 0xec9b
movq -0x78(%rbp), %rax
movb $0x1, 0x31(%rax)
movb $0x1, 0x30(%rax)
jmp 0xec9d
movq -0x78(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0xecb5
movq -0x78(%rbp), %rsi
movq 0x28(%rsi), %rdi
callq 0x18df0
addq $0x90, %rsp
popq %rbp
retq
movq -0x78(%rbp), %rdi
callq 0x11b20
movq -0x28(%rbp), %rdi
callq 0x9a90