// File: /workspace/github_c_makefile_star2_O1/dalnefre[P]kernel_abe/schemer.c
// Function: init_schemer
static CONS*
init_schemer(CONFIG* cfg)
{
	CONS* env;
	CONS* a;
	
	DBUG_ENTER("init_schemer");
	if (initial__environment == NULL) {
		eval__actor = CFG_ACTOR(cfg, eval_beh, NIL);
		eval_list__actor = CFG_ACTOR(cfg, eval_list_beh, NIL);
		eval_par__actor = CFG_ACTOR(cfg, eval_par_beh, NIL);
		eval_seq__actor = CFG_ACTOR(cfg, eval_seq_beh, NIL);
		env = CFG_ACTOR(cfg, frame_beh, NIL);

		a = CFG_ACTOR(cfg, eval_fail_beh, NIL);
		env = init_add_binding(cfg, env, ATOM("fail!"), a);	/* WARNING: non-standard exception signal */
		a = CFG_ACTOR(cfg, fail_beh, CFG_ACTOR(cfg, abort_beh, NIL));
		env = init_add_binding(cfg, env, UNDEFINED, a);		/* default exception handler */
		env = init_add_binding(cfg, env, ATOM("false"), FALSE_SYMBOL);
		env = init_add_binding(cfg, env, ATOM("true"), TRUE_SYMBOL);
/*		env = init_add_binding(cfg, env, ATOM("eval"), eval__actor); */
		a = CFG_ACTOR(cfg, eval_quote_beh, NIL);
		env = init_add_binding(cfg, env, ATOM("quote"), a);
		env = init_add_binding(cfg, env, ATOM("literal"), a);	/* FIXME: non-standard alias */
		a = CFG_ACTOR(cfg, eval_spawn_beh, NIL);
		env = init_add_binding(cfg, env, ATOM("spawn"), a);	/* non-standard extension */
		a = CFG_ACTOR(cfg, eval_time_beh, NIL);
		env = init_add_binding(cfg, env, ATOM("time"), a);		/* non-standard extension */
		env = init_add_binding(cfg, env, ATOM("list"), eval_list__actor);
		env = init_add_binding(cfg, env, ATOM("par"), eval_par__actor);	/* non-standard extension */
		env = init_add_binding(cfg, env, ATOM("begin"), eval_seq__actor);
		a = CFG_ACTOR(cfg, eval_lambda_beh, NIL);
		env = init_add_binding(cfg, env, ATOM("lambda"), a);
		a = CFG_ACTOR(cfg, eval_form_beh, NIL);
		env = init_add_binding(cfg, env, ATOM("form"), a);		/* non-standard extension */
		a = CFG_ACTOR(cfg, eval_define_beh, NIL);
		env = init_add_binding(cfg, env, ATOM("define"), a);
		a = CFG_ACTOR(cfg, eval_set_beh, NIL);
		env = init_add_binding(cfg, env, ATOM("set!"), a);
		a = CFG_ACTOR(cfg, eval_and_beh, NIL);
		env = init_add_binding(cfg, env, ATOM("and"), a);
		a = CFG_ACTOR(cfg, eval_or_beh, NIL);
		env = init_add_binding(cfg, env, ATOM("or"), a);
		a = CFG_ACTOR(cfg, eval_cond_beh, NIL);
		env = init_add_binding(cfg, env, ATOM("cond"), a);
#if 0  /* replaced by "form" definition in library.scm */
		a = CFG_ACTOR(cfg, eval_if_beh, NIL);
		env = init_add_binding(cfg, env, ATOM("if"), a);
#endif
		a = CFG_ACTOR(cfg, fn_eval_beh, MK_FUNC(apply_cons_beh));
		env = init_add_binding(cfg, env, ATOM("cons"), a);
		a = CFG_ACTOR(cfg, fn_eval_beh, MK_FUNC(apply_car_beh));
		env = init_add_binding(cfg, env, ATOM("car"), a);
		a = CFG_ACTOR(cfg, fn_eval_beh, MK_FUNC(apply_cdr_beh));
		env = init_add_binding(cfg, env, ATOM("cdr"), a);
		a = CFG_ACTOR(cfg, fn_eval_beh, MK_FUNC(apply_is_pair_beh));
		env = init_add_binding(cfg, env, ATOM("pair?"), a);
		a = CFG_ACTOR(cfg, fn_eval_beh, MK_FUNC(apply_is_symbol_beh));
		env = init_add_binding(cfg, env, ATOM("symbol?"), a);
		a = CFG_ACTOR(cfg, fn_eval_beh, MK_FUNC(apply_is_boolean_beh));
		env = init_add_binding(cfg, env, ATOM("boolean?"), a);
		a = CFG_ACTOR(cfg, fn_eval_beh, MK_FUNC(apply_is_number_beh));
		env = init_add_binding(cfg, env, ATOM("number?"), a);
		a = CFG_ACTOR(cfg, fn_eval_beh, MK_FUNC(apply_is_eq_beh));
		env = init_add_binding(cfg, env, ATOM("eq?"), a);
		a = CFG_ACTOR(cfg, fn_eval_beh, MK_FUNC(apply_plus_beh));
		env = init_add_binding(cfg, env, ATOM("+"), a);
		a = CFG_ACTOR(cfg, fn_eval_beh, MK_FUNC(apply_minus_beh));
		env = init_add_binding(cfg, env, ATOM("-"), a);
		a = CFG_ACTOR(cfg, fn_eval_beh, MK_FUNC(apply_times_beh));
		env = init_add_binding(cfg, env, ATOM("*"), a);
		a = CFG_ACTOR(cfg, fn_eval_beh, MK_FUNC(apply_less_beh));
		env = init_add_binding(cfg, env, ATOM("<"), a);
		a = CFG_ACTOR(cfg, fn_eval_beh, MK_FUNC(apply_greater_beh));
		env = init_add_binding(cfg, env, ATOM(">"), a);
		a = CFG_ACTOR(cfg, fn_eval_beh, MK_FUNC(apply_sleep_beh));
		env = init_add_binding(cfg, env, ATOM("sleep"), a);		/* non-standard extension */
		a = CFG_ACTOR(cfg, fn_eval_beh, MK_FUNC(apply_call_cc_beh));
		env = init_add_binding(cfg, env, ATOM("call/cc"), a);

		cfg_add_gc_root(cfg, env);
		initial__environment = env;
	}
	DBUG_RETURN initial__environment;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rdi, %rbx
leaq 0xd27c(%rip), %rax      # 0x18d5a
movq %rsp, %rdi
movq %rax, (%rdi)
leaq 0x13835(%rip), %rax     # 0x1f320
movq (%rax), %rax
movq 0x50(%rax), %rax
movl 0x8(%rax), %ecx
movl %ecx, 0x8(%rdi)
movl $0x989, 0xc(%rdi)       # imm = 0x989
leaq 0xeeda(%rip), %rcx      # 0x1a9e0
movq %rcx, 0x10(%rdi)
leaq 0x1362f(%rip), %rcx     # 0x1f140
movq %rcx, 0x18(%rdi)
movq %rax, 0x20(%rdi)
callq 0x16ef2
cmpq $0x0, 0x1387a(%rip)     # 0x1f3a0
jne 0xc2c2
leaq -0x726a(%rip), %rsi     # 0x48c9
leaq 0x13756(%rip), %r14     # 0x1f290
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, 0x1382c(%rip)     # 0x1f378
leaq -0x5531(%rip), %rsi     # 0x6622
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, 0x1381b(%rip)     # 0x1f380
leaq -0x4d98(%rip), %rsi     # 0x6dd4
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, 0x137f2(%rip)     # 0x1f370
leaq -0x491d(%rip), %rsi     # 0x7268
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, 0x137d1(%rip)     # 0x1f368
leaq -0x88ba(%rip), %rsi     # 0x32e4
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, %r15
leaq -0x56e(%rip), %rsi      # 0xb645
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, %r12
leaq 0xd19f(%rip), %rdi      # 0x18d67
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x948c(%rip), %rsi     # 0x275c
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
leaq -0x822(%rip), %rsi      # 0xb3d8
movq %rbx, %rdi
movq %rax, %rdx
callq 0xde1a
movq %rax, %r12
callq 0xd26a
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq 0xc73a(%rip), %rdi      # 0x18362
callq 0x1265c
movq %rax, %r12
xorl %edi, %edi
callq 0x3d66
movq %rbx, %rdi
movq %r15, %rsi
movq %r12, %rdx
movq %rax, %rcx
callq 0xc2e4
movq %rax, %r15
leaq 0xc716(%rip), %rdi      # 0x18368
callq 0x1265c
movq %rax, %r12
movl $0x1, %edi
callq 0x3d66
movq %rbx, %rdi
movq %r15, %rsi
movq %r12, %rdx
movq %rax, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x6ee1(%rip), %rsi     # 0x4d9e
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, %r12
leaq 0xc59f(%rip), %rdi      # 0x18233
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq 0xd0b9(%rip), %rdi      # 0x18d6d
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x6c1b(%rip), %rsi     # 0x50b9
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, %r12
leaq 0xd08c(%rip), %rdi      # 0x18d75
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x6a21(%rip), %rsi     # 0x52e8
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, %r12
leaq 0xd05d(%rip), %rdi      # 0x18d7b
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq 0xe51e(%rip), %rdi      # 0x1a25c
callq 0x1265c
movq 0x13636(%rip), %rcx     # 0x1f380
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
callq 0xc2e4
movq %rax, %r15
leaq 0xc59d(%rip), %rdi      # 0x182ff
callq 0x1265c
movq 0x13602(%rip), %rcx     # 0x1f370
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
callq 0xc2e4
movq %rax, %r15
leaq 0xcffa(%rip), %rdi      # 0x18d80
callq 0x1265c
movq 0x135d6(%rip), %rcx     # 0x1f368
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
callq 0xc2e4
movq %rax, %r15
leaq -0x7cee(%rip), %rsi     # 0x40bc
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, %r12
leaq 0xc4c1(%rip), %rdi      # 0x18280
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x7715(%rip), %rsi     # 0x46ca
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, %r12
leaq 0xc3b7(%rip), %rdi      # 0x181ab
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x679b(%rip), %rsi     # 0x5679
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, %r12
leaq 0xc286(%rip), %rdi      # 0x180af
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x5ff8(%rip), %rsi     # 0x5e51
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, %r12
leaq 0xc258(%rip), %rdi      # 0x180b6
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x4789(%rip), %rsi     # 0x76f5
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, %r12
leaq 0xc4a4(%rip), %rdi      # 0x18337
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x431c(%rip), %rsi     # 0x7b97
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, %r12
leaq 0xdc47(%rip), %rdi      # 0x19b0f
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x3e74(%rip), %rsi     # 0x8074
movq %rbx, %rdi
movq %r14, %rdx
callq 0xde1a
movq %rax, %r14
leaq 0xc499(%rip), %rdi      # 0x18396
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r14, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x3795(%rip), %rax     # 0x8788
leaq 0x3(,%rax,4), %rdx
leaq -0x3a64(%rip), %r14     # 0x84c8
movq %rbx, %rdi
movq %r14, %rsi
callq 0xde1a
movq %rax, %r12
leaq 0xda56(%rip), %rdi      # 0x19997
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x357a(%rip), %rax     # 0x89e7
leaq 0x3(,%rax,4), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xde1a
movq %rax, %r12
leaq 0xc47f(%rip), %rdi      # 0x183fd
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x3340(%rip), %rax     # 0x8c5e
leaq 0x3(,%rax,4), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xde1a
movq %rax, %r12
leaq 0xc454(%rip), %rdi      # 0x1840f
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x2ea2(%rip), %rax     # 0x9139
leaq 0x3(,%rax,4), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xde1a
movq %rax, %r12
leaq 0xc441(%rip), %rdi      # 0x18439
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x2c6a(%rip), %rax     # 0x93ae
leaq 0x3(,%rax,4), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xde1a
movq %rax, %r12
leaq 0xc41e(%rip), %rdi      # 0x18453
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x2a22(%rip), %rax     # 0x9633
leaq 0x3(,%rax,4), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xde1a
movq %rax, %r12
leaq 0xc3fe(%rip), %rdi      # 0x18470
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x27ea(%rip), %rax     # 0x98a8
leaq 0x3(,%rax,4), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xde1a
movq %rax, %r12
leaq 0xc3de(%rip), %rdi      # 0x1848d
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x31fa(%rip), %rax     # 0x8ed5
leaq 0x3(,%rax,4), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xde1a
movq %rax, %r12
leaq 0xc337(%rip), %rdi      # 0x18423
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x2612(%rip), %rax     # 0x9afa
leaq 0x3(,%rax,4), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xde1a
movq %rax, %r12
leaq 0xc37b(%rip), %rdi      # 0x184a4
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x2388(%rip), %rax     # 0x9dc1
leaq 0x3(,%rax,4), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xde1a
movq %rax, %r12
leaq 0xe2be(%rip), %rdi      # 0x1a424
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x1fe3(%rip), %rax     # 0xa1a3
leaq 0x3(,%rax,4), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xde1a
movq %rax, %r12
leaq 0xc323(%rip), %rdi      # 0x184c6
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x1d55(%rip), %rax     # 0xa46e
leaq 0x3(,%rax,4), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xde1a
movq %rax, %r12
leaq 0xc2f7(%rip), %rdi      # 0x184d7
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x1a6f(%rip), %rax     # 0xa791
leaq 0x3(,%rax,4), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xde1a
movq %rax, %r12
leaq 0xd369(%rip), %rdi      # 0x19586
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x1789(%rip), %rax     # 0xaab4
leaq 0x3(,%rax,4), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xde1a
movq %rax, %r12
leaq 0xc2ac(%rip), %rdi      # 0x18506
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xc2e4
movq %rax, %r15
leaq -0x10ed(%rip), %rax     # 0xb18d
leaq 0x3(,%rax,4), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xde1a
movq %rax, %r14
leaq 0xc2a7(%rip), %rdi      # 0x1853e
callq 0x1265c
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r14, %rcx
callq 0xc2e4
movq %rax, %r14
movq %rbx, %rdi
movq %rax, %rsi
callq 0xd92f
movq %r14, 0x130de(%rip)     # 0x1f3a0
movq %rsp, %rdi
movl $0x9d6, 0xc(%rdi)       # imm = 0x9D6
callq 0x17077
movq 0x130c8(%rip), %rax     # 0x1f3a0
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq