Scheme_Object *scheme_eval_compiled_sized_string(const char *str, int len, Scheme_Env *env) { Scheme_Object *port, *expr; Scheme_Config *config; config = scheme_current_config(); port = scheme_make_sized_byte_string_input_port(str, -len); /* negative means it's constant */ if (!env) env = scheme_get_env(NULL); expr = scheme_internal_read(port, NULL, 1, 1, 0, 0, -1, NULL); return _scheme_eval_compiled(expr, env); }
static Scheme_Linklet *eval_linklet_string(const char *str, intptr_t len, int extract) { Scheme_Object *port, *expr; if (len < 0) len = strlen(str); port = scheme_make_sized_byte_string_input_port(str, -len); /* negative means it's constant */ expr = scheme_internal_read(port, 1, 1, -1, scheme_init_load_on_demand ? scheme_true : scheme_false); if (extract) { /* expr is a linklet bundle; 'startup is mapped to the linklet */ return (Scheme_Linklet *)scheme_hash_tree_get((Scheme_Hash_Tree *)SCHEME_PTR_VAL(expr), scheme_intern_symbol("startup")); } else { return scheme_compile_and_optimize_linklet(scheme_datum_to_syntax(expr, scheme_false, 0), scheme_intern_symbol("startup")); } }
Scheme_Object *scheme_eval_compiled_sized_string_with_magic(const char *str, int len, Scheme_Env *env, Scheme_Object *magic_sym, Scheme_Object *magic_val, int multi_ok) { Scheme_Object *port, *expr; port = scheme_make_sized_byte_string_input_port(str, -len); /* negative means it's constant */ if (!env) env = scheme_get_env(NULL); expr = scheme_internal_read(port, NULL, 1, 1, 0, 0, -1, NULL, magic_sym, magic_val, NULL); if (multi_ok) return _scheme_eval_compiled_multi(expr, env); else return _scheme_eval_compiled(expr, env); }