// File: /workspace/github_cpp_makefile_star2_O3/CoinXu[P]reviser-compiler/src/command_line_interface.cpp
// Function: reviser::CommandLineInterface::Run(int, char const* const*)
int CommandLineInterface::Run(int argc, const char* const argv[]) {
    if (!ParseArguments(argc, argv)) {
      return -1;
    }

    for (int i = 0; i < input_files.size(); i++) {
      for (int j = 0; j < output_directives.size(); j++) {
        OutputDirective directive = output_directives.at(j);
        GeneratorMap::const_iterator iter = generators.find(directive.name);
        Printer* printer;


        if (printer_name == "fs") {
          string output = io::absolute(directive.output_location)
            ? directive.output_location
            : io::join(string(getenv("PWD")), directive.output_location);
          string file_name = io::basename(input_files.at(i)) + "." + iter->second.output_file_suffix;
          printer = new PrinterFile(io::join(output, file_name));
        } else if (printer_name == "terminal") {
          printer = new PrinterTerminal();
        } else {
          cerr << "unkown printer type name: " << printer_name << endl;
          return -1;
        }

        Tokenizer tokenizer(MakeSourceCodeInputs(input_files.at(i)));
        Parser parse(&tokenizer, iter->second.generator, printer);
        parse.Program();
        delete printer;
      }
    }

    return 0;
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x268, %rsp            # imm = 0x268
movq %rdi, %rbx
callq 0x28448
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
testb %al, %al
je 0x282e9
movq 0x48(%rbx), %rax
movq 0x50(%rbx), %rcx
cmpq %rax, %rcx
je 0x28253
leaq 0x80(%rbx), %r8
movq 0x30(%rbx), %r12
movq %rbx, -0x30(%rbp)
movq 0x38(%rbx), %rdx
xorl %edi, %edi
leaq -0xa0(%rbp), %r14
movq %r8, -0xa8(%rbp)
cmpq %r12, %rdx
je 0x2823a
movq %rdi, -0x38(%rbp)
movl $0x30, %ebx
xorl %r15d, %r15d
leaq -0x90(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x30(%r12,%rbx), %rsi
movq -0x28(%r12,%rbx), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x290da
movq -0x10(%r12,%rbx), %rax
movq %rax, -0x80(%rbp)
leaq -0x68(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x8(%r12,%rbx), %rsi
movq (%r12,%rbx), %rdx
addq %rsi, %rdx
leaq -0x78(%rbp), %rdi
callq 0x290da
movq -0x30(%rbp), %rdi
movq %r14, %rsi
callq 0x295fe
movq %rax, %r13
movq -0xa8(%rbp), %r12
movq %r12, %rdi
leaq 0x27134(%rip), %rsi     # 0x4f00d
callq 0x240e0
testl %eax, %eax
je 0x27f13
movq %r12, %rdi
leaq 0x27118(%rip), %rsi     # 0x4f004
callq 0x240e0
testl %eax, %eax
jne 0x2825a
movl $0x8, %edi
callq 0x24340
movq %rax, %r12
movq %rax, %rdi
callq 0x426e8
jmp 0x28122
leaq -0x78(%rbp), %rdi
callq 0x342c4
leaq -0x188(%rbp), %r14
testb %al, %al
je 0x27f4e
leaq -0x280(%rbp), %rax
movq %rax, -0x290(%rbp)
movq -0x78(%rbp), %rsi
movq -0x70(%rbp), %rdx
addq %rsi, %rdx
leaq -0x290(%rbp), %rdi
callq 0x290da
jmp 0x27f94
leaq 0x270bb(%rip), %rdi     # 0x4f010
callq 0x24410
movq %r14, %rdi
movq %rax, %rsi
leaq -0x58(%rbp), %rdx
callq 0x24150
leaq -0x290(%rbp), %rdi
movq %r14, %rsi
leaq -0x78(%rbp), %rdx
callq 0x340e0
movq -0x188(%rbp), %rdi
leaq -0x178(%rbp), %rax
cmpq %rax, %rdi
je 0x27f94
callq 0x24320
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rsi
movq 0x50(%rax), %rdx
subq %rsi, %rdx
sarq $0x5, %rdx
movq -0x38(%rbp), %rax
cmpq %rax, %rdx
jbe 0x2830e
shlq $0x5, %rax
addq %rax, %rsi
leaq -0x108(%rbp), %r12
movq %r12, %rdi
callq 0x342fc
movq %r12, %rdi
leaq 0x27178(%rip), %rsi     # 0x4f14c
callq 0x24650
leaq -0x48(%rbp), %rsi
movq %rsi, -0x58(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x27ffd
movq %rdx, -0x58(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x48(%rbp)
jmp 0x28003
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x50(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x68(%r13), %rsi
movq 0x70(%r13), %rdx
leaq -0x58(%rbp), %rdi
callq 0x240f0
leaq -0x178(%rbp), %rsi
movq %rsi, -0x188(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x2805b
movq %rdx, -0x188(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x178(%rbp)
jmp 0x28061
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x180(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x2808d
callq 0x24320
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
cmpq %rax, %rdi
je 0x280a5
callq 0x24320
movl $0x228, %edi            # imm = 0x228
callq 0x24340
movq %rax, %r12
leaq -0xe8(%rbp), %r14
movq %r14, %rdi
leaq -0x290(%rbp), %rsi
leaq -0x188(%rbp), %rdx
callq 0x340e0
movq %r12, %rdi
movq %r14, %rsi
callq 0x42470
movq -0xe8(%rbp), %rdi
leaq -0xd8(%rbp), %rax
cmpq %rax, %rdi
je 0x280f2
callq 0x24320
movq -0x188(%rbp), %rdi
leaq -0x178(%rbp), %rax
cmpq %rax, %rdi
je 0x2810a
callq 0x24320
movq -0x290(%rbp), %rdi
leaq -0x280(%rbp), %rax
cmpq %rax, %rdi
je 0x28122
callq 0x24320
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rdx
movq 0x50(%rax), %rax
subq %rdx, %rax
sarq $0x5, %rax
movq -0x38(%rbp), %rsi
cmpq %rsi, %rax
jbe 0x282fd
movq %rsi, %rax
shlq $0x5, %rax
addq %rax, %rdx
leaq -0xc8(%rbp), %r14
movq %r14, %rdi
callq 0x28684
leaq -0x290(%rbp), %rdi
movq %r14, %rsi
callq 0x2ebac
movq -0xc8(%rbp), %rdi
leaq -0xb8(%rbp), %rax
cmpq %rax, %rdi
je 0x28182
callq 0x24320
movq 0x40(%r13), %rdx
leaq -0x188(%rbp), %r13
movq %r13, %rdi
leaq -0x290(%rbp), %rsi
movq %r12, %rcx
callq 0x2b5b0
movq %r13, %rdi
callq 0x2b6b8
leaq -0xa0(%rbp), %r14
movq %r12, %rdi
callq 0x24320
movq %r13, %rdi
callq 0x2b68a
leaq -0x290(%rbp), %rdi
callq 0x2ef88
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x281dc
callq 0x24320
movq -0xa0(%rbp), %rdi
leaq -0x90(%rbp), %rax
cmpq %rax, %rdi
je 0x281f4
callq 0x24320
incq %r15
movq -0x30(%rbp), %rax
movq 0x30(%rax), %r12
movq 0x38(%rax), %rdx
movq %rdx, %rax
subq %r12, %rax
sarq $0x3, %rax
movabsq $-0x71c71c71c71c71c7, %rcx # imm = 0x8E38E38E38E38E39
imulq %rcx, %rax
addq $0x48, %rbx
cmpq %r15, %rax
ja 0x27e70
movq -0x30(%rbp), %rcx
movq 0x48(%rcx), %rax
movq 0x50(%rcx), %rcx
movq -0x38(%rbp), %rdi
jmp 0x2823d
movq %r12, %rdx
incq %rdi
movq %rcx, %rsi
subq %rax, %rsi
sarq $0x5, %rsi
cmpq %rdi, %rsi
ja 0x27e5b
xorl %ecx, %ecx
jmp 0x282e9
movq 0x37d87(%rip), %rdi     # 0x5ffe8
leaq 0x26dac(%rip), %rsi     # 0x4f014
movl $0x1a, %edx
callq 0x243c0
movq -0x30(%rbp), %rax
movq 0x80(%rax), %rsi
movq 0x88(%rax), %rdx
movq 0x37d5d(%rip), %rdi     # 0x5ffe8
callq 0x243c0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x24330
movsbl %al, %esi
movq %rbx, %rdi
callq 0x24040
movq %rax, %rdi
callq 0x24270
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x282cc
callq 0x24320
movq -0xa0(%rbp), %rdi
leaq -0x90(%rbp), %rax
cmpq %rax, %rdi
je 0x282e4
callq 0x24320
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movl %ecx, %eax
addq $0x268, %rsp            # imm = 0x268
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x26fc6(%rip), %rdi     # 0x4f2ca
movq %rax, %rdx
xorl %eax, %eax
callq 0x24510
leaq 0x26fb5(%rip), %rdi     # 0x4f2ca
movq %rax, %rsi
xorl %eax, %eax
callq 0x24510
jmp 0x28414
movq %rax, %rbx
movq -0x188(%rbp), %rdi
leaq -0x178(%rbp), %rax
jmp 0x283e4
jmp 0x28414
movq %rax, %rbx
jmp 0x2836e
jmp 0x283b2
movq %rax, %rbx
jmp 0x28366
movq %rax, %rbx
movq -0xe8(%rbp), %rdi
leaq -0xd8(%rbp), %rax
cmpq %rax, %rdi
je 0x28366
callq 0x24320
movq %r12, %rdi
callq 0x24320
movq -0x188(%rbp), %rdi
leaq -0x178(%rbp), %rax
jmp 0x283a6
movq %rax, %rbx
jmp 0x28398
movq %rax, %rbx
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x28398
callq 0x24320
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
cmpq %rax, %rdi
je 0x283b5
callq 0x24320
jmp 0x283b5
movq %rax, %rbx
movq -0x290(%rbp), %rdi
leaq -0x280(%rbp), %rax
jmp 0x283e4
jmp 0x28414
movq %rax, %rbx
movq %r12, %rdi
jmp 0x283e9
jmp 0x28414
jmp 0x28414
movq %rax, %rbx
movq -0xc8(%rbp), %rdi
leaq -0xb8(%rbp), %rax
cmpq %rax, %rdi
je 0x28417
callq 0x24320
jmp 0x28417
movq %rax, %rbx
leaq -0x188(%rbp), %rdi
callq 0x2b68a
jmp 0x28406
jmp 0x28414
movq %rax, %rbx
leaq -0x290(%rbp), %rdi
callq 0x2ef88
jmp 0x28417
movq %rax, %rbx
leaq -0xa0(%rbp), %rdi
callq 0x28f66
movq %rbx, %rdi
callq 0x245f0
movq %rax, %rbx
movq -0xa0(%rbp), %rdi
leaq -0x90(%rbp), %rax
cmpq %rax, %rdi
je 0x28423
callq 0x24320
jmp 0x28423