// File: gioannides[P]Language_Processors/src/c_compiler.cpp
// Function: main
int main(int argc, char* argv[]){

    	if (argc == 5){

		std::string argument = argv[1];

		if( argument == "--translate" ) {

			argument = argv[3];

			if( argument == "-o" ) {
		 		const TranslationUnit* ast = parseAST(argv[2],argv[4]);
				std::string file_name = argv[4];
				char Last_letter = file_name[file_name.size()-1];
				if( Last_letter == 'y' ){
					ast->print_py(file_name);
					return 0;
				}

				else {
					return 0;

				}
				
			}
		}

		else if( argument == "-S" ) {

			argument = argv[3];

			if( argument == "-o" ) {
		 		const TranslationUnit* ast = parseAST(argv[2],argv[4]);
				std::string file_name = argv[4];
				char Last_letter = file_name[file_name.size()-1];
				if( Last_letter == 's' ){
					ast->render_asm(file_name);
					return 0;
				}
			}
		}

	}	
	return -1;
  
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x170, %rsp            # imm = 0x170
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpl $0x5, -0x8(%rbp)
jne 0x9017
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x100(%rbp)
leaq -0x31(%rbp), %rdi
movq %rdi, -0xf8(%rbp)
callq 0x8770
movq -0x100(%rbp), %rsi
movq -0xf8(%rbp), %rdx
leaq -0x30(%rbp), %rdi
callq 0x85a0
jmp 0x8beb
leaq -0x31(%rbp), %rdi
callq 0x8480
leaq 0x5b5c2(%rip), %rsi     # 0x641bd
leaq -0x30(%rbp), %rdi
callq 0x9e30
movb %al, -0x101(%rbp)
jmp 0x8c0c
movb -0x101(%rbp), %al
testb $0x1, %al
jne 0x8c1b
jmp 0x8df3
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x30(%rbp), %rdi
callq 0x8590
jmp 0x8c2e
leaq 0x5b594(%rip), %rsi     # 0x641c9
leaq -0x30(%rbp), %rdi
callq 0x9e30
movb %al, -0x102(%rbp)
jmp 0x8c46
movb -0x102(%rbp), %al
testb $0x1, %al
jne 0x8c55
jmp 0x8dee
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
movq 0x20(%rax), %rsi
callq 0x5d770
movq %rax, -0x110(%rbp)
jmp 0x8c6f
movq -0x110(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x120(%rbp)
leaq -0x71(%rbp), %rdi
movq %rdi, -0x118(%rbp)
callq 0x8770
movq -0x120(%rbp), %rsi
movq -0x118(%rbp), %rdx
leaq -0x70(%rbp), %rdi
callq 0x85a0
jmp 0x8cb2
leaq -0x71(%rbp), %rdi
callq 0x8480
leaq -0x70(%rbp), %rdi
movq %rdi, -0x130(%rbp)
callq 0x8310
movq -0x130(%rbp), %rdi
movq %rax, %rsi
decq %rsi
callq 0x8860
movq %rax, -0x128(%rbp)
jmp 0x8ce6
movq -0x128(%rbp), %rax
movb (%rax), %al
movb %al, -0x72(%rbp)
movsbl -0x72(%rbp), %eax
cmpl $0x79, %eax
jne 0x8dc1
movq -0x50(%rbp), %rax
movq %rax, -0x138(%rbp)
leaq -0x98(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x81a0
jmp 0x8d1c
movq -0x138(%rbp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rax
leaq -0x98(%rbp), %rsi
callq *%rax
jmp 0x8d35
leaq -0x98(%rbp), %rdi
callq 0x8280
movl $0x0, -0x4(%rbp)
movl $0x1, -0x9c(%rbp)
jmp 0x8dd2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x31(%rbp), %rdi
callq 0x8480
jmp 0x902a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x900c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x71(%rbp), %rdi
callq 0x8480
jmp 0x900c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x8de0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x8280
jmp 0x8de0
movl $0x0, -0x4(%rbp)
movl $0x1, -0x9c(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x8280
jmp 0x8ff3
leaq -0x70(%rbp), %rdi
callq 0x8280
jmp 0x900c
jmp 0x8fe9
leaq 0x5b3d2(%rip), %rsi     # 0x641cc
leaq -0x30(%rbp), %rdi
callq 0x9e30
movb %al, -0x139(%rbp)
jmp 0x8e0b
movb -0x139(%rbp), %al
testb $0x1, %al
jne 0x8e1a
jmp 0x8fe7
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x30(%rbp), %rdi
callq 0x8590
jmp 0x8e2d
leaq 0x5b395(%rip), %rsi     # 0x641c9
leaq -0x30(%rbp), %rdi
callq 0x9e30
movb %al, -0x13a(%rbp)
jmp 0x8e45
movb -0x13a(%rbp), %al
testb $0x1, %al
jne 0x8e54
jmp 0x8fe5
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
movq 0x20(%rax), %rsi
callq 0x5d770
movq %rax, -0x148(%rbp)
jmp 0x8e6e
movq -0x148(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x158(%rbp)
leaq -0xc9(%rbp), %rdi
movq %rdi, -0x150(%rbp)
callq 0x8770
movq -0x158(%rbp), %rsi
movq -0x150(%rbp), %rdx
leaq -0xc8(%rbp), %rdi
callq 0x85a0
jmp 0x8eba
leaq -0xc9(%rbp), %rdi
callq 0x8480
leaq -0xc8(%rbp), %rdi
movq %rdi, -0x168(%rbp)
callq 0x8310
movq -0x168(%rbp), %rdi
movq %rax, %rsi
decq %rsi
callq 0x8860
movq %rax, -0x160(%rbp)
jmp 0x8ef4
movq -0x160(%rbp), %rax
movb (%rax), %al
movb %al, -0xca(%rbp)
movsbl -0xca(%rbp), %eax
cmpl $0x73, %eax
jne 0x8fb3
movq -0xa8(%rbp), %rax
movq %rax, -0x170(%rbp)
leaq -0xf0(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x81a0
jmp 0x8f36
movq -0x170(%rbp), %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
leaq -0xf0(%rbp), %rsi
callq *%rax
jmp 0x8f4f
leaq -0xf0(%rbp), %rdi
callq 0x8280
movl $0x0, -0x4(%rbp)
movl $0x1, -0x9c(%rbp)
jmp 0x8fbd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xc9(%rbp), %rdi
callq 0x8480
jmp 0x900c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x8fd7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x8280
jmp 0x8fd7
movl $0x0, -0x9c(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x8280
movl -0x9c(%rbp), %eax
testl %eax, %eax
jne 0x8ff3
jmp 0x8fd5
jmp 0x8fe5
leaq -0xc8(%rbp), %rdi
callq 0x8280
jmp 0x900c
jmp 0x8fe7
jmp 0x8fe9
movl $0x0, -0x9c(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x8280
movl -0x9c(%rbp), %eax
testl %eax, %eax
je 0x900a
jmp 0x9008
jmp 0x901e
jmp 0x9017
leaq -0x30(%rbp), %rdi
callq 0x8280
jmp 0x902a
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl -0x4(%rbp), %eax
addq $0x170, %rsp            # imm = 0x170
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x8760
nopw %cs:(%rax,%rax)
nopl (%rax)