// File: /workspace/github_c_makefile_star2_O3/azhai[P]mlite/mlite.c
// Function: read_form
cell read_form(void) {
	int	c;

	c = read_c();
	while (1) {	/* Skip over spaces and comments */
		while (c == ' ' || c == '\t' || c == '\n' || c == '\r') {
			if (c == '\n')
				Line_no++;
			if (Error_flag)
				return UNDEFINED;
			c = read_c();
		}
		if (c != ';')
			break;
		while (!Error_flag && c != '\n' && c != EOF)
			c = read_c();
		if (Error_flag)
			return UNDEFINED;
	}
	if (c == EOF)
		return END_OF_FILE;
	if (Error_flag)
		return UNDEFINED;
	if (c == '(') {
		return read_list(0, TOK_RPAREN);
	}
	else if (c == '[') {
		return read_list(LIST_TAG, TOK_RBRACK);
	}
	else if (c == '\'' || c == '`') {
		cell	n;

		if (closing_paren())
			return error("missing form after \"'\" or \"`\"",
					NOEXPR);
		Level++;
		n = quote(read_form(), c=='`'? S_quasiquote: S_quote);
		Level--;
		return n;
	}
	else if (c == ',') {
		if (closing_paren())
			return error("missing form after \",\"",
					NOEXPR);
		c = read_c();
		if (c == '@') {
			return quote(read_form(), S_unquote_splicing);
		}
		else {
			reject(c);
			return quote(read_form(), S_unquote);
		}
	}
	else if (c == '#') {
		return read_char();
	}
	else if (c == '"') {
		return read_string();
	}
	else if (c == ')') {
		if (!Level)
			return error("unexpected ')'", NOEXPR);
		return TOK_RPAREN;
	}
	else if (c == ']') {
		if (!Level)
			return error("unexpected ']'", NOEXPR);
		return TOK_RBRACK;
	}
	else if (c == ':') {
		c = read_c();
		if (c != ':') {
			reject(c);
			return read_ident(':', 0);
		}
		if (!Level)
			return S_cons;
		return TOK_CONS;
	}
	else if (isdigit(c)) {
		return read_number(c);
	}
	else if (is_ident(c)) {
		return read_ident(c, 1);
	}
	else if (is_opsym(c)) {
		return read_opsym(c);
	}
	else {
		return funny_char("funny input character", c);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
leaq 0x16c25(%rip), %r15     # 0x1e180
movq $-0x4, %r14
movslq 0x1712f(%rip), %rax     # 0x1e698
movq (%r15,%rax,8), %rdi
callq 0x3220
movl %eax, %ebx
cmpl $0x3b, %ebx
jne 0x75be
movl $0x3b, %ebx
cmpl $0x0, 0x1702f(%rip)     # 0x1e5b4
je 0x7592
cmpl $0x0, 0x17026(%rip)     # 0x1e5b4
je 0x7574
jmp 0x75f3
movl $0x3b, %ebx
cmpl $-0x1, %ebx
je 0x7587
cmpl $0xa, %ebx
je 0x7587
movslq 0x170f0(%rip), %rax     # 0x1e698
movq (%r15,%rax,8), %rdi
callq 0x3220
movl %eax, %ebx
cmpl $0x0, 0x16ffa(%rip)     # 0x1e5b4
je 0x7597
jmp 0x7587
cmpl $0x9, %ebx
jle 0x75d4
cmpl $0xa, %ebx
je 0x75e0
cmpl $0xd, %ebx
je 0x75e6
cmpl $0x20, %ebx
je 0x75e6
jmp 0x75fc
cmpl $-0x1, %ebx
je 0x760c
cmpl $0x9, %ebx
je 0x75e6
jmp 0x75fc
incl 0x16fea(%rip)           # 0x1e5d0
cmpl $0x0, 0x16fc7(%rip)     # 0x1e5b4
je 0x7562
movq $-0x5, %r14
jmp 0x760c
movq $-0x5, %r14
cmpl $0x0, 0x16faa(%rip)     # 0x1e5b4
je 0x761a
movq %r14, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
cmpl $0x5b, %ebx
je 0x762d
cmpl $0x28, %ebx
jne 0x7646
xorl %edi, %edi
movl $0xffffff97, %esi       # imm = 0xFFFFFF97
jmp 0x7637
movl $0x8, %edi
movl $0xffffff95, %esi       # imm = 0xFFFFFF95
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x7283
cmpl $0x39, %ebx
jg 0x7676
leal -0x22(%rbx), %eax
cmpl $0xa, %eax
ja 0x775c
leaq 0xe9a6(%rip), %rcx      # 0x16004
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x7de5
cmpl $0x3a, %ebx
je 0x76f7
cmpl $0x5d, %ebx
je 0x7730
cmpl $0x60, %ebx
jne 0x775c
callq 0x83e5
testl %eax, %eax
je 0x77b6
leaq 0xeeb7(%rip), %rdi      # 0x16558
jmp 0x76e6
movq $-0x69, %r14
cmpl $0x0, 0x16fcf(%rip)     # 0x1e680
jne 0x760c
leaq 0xeecf(%rip), %rdi      # 0x1658d
jmp 0x774b
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x7f3a
callq 0x83e5
testl %eax, %eax
je 0x7818
leaq 0xee90(%rip), %rdi      # 0x16576
movq $-0x8, %rsi
callq 0x33eb
jmp 0x760c
movslq 0x16f9a(%rip), %rax     # 0x1e698
movq (%r15,%rax,8), %rdi
callq 0x3220
cmpl $0x3a, %eax
jne 0x77ec
cmpl $0x0, 0x16f69(%rip)     # 0x1e680
movq $-0x67, %r14
jne 0x760c
movq 0x16f65(%rip), %r14     # 0x1e690
jmp 0x760c
movq $-0x6b, %r14
cmpl $0x0, 0x16f42(%rip)     # 0x1e680
jne 0x760c
leaq 0xee51(%rip), %rdi      # 0x1659c
movq $-0x8, %rsi
callq 0x33eb
jmp 0x75f3
callq 0x3230
movq (%rax), %rax
movslq %ebx, %rcx
movzwl (%rax,%rcx,2), %eax
btl $0xb, %eax
jb 0x7807
cmpl $0x5f, %ebx
je 0x783b
andl $0x400, %eax            # imm = 0x400
jne 0x783b
leaq 0xed9f(%rip), %rdi      # 0x1652f
movl $0x10, %edx
movl %ebx, %esi
callq 0x30f0
testq %rax, %rax
je 0x7881
movl %ebx, %edi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x8314
incl 0x16ec4(%rip)           # 0x1e680
callq 0x754a
cmpl $0x60, %ebx
leaq 0x16ed5(%rip), %rcx     # 0x1e6a0
leaq 0x16ed6(%rip), %rdx     # 0x1e6a8
cmoveq %rcx, %rdx
movq (%rdx), %rsi
movq %rax, %rdi
callq 0x7894
decl 0x16e99(%rip)           # 0x1e680
jmp 0x760f
movslq 0x16ea5(%rip), %rcx     # 0x1e698
movq (%r15,%rcx,8), %rsi
movl %eax, %edi
callq 0x3170
movl $0x3a, %edi
xorl %esi, %esi
jmp 0x7842
movl %ebx, %edi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x8121
movslq 0x16e79(%rip), %rax     # 0x1e698
movq (%r15,%rax,8), %rdi
callq 0x3220
cmpl $0x40, %eax
jne 0x7851
callq 0x754a
movq 0x16e77(%rip), %rsi     # 0x1e6b0
jmp 0x786f
movl %ebx, %edi
movl $0x1, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x81e1
movslq 0x16e40(%rip), %rcx     # 0x1e698
movq (%r15,%rcx,8), %rsi
movl %eax, %edi
callq 0x3170
callq 0x754a
movq 0x16e49(%rip), %rsi     # 0x1e6b8
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x7894
leaq 0xed23(%rip), %rdi      # 0x165ab
movl %ebx, %esi
callq 0x8067
jmp 0x760c