static sexp sexp_load_standard_params (sexp ctx, sexp e, int nonblocking) { sexp_gc_var1(res); sexp_gc_preserve1(ctx, res); sexp_load_standard_ports(ctx, e, stdin, stdout, stderr, 0); if (nonblocking) { sexp_make_unblocking(ctx, sexp_param_ref(ctx, e, sexp_global(ctx, SEXP_G_CUR_IN_SYMBOL))); sexp_make_unblocking(ctx, sexp_param_ref(ctx, e, sexp_global(ctx, SEXP_G_CUR_OUT_SYMBOL))); sexp_make_unblocking(ctx, sexp_param_ref(ctx, e, sexp_global(ctx, SEXP_G_CUR_ERR_SYMBOL))); } res = sexp_make_env(ctx); sexp_env_parent(res) = e; sexp_context_env(ctx) = res; sexp_set_parameter(ctx, sexp_meta_env(ctx), sexp_global(ctx, SEXP_G_INTERACTION_ENV_SYMBOL), res); sexp_gc_release1(ctx); return res; }
static sexp sexp_load_standard_repl_env (sexp ctx, sexp env, sexp k) { sexp_gc_var3(e, p, res); sexp_gc_preserve3(ctx, e, p, res); e = sexp_load_standard_env(ctx, env, k); if (sexp_exceptionp(e)) return e; sexp_load_standard_ports(ctx, e, stdin, stdout, stderr, 0); #if SEXP_USE_GREEN_THREADS p = sexp_param_ref(ctx, e, sexp_global(ctx, SEXP_G_CUR_IN_SYMBOL)); if (sexp_portp(p)) sexp_maybe_block_port(ctx, p, 1); #endif res = sexp_make_env(ctx); sexp_env_parent(res) = e; sexp_set_parameter(ctx, res, sexp_global(ctx, SEXP_G_INTERACTION_ENV_SYMBOL), res); sexp_gc_release3(ctx); return res; }
static sexp sexp_env_parent_set_op (sexp ctx, sexp self, sexp_sint_t n, sexp e1, sexp e2) { sexp_assert_type(ctx, sexp_envp, SEXP_ENV, e1); if (sexp_truep(e2)) sexp_assert_type(ctx, sexp_envp, SEXP_ENV, e2); sexp_env_parent(e1) = e2; return SEXP_VOID; }
static sexp sexp_env_parent_set_op (sexp ctx, sexp self, sexp_sint_t n, sexp e) { sexp_assert_type(ctx, sexp_envp, SEXP_ENV, e); return sexp_env_parent(e) ? sexp_env_parent(e) : SEXP_FALSE; }