// File: /workspace/github_c_makefile_star2_O0/sisshiki1969[P]monocc/src/parse.c
// Function: new_node_str
Node *new_node_str(Token *token) {
  Node *node = calloc(1, sizeof(Node));
  node->kind = ND_STR;
  node->token = token;
  int len = 0;
  for (Token *t = token; t; t = t->next) len += t->len;
  node->type = new_type_array(new_type_char(), len);
  node->str_id = vec_len(strings);
  vec_push(strings, node);

  node->label = (char *)calloc(1, len + 1);
  char *dest = node->label;
  for (Token *t = token; t; t = t->next) {
    char *src = t->str;
    for (int i = 0; i < t->len; i++) {
      if (*src != '\\') {
        *dest++ = *src++;
      } else {
        i++;
        src++;
        switch (*src++) {
          case '0':
            *dest++ = '\0';
            break;
          case 'a':
            *dest++ = '\a';
            break;
          case 'b':
            *dest++ = '\b';
            break;
          case 'f':
            *dest++ = '\f';
            break;
          case 'n':
            *dest++ = '\n';
            break;
          case 'r':
            *dest++ = '\r';
            break;
          case 't':
            *dest++ = '\t';
            break;
          case '\\':
            *dest++ = '\\';
            break;
          case '\'':
            *dest++ = '\'';
            break;
          case '\"':
            *dest++ = '\"';
            break;
          default:
            error_at_token(token, "Unsupported escape sequence.");
        }
      }
    }
  }
  *dest = '\0';
  node->offset = (int)(dest - node->label) + 1;

  return node;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movl $0x1, %edi
movl $0x68, %esi
callq 0x10d0
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movl $0x2, (%rax)
movq -0x8(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x50(%rax)
movl $0x0, -0x14(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0x6ac6
movq -0x20(%rbp), %rax
movl 0x28(%rax), %eax
addl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0x6aa4
movb $0x0, %al
callq 0xd110
movq %rax, %rdi
movl -0x14(%rbp), %esi
callq 0xd180
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x58(%rax)
leaq 0xe71e(%rip), %rax      # 0x15208
movq (%rax), %rdi
callq 0x4000
movl %eax, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x28(%rax)
leaq 0xe706(%rip), %rax      # 0x15208
movq (%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x4020
movl -0x14(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
movl $0x1, %edi
callq 0x10d0
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x6cf6
movq -0x30(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x38(%rbp)
movl $0x0, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
movq -0x30(%rbp), %rcx
cmpl 0x28(%rcx), %eax
jge 0x6ce3
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x5c, %eax
je 0x6ba1
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x28(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movb %cl, (%rax)
jmp 0x6cd3
movl -0x3c(%rbp), %eax
incl %eax
movl %eax, -0x3c(%rbp)
movq -0x38(%rbp), %rax
incq %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, %rcx
incq %rcx
movq %rcx, -0x38(%rbp)
movsbl (%rax), %eax
addl $-0x22, %eax
movl %eax, %ecx
movq %rcx, -0x48(%rbp)
subl $0x52, %eax
ja 0x6cbf
movq -0x48(%rbp), %rax
leaq 0x958e(%rip), %rcx      # 0x10170
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0x0, (%rax)
jmp 0x6cd1
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0x7, (%rax)
jmp 0x6cd1
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0x8, (%rax)
jmp 0x6cd1
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0xc, (%rax)
jmp 0x6cd1
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0xa, (%rax)
jmp 0x6cd1
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0xd, (%rax)
jmp 0x6cd1
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0x9, (%rax)
jmp 0x6cd1
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0x5c, (%rax)
jmp 0x6cd1
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0x27, (%rax)
jmp 0x6cd1
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0x22, (%rax)
jmp 0x6cd1
movq -0x8(%rbp), %rdi
leaq 0x966e(%rip), %rsi      # 0x10338
movb $0x0, %al
callq 0x5d20
jmp 0x6cd3
jmp 0x6cd5
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x6b5e
jmp 0x6ce5
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0x6b40
movq -0x28(%rbp), %rax
movb $0x0, (%rax)
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movq 0x40(%rcx), %rcx
subq %rcx, %rax
movl %eax, %ecx
addl $0x1, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x38(%rax)
movq -0x10(%rbp), %rax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)