// File: /workspace/github_c_makefile_star2_O1/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 0x16b8f(%rip), %r15     # 0x1e180
movq $-0x4, %r14
movslq 0x17099(%rip), %rax     # 0x1e698
movq (%r15,%rax,8), %rdi
callq 0x3220
movl %eax, %ebx
cmpl $0x3b, %ebx
jne 0x7654
movl $0x3b, %ebx
cmpl $0x0, 0x16f99(%rip)     # 0x1e5b4
je 0x7628
cmpl $0x0, 0x16f90(%rip)     # 0x1e5b4
je 0x760a
jmp 0x7689
movl $0x3b, %ebx
cmpl $-0x1, %ebx
je 0x761d
cmpl $0xa, %ebx
je 0x761d
movslq 0x1705a(%rip), %rax     # 0x1e698
movq (%r15,%rax,8), %rdi
callq 0x3220
movl %eax, %ebx
cmpl $0x0, 0x16f64(%rip)     # 0x1e5b4
je 0x762d
jmp 0x761d
cmpl $0x9, %ebx
jle 0x766a
cmpl $0xa, %ebx
je 0x7676
cmpl $0xd, %ebx
je 0x767c
cmpl $0x20, %ebx
je 0x767c
jmp 0x7692
cmpl $-0x1, %ebx
je 0x76a2
cmpl $0x9, %ebx
je 0x767c
jmp 0x7692
incl 0x16f54(%rip)           # 0x1e5d0
cmpl $0x0, 0x16f31(%rip)     # 0x1e5b4
je 0x75f8
movq $-0x5, %r14
jmp 0x76a2
movq $-0x5, %r14
cmpl $0x0, 0x16f14(%rip)     # 0x1e5b4
je 0x76b0
movq %r14, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
cmpl $0x5b, %ebx
je 0x76c3
cmpl $0x28, %ebx
jne 0x76dc
xorl %edi, %edi
movl $0xffffff97, %esi       # imm = 0xFFFFFF97
jmp 0x76cd
movl $0x8, %edi
movl $0xffffff95, %esi       # imm = 0xFFFFFF95
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x7313
cmpl $0x39, %ebx
jg 0x770c
leal -0x22(%rbx), %eax
cmpl $0xa, %eax
ja 0x77f2
leaq 0xe910(%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 0x7e7b
cmpl $0x3a, %ebx
je 0x778d
cmpl $0x5d, %ebx
je 0x77c6
cmpl $0x60, %ebx
jne 0x77f2
callq 0x847b
testl %eax, %eax
je 0x784c
leaq 0xee39(%rip), %rdi      # 0x16570
jmp 0x777c
movq $-0x69, %r14
cmpl $0x0, 0x16f39(%rip)     # 0x1e680
jne 0x76a2
leaq 0xee51(%rip), %rdi      # 0x165a5
jmp 0x77e1
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x7fd0
callq 0x847b
testl %eax, %eax
je 0x78ae
leaq 0xee12(%rip), %rdi      # 0x1658e
movq $-0x8, %rsi
callq 0x33eb
jmp 0x76a2
movslq 0x16f04(%rip), %rax     # 0x1e698
movq (%r15,%rax,8), %rdi
callq 0x3220
cmpl $0x3a, %eax
jne 0x7882
cmpl $0x0, 0x16ed3(%rip)     # 0x1e680
movq $-0x67, %r14
jne 0x76a2
movq 0x16ecf(%rip), %r14     # 0x1e690
jmp 0x76a2
movq $-0x6b, %r14
cmpl $0x0, 0x16eac(%rip)     # 0x1e680
jne 0x76a2
leaq 0xedd3(%rip), %rdi      # 0x165b4
movq $-0x8, %rsi
callq 0x33eb
jmp 0x7689
callq 0x3230
movq (%rax), %rax
movslq %ebx, %rcx
movzwl (%rax,%rcx,2), %eax
btl $0xb, %eax
jb 0x789d
cmpl $0x5f, %ebx
je 0x78d1
andl $0x400, %eax            # imm = 0x400
jne 0x78d1
leaq 0xed21(%rip), %rdi      # 0x16547
movl $0x10, %edx
movl %ebx, %esi
callq 0x30f0
testq %rax, %rax
je 0x7917
movl %ebx, %edi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x83aa
incl 0x16e2e(%rip)           # 0x1e680
callq 0x75e0
cmpl $0x60, %ebx
leaq 0x16e3f(%rip), %rcx     # 0x1e6a0
leaq 0x16e40(%rip), %rdx     # 0x1e6a8
cmoveq %rcx, %rdx
movq (%rdx), %rsi
movq %rax, %rdi
callq 0x792a
decl 0x16e03(%rip)           # 0x1e680
jmp 0x76a5
movslq 0x16e0f(%rip), %rcx     # 0x1e698
movq (%r15,%rcx,8), %rsi
movl %eax, %edi
callq 0x3170
movl $0x3a, %edi
xorl %esi, %esi
jmp 0x78d8
movl %ebx, %edi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x81b7
movslq 0x16de3(%rip), %rax     # 0x1e698
movq (%r15,%rax,8), %rdi
callq 0x3220
cmpl $0x40, %eax
jne 0x78e7
callq 0x75e0
movq 0x16de1(%rip), %rsi     # 0x1e6b0
jmp 0x7905
movl %ebx, %edi
movl $0x1, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x8277
movslq 0x16daa(%rip), %rcx     # 0x1e698
movq (%r15,%rcx,8), %rsi
movl %eax, %edi
callq 0x3170
callq 0x75e0
movq 0x16db3(%rip), %rsi     # 0x1e6b8
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x792a
leaq 0xeca5(%rip), %rdi      # 0x165c3
movl %ebx, %esi
callq 0x80fd
jmp 0x76a2