// File: /workspace/github_cpp_makefile_star2_O2/araujoigor[P]ipp-compiler/./src/include/IMath.hpp
// Function: IMath::checkAndGetExpression[abi:cxx11](IBlock*, int)
std::string checkAndGetExpression(IBlock *ownerBlock, int myLine) {

		/* Utiliza-se um tokenizer que quebra a expressão matemática nos seus operadores */
		boost::char_separator<char> separator("+-*/() ");
		Tokenizer tokens(expression, separator);

		/* Para cada token, verificamos se exitem erros, como variáveis não declaradas
		 * ou valores String
		 */
		for(auto tokenIterator = tokens.begin(); tokenIterator != tokens.end(); tokenIterator++){
			/* Se o token atual NÃO for um NUMERO, deve ser uma variável */
			if(!isNumber(*tokenIterator)){
				/* Portanto obtemos a variavel */
				IData *data = ownerBlock->getLocalVariable(*tokenIterator);
				std::string errorMsg;

				/* Se não for uma variável, então é uma string ou a variável não foi declarada
				 * Então geramos o erro aproriado
				 */
				if(data == NULL){
					if(tokenIterator->find("\"") != std::string::npos)
						errorMsg = "Impossivel utilizar uma string em uma expressao matematica (valor " + *tokenIterator + ")";
					else
						errorMsg = "Variavel " + *tokenIterator + " nao declarada.";

					throw ISourceErrorException(errorMsg, myLine);
				}
				/* Se for uma variavel string, também geramos um erro.*/
				else if(data->getType() == IString::myType){
					errorMsg = "Impossivel usar uma string em uma expressao matematica (variavel " + *tokenIterator + ")" ;
					throw ISourceErrorException(errorMsg, myLine);
				}
				else if(data->getType() == IReal::myType)
					mathType = TYPE_REAL;
			}else if(!IMath::isInteger(*tokenIterator))
				mathType = TYPE_REAL;
		}

		if(outType == TYPE_INTEGER){
			expression.insert(0, "(int)");
		}

		return expression;
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x348, %rsp            # imm = 0x348
movl %ecx, %r14d
movq %rdx, -0x68(%rbp)
movq %rsi, %r12
movq %rdi, %r15
leaq 0x1b970(%rip), %rsi     # 0x2833a
leaq -0x2e8(%rbp), %rbx
movq %rbx, %rdi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0xceb2
leaq -0x298(%rbp), %rdi
movq %r12, %rsi
movq %rbx, %rdx
callq 0xcf34
movq %r12, -0x38(%rbp)
movq %r15, -0x60(%rbp)
movl %r14d, -0x30(%rbp)
leaq -0x238(%rbp), %rdi
leaq -0x298(%rbp), %rsi
callq 0xcf54
leaq -0x190(%rbp), %r13
leaq -0x298(%rbp), %r15
leaq -0x238(%rbp), %r14
movq %r13, %rdi
movq %r15, %rsi
callq 0xcfc2
movq %r14, %rdi
movq %r13, %rsi
callq 0xcfb4
movl %eax, %ebx
movq %r13, %rdi
callq 0xd022
testb %bl, %bl
je 0xcbab
movq %r14, %rdi
callq 0xd3d8
leaq -0x108(%rbp), %rdi
movq %rax, %rsi
callq 0x85b0
leaq -0x108(%rbp), %r12
movq %r12, %rdi
callq 0xa89e
movl %eax, %ebx
movq %r12, %rdi
callq 0x8930
movq %r14, %rdi
callq 0xd3d8
testb %bl, %bl
je 0xcac7
leaq -0xa8(%rbp), %rdi
movq %rax, %rsi
callq 0x85b0
leaq -0xa8(%rbp), %r12
movq %r12, %rdi
callq 0xadea
movl %eax, %ebx
movq %r12, %rdi
callq 0x8930
testb %bl, %bl
jne 0xcb89
movq -0x38(%rbp), %rax
movl $0x1, 0x38(%rax)
jmp 0xcb89
leaq -0x1b0(%rbp), %r12
movq %r12, %rdi
movq %rax, %rsi
callq 0x85b0
movq -0x68(%rbp), %rdi
movq %r12, %rsi
callq 0xc772
movq %rax, %rbx
movq %r12, %rdi
callq 0x8930
leaq -0x180(%rbp), %rax
movq %rax, -0x190(%rbp)
andq $0x0, -0x188(%rbp)
movb $0x0, -0x180(%rbp)
testq %rbx, %rbx
je 0xccbc
movq (%rbx), %rax
leaq -0x88(%rbp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq *0x10(%rax)
movq %r12, %rdi
leaq 0x2f9a5(%rip), %rsi     # 0x3c4d8
callq 0xce8f
movb %al, -0x29(%rbp)
movq %r12, %rdi
callq 0x8930
cmpb $0x0, -0x29(%rbp)
jne 0xcc0f
movq (%rbx), %rax
movq %r12, %rdi
movq %rbx, %rsi
callq *0x10(%rax)
movq %r12, %rdi
leaq 0x2f995(%rip), %rsi     # 0x3c4f8
callq 0xce8f
movl %eax, %ebx
movq %r12, %rdi
callq 0x8930
testb %bl, %bl
je 0xcb81
movq -0x38(%rbp), %rax
movl $0x1, 0x38(%rax)
movq %r13, %rdi
callq 0x8930
leaq -0x370(%rbp), %rdi
movq %r14, %rsi
xorl %edx, %edx
callq 0xd042
leaq -0x370(%rbp), %rdi
callq 0xd022
jmp 0xca23
leaq -0x238(%rbp), %rdi
callq 0xd022
movq -0x38(%rbp), %r14
cmpl $0x0, 0x3c(%r14)
movq -0x60(%rbp), %rbx
jne 0xcbd7
leaq 0x1b7fa(%rip), %rdx     # 0x283c7
movq %r14, %rdi
xorl %esi, %esi
callq 0x80e0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x85b0
leaq -0x288(%rbp), %rdi
callq 0xd078
leaq -0x2e8(%rbp), %rdi
callq 0xd078
movq %rbx, %rax
addq $0x348, %rsp            # imm = 0x348
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq -0x238(%rbp), %rdi
callq 0xd3d8
leaq 0x1b763(%rip), %rsi     # 0x28385
leaq -0x58(%rbp), %rdi
movq %rax, %rdx
callq 0xc83b
leaq 0x1ce6a(%rip), %rdx     # 0x29a9f
leaq -0x88(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0xc63c
leaq -0x190(%rbp), %rbx
leaq -0x88(%rbp), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x84d0
movq %r14, %rdi
callq 0x8930
leaq -0x58(%rbp), %rdi
callq 0x8930
pushq $0x28
popq %rdi
callq 0x8200
movq %rax, %r14
leaq -0xc8(%rbp), %rdi
movq %rbx, %rsi
callq 0x85b0
movb $0x1, %r15b
leaq -0xc8(%rbp), %rsi
movq %r14, %rdi
movl -0x30(%rbp), %edx
callq 0xc8b2
xorl %r15d, %r15d
leaq 0x2e408(%rip), %rsi     # 0x3b0b0
leaq -0x3bf(%rip), %rdx      # 0xc8f0
movq %r14, %rdi
callq 0x87a0
jmp 0xcdb9
leaq -0x238(%rbp), %rdi
callq 0xd3d8
leaq 0x1b3cf(%rip), %rsi     # 0x2809e
movq %rax, %rdi
xorl %edx, %edx
callq 0x88f0
leaq -0x238(%rbp), %rdi
cmpq $-0x1, %rax
jne 0xcd17
callq 0xd3d8
leaq 0x1b52f(%rip), %rsi     # 0x28221
leaq -0x58(%rbp), %rdi
movq %rax, %rdx
callq 0xc83b
leaq 0x1fa50(%rip), %rdx     # 0x2c755
leaq -0x88(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0xc63c
jmp 0xcd46
callq 0xd3d8
leaq 0x1b61f(%rip), %rsi     # 0x28342
leaq -0x58(%rbp), %rdi
movq %rax, %rdx
callq 0xc83b
leaq 0x1cd69(%rip), %rdx     # 0x29a9f
leaq -0x88(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0xc63c
leaq -0x190(%rbp), %rdi
leaq -0x88(%rbp), %rbx
movq %rbx, %rsi
callq 0x84d0
movq %rbx, %rdi
callq 0x8930
leaq -0x58(%rbp), %rdi
callq 0x8930
pushq $0x28
popq %rdi
callq 0x8200
movq %rax, %r14
leaq -0xe8(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x85b0
movb $0x1, %r15b
leaq -0xe8(%rbp), %rsi
movq %r14, %rdi
movl -0x30(%rbp), %edx
callq 0xc8b2
xorl %r15d, %r15d
leaq 0x2e306(%rip), %rsi     # 0x3b0b0
leaq -0x4c1(%rip), %rdx      # 0xc8f0
movq %r14, %rdi
callq 0x87a0
jmp 0xcdc3
movq %rax, %rbx
jmp 0xce7b
movq %rax, %rbx
jmp 0xce6f
movq %rax, %rbx
leaq -0xe8(%rbp), %rdi
jmp 0xcde7
jmp 0xcdf3
jmp 0xce04
jmp 0xce04
movq %rax, %rbx
leaq -0xc8(%rbp), %rdi
callq 0x8930
testb %r15b, %r15b
jne 0xcdf6
jmp 0xce31
movq %rax, %rbx
movq %r14, %rdi
callq 0x82f0
jmp 0xce31
jmp 0xce2e
jmp 0xce2e
movq %rax, %rbx
leaq -0x58(%rbp), %rdi
callq 0x8930
jmp 0xce31
jmp 0xce2e
jmp 0xce2e
movq %rax, %rbx
leaq -0x1b0(%rbp), %rdi
jmp 0xce46
movq %rax, %rbx
leaq -0xa8(%rbp), %rdi
jmp 0xce46
movq %rax, %rbx
leaq -0x190(%rbp), %rdi
jmp 0xce46
jmp 0xce60
movq %rax, %rbx
leaq -0x108(%rbp), %rdi
callq 0x8930
jmp 0xce63
jmp 0xce60
movq %rax, %rbx
leaq -0x190(%rbp), %rdi
callq 0xd022
jmp 0xce63
movq %rax, %rbx
leaq -0x238(%rbp), %rdi
callq 0xd022
leaq -0x288(%rbp), %rdi
callq 0xd078
leaq -0x2e8(%rbp), %rdi
callq 0xd078
movq %rbx, %rdi
callq 0x87e0