// File: /workspace/github_cpp_makefile_star2_O2/Diggie-Bro[P]StreamCode/test/hello_world_var.cpp
// Function: main
int main() {
    Importer importer; importer.importIOModule();
    struct Variables varname {
        Types(VARIABLE),
        "name",
    };
    struct Variables varvalue {
        Types(STRING),
        "dummy",
    };
    struct Variables print_perf_param {
        Types(VARIABLE),
        "name"
    };

    vector<struct Variables> var_name; 
    var_name.push_back(varname); var_name.push_back(varvalue);

    vector<struct Variables> print_proc_param;
    print_proc_param.push_back(print_perf_param);
    
    struct PerformFunction print_perf {
        CALLFUNC,
        NULL,
        "print",
        print_proc_param,
    };

    struct PerformFunction assignVar_name {
        ASSIGN,
        &print_perf, 
        "",
        var_name,
    };

    Process print_proc {
        NULL,
        "",
        vector<struct Variables> (0),
        vector<struct Variables> (0),
        &assignVar_name,
    };

    Stream main_strm {
        NULL,
        StreamType(UNIT),
        &print_proc,
        "main",
    };

    StreamCode code {
        &main_strm,
        &importer,
        "hello_world.strmcode",
    };

    Executor exec_ = {
        code
    };

    exec_.executeCode();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x298, %rsp            # imm = 0x298
leaq -0x270(%rbp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ecx, %ecx
movb %cl, (%rax)
leaq -0x250(%rbp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %cl, (%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rax)
andq $0x0, 0x20(%rax)
leaq -0x280(%rbp), %r12
movq %r12, %rdi
callq 0x2a60
leaq -0x160(%rbp), %rdi
movl $0x5, -0x8(%rdi)
leaq 0x2ab0(%rip), %rsi      # 0x5049
leaq -0xf0(%rbp), %rdx
callq 0x2070
leaq -0x138(%rbp), %rdi
movl $0x2, -0x8(%rdi)
leaq 0x2a94(%rip), %rsi      # 0x504e
leaq -0xf0(%rbp), %rdx
callq 0x2070
leaq -0x110(%rbp), %rdi
movl $0x5, -0x8(%rdi)
leaq 0x2a6e(%rip), %rsi      # 0x5049
leaq -0xf0(%rbp), %rdx
callq 0x2070
xorps %xmm0, %xmm0
leaq -0x40(%rbp), %rdi
movaps %xmm0, (%rdi)
andq $0x0, 0x10(%rdi)
leaq -0x168(%rbp), %rsi
callq 0x2a96
leaq -0x40(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x2a96
xorps %xmm0, %xmm0
leaq -0x60(%rbp), %rdi
movaps %xmm0, (%rdi)
andq $0x0, 0x10(%rdi)
leaq -0x118(%rbp), %rsi
callq 0x2a96
leaq -0x218(%rbp), %rbx
movl $0x1, -0x10(%rbx)
andq $0x0, -0x8(%rbx)
leaq 0x29fc(%rip), %rsi      # 0x5043
leaq -0xf0(%rbp), %rdx
movq %rbx, %rdi
callq 0x2070
leaq -0x1f8(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x2ad2
leaq -0x1d0(%rbp), %r14
andl $0x0, -0x10(%r14)
leaq -0x228(%rbp), %rax
movq %rax, -0x8(%r14)
leaq 0x2ac0(%rip), %rsi      # 0x5144
leaq -0xf0(%rbp), %rbx
movq %r14, %rdi
movq %rbx, %rdx
callq 0x2070
leaq -0x1b0(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x2ad2
leaq -0xe8(%rbp), %r13
andq $0x0, -0x8(%r13)
leaq 0x2a8b(%rip), %rsi      # 0x5144
leaq -0x2b8(%rbp), %r14
movq %r13, %rdi
movq %r14, %rdx
callq 0x2070
leaq -0xc8(%rbp), %r15
leaq -0x198(%rbp), %rdx
movq %r15, %rdi
xorl %esi, %esi
callq 0x2b2c
leaq -0xb0(%rbp), %rdi
leaq -0x90(%rbp), %rdx
xorl %esi, %esi
callq 0x2b2c
leaq -0x1e0(%rbp), %rax
movq %rax, -0x98(%rbp)
leaq -0x2a0(%rbp), %r13
andq $0x0, -0x18(%r13)
andl $0x0, -0x10(%r13)
movq %rbx, -0x8(%r13)
leaq 0x2932(%rip), %rsi      # 0x5054
leaq -0x198(%rbp), %rdx
movq %r13, %rdi
callq 0x2070
leaq -0x188(%rbp), %rbx
movq %r14, -0x10(%rbx)
movq %r12, -0x8(%rbx)
leaq 0x2912(%rip), %rsi      # 0x5059
leaq -0x90(%rbp), %rdx
movq %rbx, %rdi
callq 0x2070
leaq -0x90(%rbp), %rdi
leaq -0x198(%rbp), %rsi
callq 0x2baa
leaq -0x90(%rbp), %rdi
callq 0x2bc2
leaq -0x80(%rbp), %rdi
callq 0x20a0
movq %rbx, %rdi
callq 0x20a0
movq %r13, %rdi
callq 0x20a0
leaq -0xf0(%rbp), %rdi
callq 0x2e94
leaq -0x1e0(%rbp), %rdi
callq 0x2ec2
leaq -0x228(%rbp), %rdi
callq 0x2ec2
leaq -0x60(%rbp), %rdi
callq 0x2b7e
leaq -0x40(%rbp), %rdi
callq 0x2b7e
leaq -0x110(%rbp), %rdi
callq 0x20a0
leaq -0x138(%rbp), %rdi
callq 0x20a0
leaq -0x160(%rbp), %rdi
callq 0x20a0
leaq -0x280(%rbp), %rdi
callq 0x29f2
xorl %eax, %eax
addq $0x298, %rsp            # imm = 0x298
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r12
leaq -0x80(%rbp), %rdi
callq 0x20a0
jmp 0x2819
movq %rax, %r12
movq %rbx, %rdi
callq 0x20a0
jmp 0x2826
movq %rax, %r12
movq %r13, %rdi
callq 0x20a0
jmp 0x2833
movq %rax, %r12
leaq -0xf0(%rbp), %rdi
callq 0x2e94
jmp 0x285e
movq %rax, %r12
movq %r15, %rdi
callq 0x2b7e
jmp 0x2851
movq %rax, %r12
movq %r13, %rdi
callq 0x20a0
jmp 0x285e
movq %rax, %r12
leaq -0x1e0(%rbp), %rdi
callq 0x2ec2
leaq -0x228(%rbp), %rdi
callq 0x2ec2
leaq -0x60(%rbp), %rdi
callq 0x2b7e
leaq -0x40(%rbp), %rdi
callq 0x2b7e
leaq -0x110(%rbp), %rdi
callq 0x20a0
leaq -0x138(%rbp), %rdi
callq 0x20a0
leaq -0x160(%rbp), %rdi
callq 0x20a0
leaq -0x280(%rbp), %rdi
callq 0x29f2
movq %r12, %rdi
callq 0x21f0
movq %rax, %r12
movq %r14, %rdi
callq 0x20a0
jmp 0x286a
movq %rax, %r12
jmp 0x286a
movq %rax, %r12
movq %rbx, %rdi
callq 0x20a0
jmp 0x2876
jmp 0x28e1
movq %rax, %r12
jmp 0x2876
movq %rax, %r12
jmp 0x2894
movq %rax, %r12
jmp 0x28a0
jmp 0x28f2
movq %rax, %r12
jmp 0x28ac
movq %rax, %r12
jmp 0x287f