// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/lib/bcore/bcore_txt_ml.c
// Function: translate
static void translate( const bcore_txt_ml_translator_s* o, tp_t name, sr_s obj, sr_s sink, uz_t depth )
{
    bcore_life_s* l = bcore_life_s_create();
    sr_s sink_l = sr_cl( sr_cp( sink, TYPEOF_bcore_sink_s ), l );
    sr_s obj_l  = sr_cl( sr_cp( obj, TYPEOF_bcore_via_s ), l );
    st_s* ind = st_s_push_char_n( st_s_create_l( l ), ' ', depth * o->indent );
    st_s* buf = st_s_create_l( l );

    // shelving obj_l
    if( obj_l.o && bcore_via_r_defines_shelve( &obj_l ) )
    {
        obj_l = sr_cl( sr_clone( obj_l ), l );
        bcore_via_r_shelve( &obj_l );
    }

    bcore_sink_x_pushf( sink_l, "%s", ind->sc );
    if( name ) bcore_sink_x_pushf( sink_l, "%s:", name_of( name, buf ) );

    if( !obj_l.o ) // NULL
    {
        if( obj_l.p )
        {
            // Explicit NULL specifies that the object is not instantiated.
            // This is to differentiate from the case where the object was instantiated
            // without additional parameters.
            bcore_sink_x_pushf( sink_l, "<%s>NULL</>\n", name_of( sr_s_type( &obj_l ), buf ) );
        }
        else
        {
            bcore_sink_x_pushf( sink_l, "<></>\n" );
        }
    }
    else
    {
        bcore_sink_x_pushf( sink_l, "<%s>", name_of( sr_s_type( &obj_l ), buf ) );
        if( sr_s_type( &obj_l ) == TYPEOF_st_s ) // strings
        {
            st_s* string = st_s_clone( ( const st_s* )obj_l.o );
            st_s_replace_char_sc( string, '\"', "\\\"" );
            bcore_sink_x_pushf( sink_l, "\"%s\"", string->sc );
            st_s_discard( string );
        }
        else if( bcore_via_x_is_leaf( obj_l ) )
        {
            bcore_sink_x_push_string_d( sink_l, st_s_create_typed( sr_s_type( &obj_l ), obj_l.o ) );
        }
        else
        {
            bcore_sink_x_push_char( sink_l, '\n' );
            if( bcore_via_x_is_pure_array( obj_l ) )
            {
                sr_s arr_l = sr_cp( obj_l, TYPEOF_bcore_array_s );
                if( bcore_array_x_is_mutable_mono_typed( arr_l ) )
                {
                    translate( o, TYPEOF_type, sr_tp( bcore_array_x_get_mono_type( arr_l ) ), sink_l, depth + 1 );
                }
                uz_t size = bcore_array_x_get_size( arr_l );
                for( uz_t i = 0; i < size; i++ )
                {
                    translate( o, 0, bcore_array_x_get( arr_l, i ), sink_l, depth + 1 );
                }
            }
            else
            {
                uz_t size = bcore_via_p_get_size( obj_l.p, NULL );
                for( uz_t i = 0; i < size; i++ )
                {
                    translate( o, bcore_via_x_iget_name( obj_l, i ), bcore_via_x_iget( obj_l, i ), sink_l, depth + 1 );
                }
            }
            bcore_sink_x_pushf( sink_l, "%s", ind->sc );
        }
        bcore_sink_x_push_sc( sink_l, "</>\n" );
    }

    bcore_life_s_discard( l );
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1b0, %rsp            # imm = 0x1B0
leaq 0x28(%rbp), %rax
movq %rax, -0x158(%rbp)
leaq 0x10(%rbp), %rax
movq %rax, -0x150(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movb $0x0, %al
callq 0xbfdd0
movq %rax, %rcx
movq -0x158(%rbp), %rax
movq %rcx, -0x20(%rbp)
leaq -0x50(%rbp), %rdi
movabsq $0x5ea8cabb93ff3b7e, %rsi # imm = 0x5EA8CABB93FF3B7E
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x117e40
movq -0x20(%rbp), %rsi
leaq -0x38(%rbp), %rdi
leaq -0x50(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xfb970
movq -0x150(%rbp), %rax
leaq -0x80(%rbp), %rdi
movabsq $0x541d0401d4dcff33, %rsi # imm = 0x541D0401D4DCFF33
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x117e40
movq -0x20(%rbp), %rsi
leaq -0x68(%rbp), %rdi
leaq -0x80(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xfb970
movq -0x20(%rbp), %rdi
callq 0xff5c0
movq %rax, %rdi
movq -0x18(%rbp), %rdx
movq -0x8(%rbp), %rax
imulq 0x8(%rax), %rdx
movl $0x20, %esi
callq 0xffca0
movq %rax, -0x88(%rbp)
movq -0x20(%rbp), %rdi
callq 0xff5c0
movq %rax, -0x90(%rbp)
cmpq $0x0, -0x68(%rbp)
je 0x11500f
leaq -0x68(%rbp), %rdi
callq 0x117ea0
testb $0x1, %al
jne 0x114f8c
jmp 0x11500f
leaq -0xc0(%rbp), %rdi
leaq -0x68(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xfb740
movq -0x20(%rbp), %rsi
leaq -0xa8(%rbp), %rdi
leaq -0xc0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xfb970
movq -0xa8(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0xa0(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0x58(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x117f10
movq -0x88(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x38(%rbp), %rax
leaq 0x2c5e6(%rip), %rdi     # 0x14160b
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
movb $0x0, %al
callq 0xf0f00
cmpq $0x0, -0x10(%rbp)
je 0x11508a
movq -0x10(%rbp), %rdi
movq -0x90(%rbp), %rsi
callq 0x117f80
movq %rax, %rsi
leaq -0x38(%rbp), %rax
leaq 0x4385a(%rip), %rdi     # 0x1588c4
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
movb $0x0, %al
callq 0xf0f00
cmpq $0x0, -0x68(%rbp)
jne 0x115110
cmpq $0x0, -0x60(%rbp)
je 0x1150e0
leaq -0x68(%rbp), %rdi
callq 0x116ff0
movq %rax, %rdi
movq -0x90(%rbp), %rsi
callq 0x117f80
movq %rax, %rsi
leaq -0x38(%rbp), %rax
leaq 0x4380a(%rip), %rdi     # 0x1588c8
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
movb $0x0, %al
callq 0xf0f00
jmp 0x11510b
leaq -0x38(%rbp), %rax
leaq 0x2a9e5(%rip), %rdi     # 0x13fad0
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
movb $0x0, %al
callq 0xf0f00
jmp 0x1155fe
leaq -0x68(%rbp), %rdi
callq 0x116ff0
movq %rax, %rdi
movq -0x90(%rbp), %rsi
callq 0x117f80
movq %rax, %rsi
leaq -0x38(%rbp), %rax
leaq 0x4379f(%rip), %rdi     # 0x1588d5
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
movb $0x0, %al
callq 0xf0f00
leaq -0x68(%rbp), %rdi
callq 0x116ff0
movabsq $-0x503db0e6e1c2e704, %rcx # imm = 0xAFC24F191E3D18FC
cmpq %rcx, %rax
jne 0x1151dd
movq -0x68(%rbp), %rdi
callq 0xff990
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rdi
movl $0x22, %esi
leaq 0x1f013(%rip), %rdx     # 0x1341a4
callq 0x101530
movq -0xc8(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x38(%rbp), %rax
leaq 0x4372e(%rip), %rdi     # 0x1588da
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
movb $0x0, %al
callq 0xf0f00
movq -0xc8(%rbp), %rdi
callq 0xff600
jmp 0x1155d5
leaq -0x68(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x117fe0
testb $0x1, %al
jne 0x115205
jmp 0x115244
leaq -0x68(%rbp), %rdi
callq 0x116ff0
movq %rax, %rdi
movq -0x68(%rbp), %rsi
callq 0xff780
movq %rax, %rdi
leaq -0x38(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x118080
jmp 0x1155d3
leaq -0x38(%rbp), %rax
movl $0xa, %edi
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x118120
leaq -0x68(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x1181c0
testb $0x1, %al
jne 0x115296
jmp 0x11548d
leaq -0xe0(%rbp), %rdi
leaq -0x68(%rbp), %rax
movabsq $-0x5073d588c3beb52e, %rsi # imm = 0xAF8C2A773C414AD2
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x117e40
leaq -0xe0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xdab10
testb $0x1, %al
jne 0x1152f7
jmp 0x115392
movq -0x8(%rbp), %rax
movq %rax, -0x160(%rbp)
leaq -0xe0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xdad40
movq %rax, %rsi
leaq -0xf8(%rbp), %rdi
callq 0xfbd70
movq -0x160(%rbp), %rdi
movq -0x18(%rbp), %rdx
addq $0x1, %rdx
movabsq $-0x586bc610840563d3, %rsi # imm = 0xA79439EF7BFA9C2D
leaq -0xf8(%rbp), %rcx
leaq -0x38(%rbp), %rax
movq (%rcx), %r8
movq %r8, (%rsp)
movq 0x8(%rcx), %r8
movq %r8, 0x8(%rsp)
movq 0x10(%rcx), %rcx
movq %rcx, 0x10(%rsp)
movq (%rax), %rcx
movq %rcx, 0x18(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x20(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x28(%rsp)
callq 0x114e40
leaq -0xe0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x118260
movq %rax, -0x100(%rbp)
movq $0x0, -0x108(%rbp)
movq -0x108(%rbp), %rax
cmpq -0x100(%rbp), %rax
jae 0x115488
movq -0x8(%rbp), %rax
movq %rax, -0x168(%rbp)
movq -0x108(%rbp), %rsi
leaq -0x120(%rbp), %rdi
leaq -0xe0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x118300
movq -0x168(%rbp), %rdi
movq -0x18(%rbp), %rdx
addq $0x1, %rdx
xorl %eax, %eax
movl %eax, %esi
leaq -0x120(%rbp), %rcx
leaq -0x38(%rbp), %rax
movq (%rcx), %r8
movq %r8, (%rsp)
movq 0x8(%rcx), %r8
movq %r8, 0x8(%rsp)
movq 0x10(%rcx), %rcx
movq %rcx, 0x10(%rsp)
movq (%rax), %rcx
movq %rcx, 0x18(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x20(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x28(%rsp)
callq 0x114e40
movq -0x108(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x108(%rbp)
jmp 0x1153c9
jmp 0x11559d
movq -0x60(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x1183a0
movq %rax, -0x128(%rbp)
movq $0x0, -0x130(%rbp)
movq -0x130(%rbp), %rax
cmpq -0x128(%rbp), %rax
jae 0x11559b
movq -0x8(%rbp), %rax
movq %rax, -0x178(%rbp)
movq -0x130(%rbp), %rdi
leaq -0x68(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x1183d0
movq %rax, -0x170(%rbp)
movq -0x130(%rbp), %rsi
leaq -0x148(%rbp), %rdi
leaq -0x68(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x118470
movq -0x178(%rbp), %rdi
movq -0x170(%rbp), %rsi
movq -0x18(%rbp), %rdx
addq $0x1, %rdx
leaq -0x148(%rbp), %rcx
leaq -0x38(%rbp), %rax
movq (%rcx), %r8
movq %r8, (%rsp)
movq 0x8(%rcx), %r8
movq %r8, 0x8(%rsp)
movq 0x10(%rcx), %rcx
movq %rcx, 0x10(%rsp)
movq (%rax), %rcx
movq %rcx, 0x18(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x20(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x28(%rsp)
callq 0x114e40
movq -0x130(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x130(%rbp)
jmp 0x1154ac
jmp 0x11559d
movq -0x88(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x38(%rbp), %rax
leaq 0x2c058(%rip), %rdi     # 0x14160b
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
movb $0x0, %al
callq 0xf0f00
jmp 0x1155d5
leaq -0x38(%rbp), %rax
leaq 0x2a4f2(%rip), %rdi     # 0x13fad2
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x118510
movq -0x20(%rbp), %rdi
callq 0xbfe00
addq $0x1b0, %rsp            # imm = 0x1B0
popq %rbp
retq