// File: /workspace/github_c_makefile_star2_O0/phase[P]o/o.c
// Function: tos
S tos(O o){
    S r,t;L z,i;switch(o->t){
    case TD:r=alc(BZ)/*hope this is big enough!*/;sprintf(r,"%f",o->d);z=strlen(r)-1;while(r[z]=='0')r[z--]=0;if(r[z]=='.')r[z]=0;BK;
    case TS:r=alc(o->s.z+1);memcpy(r,o->s.s,o->s.z);r[o->s.z]=0;BK;
    case TA:r=alc(1);r[0]='[';z=1;for(i=0;i<len(o->a);++i){L l;if(i){r=rlc(r,z+1);r[z++]=',';}t=tos(o->a->st[i]);l=strlen(t);r=rlc(r,z+l);memcpy(r+z,t,l);z+=l;DL(t);}r=rlc(r,z+2);r[z]=']';r[z+1]=0;BK;
    case TCB:r=alc(o->s.z+3);r[0]='{';memcpy(r+1,o->s.s,o->s.z);memcpy(r+1+o->s.z,"}",2);BK;
    case TR:{L lv;S tv;t=tos(o->e.k);tv=tos(o->e.v);z=strlen(t);lv=strlen(tv);r=alc(z+lv+5);sprintf(r,"{%s: %s}",t,tv);DL(t);DL(tv);}BK;
    }R r;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movl (%rax), %eax
movq %rax, -0x48(%rbp)
subq $0x4, %rax
ja 0x2e66
movq -0x48(%rbp), %rax
leaq 0x8469(%rip), %rcx      # 0xb004
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x800, %edi            # imm = 0x800
callq 0x2430
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movq -0x8(%rbp), %rax
movsd 0x8(%rax), %xmm0
leaq 0x884d(%rip), %rsi      # 0xb413
movb $0x1, %al
callq 0x2240
movq -0x10(%rbp), %rdi
callq 0x20e0
subq $0x1, %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x30, %eax
jne 0x2c08
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movq %rcx, %rdx
addq $-0x1, %rdx
movq %rdx, -0x20(%rbp)
movb $0x0, (%rax,%rcx)
jmp 0x2bde
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x2e, %eax
jne 0x2c25
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movb $0x0, (%rax,%rcx)
jmp 0x2e66
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
addq $0x1, %rdi
callq 0x2430
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdx
callq 0x21c0
movq -0x10(%rbp), %rax
movq -0x8(%rbp), %rcx
movq 0x10(%rcx), %rcx
movb $0x0, (%rax,%rcx)
jmp 0x2e66
movl $0x1, %edi
callq 0x2430
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movb $0x5b, (%rax)
movq $0x1, -0x20(%rbp)
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x2a60
movq %rax, %rcx
movq -0x50(%rbp), %rax
cmpq %rcx, %rax
jae 0x2d63
cmpq $0x0, -0x28(%rbp)
je 0x2cea
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x1, %rsi
callq 0x2470
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x20(%rbp)
movb $0x2c, (%rax,%rcx)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x2b70
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0x20e0
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq -0x30(%rbp), %rsi
callq 0x2470
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
addq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x21c0
movq -0x30(%rbp), %rax
addq -0x20(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rdi
callq 0x2030
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x2c92
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x2, %rsi
callq 0x2470
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movb $0x5d, (%rax,%rcx)
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movb $0x0, 0x1(%rax,%rcx)
jmp 0x2e66
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
addq $0x3, %rdi
callq 0x2430
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movb $0x7b, (%rax)
movq -0x10(%rbp), %rdi
addq $0x1, %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdx
callq 0x21c0
movq -0x10(%rbp), %rax
movq -0x8(%rbp), %rcx
movq 0x10(%rcx), %rcx
movw 0x863b(%rip), %dx       # 0xb41d
movw %dx, 0x1(%rax,%rcx)
jmp 0x2e66
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x2b70
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x2b70
movq %rax, -0x40(%rbp)
movq -0x18(%rbp), %rdi
callq 0x20e0
movq %rax, -0x20(%rbp)
movq -0x40(%rbp), %rdi
callq 0x20e0
movq %rax, -0x38(%rbp)
movq -0x20(%rbp), %rdi
addq -0x38(%rbp), %rdi
addq $0x5, %rdi
callq 0x2430
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq -0x40(%rbp), %rcx
leaq 0x85c9(%rip), %rsi      # 0xb416
movb $0x0, %al
callq 0x2240
movq -0x18(%rbp), %rdi
callq 0x2030
movq -0x40(%rbp), %rdi
callq 0x2030
movq -0x10(%rbp), %rax
addq $0x50, %rsp
popq %rbp
retq