// File: /workspace/github_c_makefile_star2_O0/ebiggers[P]mysh/mysh_parse.c
// Function: split_string_around_whitespace
static bool
split_string_around_whitespace(struct string *s, struct list_head *out_list,
			       const unsigned char *param_char_map)
{
	const char *chars;
	struct string *s2;
	size_t i;
	bool leading_whitespace = false;
	bool trailing_whitespace = false;

	chars = s->chars;
	i = 0;
	for (;;) {
		/* skip leading whitespace produced by parameter expansion  */
		size_t j = i;
		while (isspace(chars[i]) &&
		       (!param_char_map || param_char_map[i] != 0))
		{
			if (i == 0)
				leading_whitespace = true;
			i++;
		}

		if (chars[i] == '\0') {
			/* end of string: set trailing_whitespace if there was
			 * at least 1 parameter-expanded whitespace character at
			 * the end of the string.  Also, free @s before
			 * returning, since it's no longer needed. */
			trailing_whitespace = (i != j);
			free_string(s);
			break;
		}
		/* j is set the index of the next character that is not a
		 * parameter-expanded whitespace character */
		j = i;

		/* skip non-whitespace and whitespace not produced by parameter
		 * expansion */
		while (chars[i] != '\0' &&
		       (!isspace(chars[i]) || (param_char_map && !param_char_map[i])))
		{
			i++;
		}

		if (j == 0 && i == s->len) {
			/* Add entire string and return. */
			list_add_tail(&s->list, out_list);
			trailing_whitespace = false;
			break;
		} else {
			/* Create a new substring and append it to the list of
			 * split strings.
			 *
			 * STRING_FLAG_PRECEDING_WHITESPACE is set unless the
			 * substring occurs at the very beginning of the
			 * original string with no preceding whitespace. */
			s2 = new_string_with_data(&chars[j], i - j);
			s2->flags = s->flags;
			if (i != 0 || leading_whitespace)
				s2->flags |= STRING_FLAG_PRECEDING_WHITESPACE;
			list_add_tail(&s2->list, out_list);
		}
	}
	return trailing_whitespace;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movb $0x0, -0x31(%rbp)
movb $0x0, -0x32(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x20(%rbp)
movq $0x0, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x40(%rbp)
callq 0x23d0
movq (%rax), %rax
movq -0x20(%rbp), %rcx
movq -0x30(%rbp), %rdx
movsbl (%rcx,%rdx), %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %ecx
andl $0x2000, %ecx           # imm = 0x2000
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x41(%rbp)
je 0x7bb9
movb $0x1, %al
cmpq $0x0, -0x18(%rbp)
movb %al, -0x42(%rbp)
je 0x7bb3
movq -0x18(%rbp), %rax
movq -0x30(%rbp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x0, %eax
setne %al
movb %al, -0x42(%rbp)
movb -0x42(%rbp), %al
movb %al, -0x41(%rbp)
movb -0x41(%rbp), %al
testb $0x1, %al
jne 0x7bc2
jmp 0x7bdb
cmpq $0x0, -0x30(%rbp)
jne 0x7bcd
movb $0x1, -0x31(%rbp)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x7b67
movq -0x20(%rbp), %rax
movq -0x30(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x0, %eax
jne 0x7c0a
movq -0x30(%rbp), %rax
cmpq -0x40(%rbp), %rax
setne %al
andb $0x1, %al
movb %al, -0x32(%rbp)
movq -0x8(%rbp), %rdi
callq 0x9020
jmp 0x7d1c
movq -0x30(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x20(%rbp), %rax
movq -0x30(%rbp), %rcx
movsbl (%rax,%rcx), %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x43(%rbp)
je 0x7c7f
callq 0x23d0
movq (%rax), %rax
movq -0x20(%rbp), %rcx
movq -0x30(%rbp), %rdx
movsbl (%rcx,%rdx), %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %ecx
andl $0x2000, %ecx           # imm = 0x2000
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x44(%rbp)
je 0x7c79
xorl %eax, %eax
cmpq $0x0, -0x18(%rbp)
movb %al, -0x45(%rbp)
je 0x7c73
movq -0x18(%rbp), %rax
movq -0x30(%rbp), %rcx
cmpb $0x0, (%rax,%rcx)
setne %al
xorb $-0x1, %al
movb %al, -0x45(%rbp)
movb -0x45(%rbp), %al
movb %al, -0x44(%rbp)
movb -0x44(%rbp), %al
movb %al, -0x43(%rbp)
movb -0x43(%rbp), %al
testb $0x1, %al
jne 0x7c88
jmp 0x7c99
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x7c12
cmpq $0x0, -0x40(%rbp)
jne 0x7cc5
movq -0x30(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x7cc5
movq -0x8(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rsi
callq 0x7d30
movb $0x0, -0x32(%rbp)
jmp 0x7d1c
movq -0x20(%rbp), %rdi
addq -0x40(%rbp), %rdi
movq -0x30(%rbp), %rsi
subq -0x40(%rbp), %rsi
callq 0x8fa0
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rax
movl 0x10(%rax), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x10(%rax)
cmpq $0x0, -0x30(%rbp)
jne 0x7cf9
testb $0x1, -0x31(%rbp)
je 0x7d06
movq -0x28(%rbp), %rax
movl 0x10(%rax), %ecx
orl $0x10, %ecx
movl %ecx, 0x10(%rax)
movq -0x28(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rsi
callq 0x7d30
jmp 0x7b5f
movb -0x32(%rbp), %al
andb $0x1, %al
addq $0x50, %rsp
popq %rbp
retq
nopw (%rax,%rax)