// File: /workspace/github_c_makefile_star2_O2/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 %r12
pushq %rbx
leaq 0x154bc(%rip), %r15     # 0x1c180
pushq $-0x4
popq %r12
pushq $-0x5
popq %rbx
movslq 0x159c6(%rip), %rax     # 0x1c698
movq (%r15,%rax,8), %rdi
callq 0x3220
movl %eax, %r14d
cmpl $0x3b, %r14d
jne 0x6d19
cmpl $0x0, 0x158c9(%rip)     # 0x1c5b4
jne 0x6d0e
cmpl $-0x1, %r14d
je 0x6d0e
cmpl $0xa, %r14d
je 0x6d0e
movslq 0x15998(%rip), %rax     # 0x1c698
movq (%r15,%rax,8), %rdi
callq 0x3220
movl %eax, %r14d
jmp 0x6ce4
cmpl $0x0, 0x1589f(%rip)     # 0x1c5b4
je 0x6cde
jmp 0x6d58
cmpl $-0x1, %r14d
je 0x6d4a
cmpl $0x9, %r14d
je 0x6d3f
cmpl $0xa, %r14d
je 0x6d39
cmpl $0xd, %r14d
je 0x6d3f
cmpl $0x20, %r14d
je 0x6d3f
jmp 0x6d4f
incl 0x15891(%rip)           # 0x1c5d0
cmpl $0x0, 0x1586e(%rip)     # 0x1c5b4
je 0x6ccb
jmp 0x6d58
movq %r12, %rbx
jmp 0x6d58
cmpl $0x0, 0x1585e(%rip)     # 0x1c5b4
je 0x6d64
movq %rbx, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
cmpl $0x5b, %r14d
je 0x6d77
cmpl $0x28, %r14d
jne 0x6d8a
pushq $-0x69
popq %rsi
xorl %edi, %edi
jmp 0x6d7d
pushq $0x8
popq %rdi
pushq $-0x6b
popq %rsi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x6a4f
leal -0x22(%r14), %eax
cmpl $0xa, %eax
ja 0x6db0
leaq 0xd26a(%rip), %rcx      # 0x14004
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x73f2
cmpl $0x3a, %r14d
je 0x6e8a
cmpl $0x5d, %r14d
je 0x6e76
cmpl $0x60, %r14d
jne 0x6de3
callq 0x78ee
testl %eax, %eax
je 0x6eb8
leaq 0xd77a(%rip), %rdi      # 0x14558
jmp 0x6f4b
callq 0x3230
movq (%rax), %rax
movslq %r14d, %rcx
movzwl (%rax,%rcx,2), %eax
btl $0xb, %eax
jb 0x6eef
cmpl $0x5f, %r14d
je 0x6f58
andl $0x400, %eax            # imm = 0x400
jne 0x6f58
leaq 0xd717(%rip), %rdi      # 0x1452f
pushq $0x10
popq %rdx
movl %r14d, %esi
callq 0x30f0
testq %rax, %rax
je 0x6fa1
movl %r14d, %edi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x7836
cmpl $0x0, 0x1583d(%rip)     # 0x1c680
je 0x6f18
pushq $-0x69
jmp 0x6f6d
callq 0x78ee
testl %eax, %eax
je 0x6f21
leaq 0xd712(%rip), %rdi      # 0x14576
jmp 0x6f4b
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x74ec
cmpl $0x0, 0x15803(%rip)     # 0x1c680
je 0x6f44
pushq $-0x6b
jmp 0x6f6d
movslq 0x15807(%rip), %rax     # 0x1c698
movq (%r15,%rax,8), %rdi
callq 0x3220
cmpl $0x3a, %eax
jne 0x6eff
cmpl $0x0, 0x157da(%rip)     # 0x1c680
jne 0x6f6b
movq 0x157dd(%rip), %rbx     # 0x1c690
jmp 0x6d58
incl 0x157c2(%rip)           # 0x1c680
callq 0x6cb2
cmpl $0x60, %r14d
leaq 0x157d2(%rip), %rcx     # 0x1c6a0
leaq 0x157d3(%rip), %rdx     # 0x1c6a8
cmoveq %rcx, %rdx
movq (%rdx), %rsi
movq %rax, %rdi
callq 0x6fb5
decl 0x15796(%rip)           # 0x1c680
jmp 0x6d5b
movl %r14d, %edi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x7658
movslq 0x15792(%rip), %rcx     # 0x1c698
movq (%r15,%rcx,8), %rsi
movl %eax, %edi
callq 0x3170
pushq $0x3a
popq %rdi
xorl %esi, %esi
jmp 0x6f5e
leaq 0xd66e(%rip), %rdi      # 0x1458d
jmp 0x6f4b
movslq 0x15770(%rip), %rax     # 0x1c698
movq (%r15,%rax,8), %rdi
callq 0x3220
cmpl $0x40, %eax
jne 0x6f73
callq 0x6cb2
movq 0x1576e(%rip), %rsi     # 0x1c6b0
jmp 0x6f91
leaq 0xd651(%rip), %rdi      # 0x1459c
pushq $-0x8
popq %rsi
callq 0x33e4
jmp 0x6d58
pushq $0x1
popq %rsi
movl %r14d, %edi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x7710
pushq $-0x67
popq %rbx
jmp 0x6d58
movslq 0x1571e(%rip), %rcx     # 0x1c698
movq (%r15,%rcx,8), %rsi
movl %eax, %edi
callq 0x3170
callq 0x6cb2
movq 0x15727(%rip), %rsi     # 0x1c6b8
movq %rax, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x6fb5
leaq 0xd603(%rip), %rdi      # 0x145ab
movl %r14d, %esi
callq 0x75e3
jmp 0x6d58