// File: /workspace/github_c_makefile_star2_O1/ieyasu[P]funit/generate_code.c
// Function: print_macro_arg
static void print_macro_arg(struct Code *arg)
{
    char *s, *start, *end, *amp, string_delim;
    int in_string = 0;

    assert(arg && arg->type == ARG_CODE);

    s = start = arg->u.c.str;
    end = s + arg->u.c.len;
    amp = NULL;
    while (s < end) {
        switch (*s) {
        case '\'':
        case '"':
            if (in_string) {
                if (*s == string_delim) {
                    if (*(s + 1) == string_delim)
                        s++; // doubled to escape
                    else
                        in_string = 0; // close quote
                }
            } else {
                in_string = 1;
                string_delim = *s;
            }
            amp = NULL;
            break;
        case '&':
            amp = s;
            break;
        case ' ':
        case '\t':
            // leave amp alone
            break;
        case '\n':
        case '\r':
            // line continuation
            assert(amp != NULL);
            // print prior arg-part
            fwrite(start, amp - start, 1, fout);
            // scan for next arg-part
            start = find_line_continuation(s, end, in_string);
            s = start - 1;
            break;
        default:
            amp = NULL;
            break;
        }
        s++;
    }
    // print remaining
    fwrite(start, end - start, 1, fout);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
testq %rdi, %rdi
je 0x4cd8
cmpl $0x2, 0x8(%rdi)
jne 0x4cd8
movq 0x18(%rdi), %r12
movq 0x20(%rdi), %rax
leaq (%r12,%rax), %rbx
testq %rax, %rax
jle 0x4c72
xorl %r15d, %r15d
leaq 0x2e06(%rip), %r14      # 0x7920
xorl %r13d, %r13d
movq %r12, %rdi
movb (%r12), %al
movzbl %al, %ecx
cmpl $0x1f, %ecx
jle 0x4b6d
addl $-0x20, %ecx
cmpl $0x7, %ecx
ja 0x4c4a
movslq (%r14,%rcx,4), %rcx
addq %r14, %rcx
jmpq *%rcx
testl %r15d, %r15d
je 0x4c54
cmpb %bpl, %al
jne 0x4c5b
leaq 0x1(%r12), %rax
xorl %r15d, %r15d
cmpb %bpl, 0x1(%r12)
sete %r15b
cmoveq %rax, %r12
jmp 0x4c4a
cmpl $0x9, %ecx
je 0x4c64
cmpl $0xa, %ecx
je 0x4b84
cmpl $0xd, %ecx
jne 0x4c4a
testq %r13, %r13
je 0x4c9a
movq %r13, %rsi
subq %rdi, %rsi
movq 0x9656(%rip), %rcx      # 0xe1f0
movl $0x1, %edx
callq 0x2250
movzbl (%r12), %eax
cmpl $0xd, %eax
je 0x4bb7
cmpl $0xa, %eax
jne 0x4cb9
cmpq %rbx, %r12
jae 0x4be2
movq %rbx, %rax
subq %r12, %rax
incq %r12
movzbl -0x1(%r12), %ecx
cmpl $0xa, %ecx
je 0x4bf7
cmpl $0xd, %ecx
je 0x4be7
incq %r12
decq %rax
jne 0x4bc5
movq %rbx, %rdi
jmp 0x4c00
movq %r12, %rdi
jmp 0x4c00
leaq -0x1(%r12), %rdi
cmpb $0xa, (%r12)
cmoveq %r12, %rdi
jmp 0x4bfd
decq %r12
movq %r12, %rdi
incq %rdi
movq %rdi, %r12
cmpq %rbx, %rdi
jae 0x4c2b
movq %rbx, %rax
subq %rdi, %rax
movq %rdi, %r12
movzbl (%r12), %ecx
cmpl $0x20, %ecx
je 0x4c20
cmpl $0x9, %ecx
jne 0x4c2b
incq %r12
decq %rax
jne 0x4c11
movq %rbx, %r12
movzbl (%r12), %eax
cmpl $0x21, %eax
je 0x4bb7
cmpl $0x26, %eax
jne 0x4c44
incq %r12
testl %r15d, %r15d
cmovneq %r12, %rdi
leaq -0x1(%rdi), %r12
jmp 0x4c64
xorl %r13d, %r13d
jmp 0x4c64
movq %r12, %r13
jmp 0x4c64
xorl %r13d, %r13d
movl %eax, %ebp
jmp 0x4c5e
xorl %r13d, %r13d
movl $0x1, %r15d
incq %r12
cmpq %rbx, %r12
jb 0x4b20
jmp 0x4c75
movq %r12, %rdi
subq %rdi, %rbx
movq 0x9571(%rip), %rcx      # 0xe1f0
movl $0x1, %edx
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2250
leaq 0x37c6(%rip), %rdi      # 0x8467
leaq 0x35e3(%rip), %rsi      # 0x828b
leaq 0x3794(%rip), %rcx      # 0x8443
movl $0x89, %edx
callq 0x2120
leaq 0x37b3(%rip), %rdi      # 0x8473
leaq 0x35c4(%rip), %rsi      # 0x828b
leaq 0x37be(%rip), %rcx      # 0x848c
movl $0x3e, %edx
callq 0x2120
leaq 0x3747(%rip), %rdi      # 0x8426
leaq 0x35a5(%rip), %rsi      # 0x828b
leaq 0x3756(%rip), %rcx      # 0x8443
movl $0x69, %edx
callq 0x2120